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)
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!
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.
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)?
Odpowiedzi:
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.
źródło