Dyskretna transformata Fouriera - szybkie znalezienie podstawy?

9

Po pierwsze przepraszam, ponieważ jestem programistą i bardzo dawno nie zajmowałem się czystą matematyką, więc moje pytanie może wydawać się głupie. Mam nadzieję, że nie.

Kontekstem jest rozpoznawanie wysokości dźwięku w muzyce.

Jeśli zanotujesz nutę i zastosujesz do niej transformatę Fouriera, będziesz mieć nieskończoną sumę amplitud dla danych częstotliwości. Na przykład, jeśli zagram nutę, której podstawową wartością jest , na dowolnym instrumencie, po transformacji Fouriera będę miał harmoniczne w . Każda częstotliwość będzie miała określoną amplitudę, która określa barwę instrumentu (fortepian, głos, trąbka, ... wszystkie podążają za tą pętlą, ale będziesz mieć różne amplitudy dla każdej harmonicznej)FF,2F,3F,,nF

Teraz to, co chcę zrobić, to z danego sygnału audio, znajdź . Tylko to. Jest to bardziej skomplikowane niż się wydaje, ponieważ zawsze będziesz miał szum tła i tak dalej ... Co więcej, nie musi koniecznie częstotliwości o najwyższej amplitudzie!FF

Więc moim pomysłem na znalezienie jest zastosowanie DFT (a właściwie FFT dla prędkości) i znalezienie częstotliwości , aby było maksymalne na wyjściu FFT.FFF+2F+3F++nF

Czy uważasz, że to w ogóle możliwe? Czy uważasz, że jest to możliwe w bardzo krótkim czasie (powiedzmy <5 milisekund)?

Dinaiz
źródło
Prawdopodobnie może to być odpowiedź: edaboard.com/thread197897.html
No tak, ale to inna metoda, prawda? IMHO, jest łatwiejszy, ale o wiele mniej niezawodny, ponieważ nie można odróżnić dźwięków harmonicznych od dźwięków nieharmonicznych ...
Dinaiz

Odpowiedzi:

6

To, co opisujesz, jest bardzo podobne do metody szacowania wysokości tonu według Harmonic Product Spectrum, wymienionej w tym dokumencie Stanford CCRMA .

FFT nie daje ci „nieskończonej sumy amplitud”, ale skończoną liczbę przedziałów wynikowych w zależności od długości FFT.

5 mS to tylko 1 okres nuty 200 Hz i tylko ułamek okresu poniżej 200 Hz. Rozpoznawanie tonu muzycznego zwykle wymaga słyszenia lub analizy wielu okresów częstotliwości wydawanego dźwięku. Wiele muzyki korzysta z notatek poniżej G2. Jeśli masz wystarczającą długość danych, obliczenie szacunkowej wysokości na podstawie tych danych może zająć tylko rzędu mikrosekund, a nie milisekund na nowoczesnym komputerze lub urządzeniu mobilnym.

hotpaw2
źródło
Słuszna uwaga. Jeśli jednak masz już 2F i 3F, tak naprawdę nie potrzebujesz F, prawda? W twoim przykładzie 2F = 400 Hz i 3F = 600 Hz, więc prawdopodobnie możesz dowiedzieć się, że F wynosił 200, nawet nie słysząc wystarczająco dużo dźwięku, aby mieć okres 5 ms, prawda? Słyszałem także o transformacie falkowej. Czy uważasz, że to lepsza metoda na zrobienie tego?
Dinaiz
@Dinaiz: Zależy od źródła wysokości dźwięku i od tego, czy te fragmenty częstotliwości tonów są rzeczywiście nieruchome, czy nie. Falki to zupełnie osobne pytanie.
hotpaw2
Tak więc ta metoda nie jest odpowiednia do znalezienia f0 w „prawie czasie rzeczywistym”. Czy w obecnym stanie techniki jest w ogóle możliwe znalezienie f0 za pomocą dowolnego instrumentu w mniej niż kilka milisekund, czy też jest to stracona przyczyna i powinienem zrezygnować z poszukiwania? : D
Dinaiz