Jak zinterpretować tablice amplitud częstotliwości [audio]

0

Witam
Mam funkcję zwracającą tablice zawierającą amplitudy dla kolejnych 512 częstotliwości (po szybkiej transformacie Fouriera) i chciałbym jakoś dzięki temu jednoznacznie wykryć różnicę, między np dwoma kolejnymi dźwiękami na pianinie. Problem polega na tym, że nie wiem za bardzo jak ją zinterpretować ponieważ dla dwóch kolejnych dźwięków rozkłąd amplitud w tablicy jest bardzo niewielki. Czy należy jakoś dodawać lub mnożyć wartości częstotliwości których amplituda jest znacząca? Próbowałem interpretować komórkę z największą amplitudą jako poszukiwana częstotliwość ale jeśli dźwięki się niewiele różnią to największa amplituda jest praktycznie dla tej samej częstotliwości. Jak to zinterpretować?

Dorzucam fragment tablicy po jednym FFT dla dwóch dźwięków (chyba oddalonych o 3 tony)

Pierwszy:

1. 24.530200  2. 78.125253  3. 154.982388  4. 59.811607  5. 123.034008  
6. 43.520093  7. 17.564852  8. 57.009540  9. 19.878907  10. 17.688291  
11. 26.899030  12. 21.690629  13. 41.065734  14. 5.629265  15. 13.488023  
16. 31.851005  17. 5.308379  18. 15.438041  19. 11.677794  20. 6.552101  
21. 12.709266  22. 4.275567  23. 0.867055  24. 12.156359  25. 10.431297  
26. 22.760795  27. 12.764864  28. 6.859765  29. 19.405782  30. 7.984998  
31. 5.128493  32. 4.270626  33. 7.221111  34. 12.893523  35. 1.958800  
36. 7.209430  37. 15.662171  38. 3.905020  39. 12.917633  40. 6.480977  
41. 5.068283  42. 3.200931  43. 2.665293  44. 0.682026  45. 3.346509   

Drugi:

 1. 27.572323  2. 39.764006  3. 100.092925  4. 106.513448  5. 37.895124  
6. 20.865323  7. 116.110630  8. 7.925638  9. 2.813901  10. 16.253956  
11. 45.913775  12. 18.918822  13. 15.345279  14. 12.833519  15. 13.281427  
16. 15.010813  17. 23.570405  18. 18.382650  19. 3.838912  20. 2.219364  
21. 35.020839  22. 9.516424  23. 7.188960  24. 11.163106  25. 11.016565  
26. 3.778006  27. 2.645686  28. 2.313941  29. 2.893926  30. 3.485040  
31. 6.017710  32. 14.785689  33. 4.507269  34. 4.173937  35. 17.348815  
36. 1.704237  37. 0.954174  38. 2.254724  39. 9.124653  40. 3.417880  
41. 2.641973  42. 2.485914  43. 2.661742  44. 4.210833  45. 5.742209

pozdrawiam

0

wrzuć to w "słupku" tylko amplituda, bez numerka

0

Dla 1000Hz początkowe amplitudy (potem juz do końca liniowo maleje)

 13.617803  
14.116853  
14.836800  
15.760871  
16.927294  
18.328082  
20.036658  
22.032948  
24.477856  
27.379682  
30.951830  
35.373371  
41.091487  
48.517063  
58.771599  
73.695928  
97.641513  
141.843274  
252.485365  
1000.000000  
521.410465  
211.593568  
134.196892  
98.920830  
78.795530  
65.661348  
56.485031  
49.647827  
44.468440  
40.264685  
36.885478  
34.050494  
31.665362  
29.601078  
27.832069  
26.281726  
24.905587  
23.669578  
22.587562  
21.592692  
20.693026  
19.891933  
19.122424  
18.418796  
17.803000  
17.201865  
16.650410  
16.139498  
15.664563  
15.210851  
14.787312  
14.352350  
14.057079  
13.684764  
13.350339  
13.030997  
12.728306  
12.439434  
12.153782  
11.860603  
12.037682  
11.478722  
11.232060  
11.012916  
10.802977  
10.600355  
10.408335  
10.224685  
10.044849  
9.872447  
9.711859  
9.554327  
9.402103  
9.249737  
9.105550  
8.962157  
8.837125  
8.704571  
8.579381  
8.459802  
8.342979  
8.224624  
8.113503  
8.007474  
7.900542  
7.793398  
7.701616  
7.602349  
7.507247  
7.417849  
7.324435  
7.231984  
7.153624  
7.066933  
6.987568  
6.904223  
6.825090  
6.741493  
6.662299  
6.577801  
6.482755  
6.360009  
6.035544  
6.824887  
6.452356  
6.326484  
6.239802  
6.163699  
6.105821  
6.039125  
5.977052  
5.919671  
5.862767  
5.804162  

Zapomniałem dodać że wartości amplitud otrzymane po FFT są pomnożone razy 1000

0

cóś mnie nie wychodzi,bo wychodzi mi, że częstotliwość próbkowania to około 54 kHz, a te dwa tony to 105 i 316 Hz

0

A można wiedzieć jak to liczysz? Może nie wychodzi dlatego że nie użyłeś wszystkich danych?

0

Fi=i*Fs/N
Fi częstotliwość środkowa i-tego pasma
Fs częstotliwość próbkowania
N długość próbki

0

Mógłbyś troszkę jaśniej? ;d Byłbym wdzięczny gdybyś napisał które wartości z tabeli odpowiadają zmiennym w tym wzorze albo podał jakiś twierdzenie mówiące o tym.
pozdrawiam

0

słupek ma częstotliwość równa Fi (i liczymy od zera)
user image

0

Ok rozumiem że w ten sposób możemy policzyć częstotliwości środkowe dla każdego pasma. Mamy dane częstotliwość próbkowania 22000Hz i ilość próbek 512. Tylko dalej nie wiem w jaki sposób obliczyłeś że te tony to 105 i 316 Hz. Jakieś średnie ważone czy coś takiego?

0

szukasz częstotliwości odpowiadającej najmocniejszemu słupkowi

0

No czyli tak jak myślałem. Zauważyłem że jeśli zrobię średnią ważoną dla kilku najwyższych amplitud to szukana częstotliwość pierwotna jest dokładniejsza. Czyli rozumiem że nie da się rozpoznać jednoznacznie który dźwięk ma częstotliwość 440 a który 441 Hz. No nic dzięki za pomoc, pozdrawiam ;)

0

zauważ, że wydłużając próbkę lub zmniejszając częstotliwość próbkowania podnosisz rozdzielczość

0

No właśnie nie bardzo mogę zmieniać te parametry bo używam gotowej funkcji z FMODa do FFT.

1 użytkowników online, w tym zalogowanych: 0, gości: 1