Najbardziej efektywny sposób wydobywania w czasie rzeczywistym komponentów częstotliwości sygnału audio z dokładnością zbliżoną do ludzkiej

14

Próbuję dowiedzieć się, w jaki sposób (jeśli to możliwe) wyodrębnić komponenty częstotliwości arbitralnej próbki audio (zazwyczaj muzyki) w sposób podobny do FFT, ale w swoich badaniach nad algorytmem FFT dowiaduję się, że cierpi on na pewne surowe ograniczenia w tym celu.

Istnieją 3 problemy, które przedstawia FFT:

  1. Ponieważ rozdzielczość bin FFT jest równa rozmiarowi twojego okna, aby osiągnąć całkiem rozsądną dokładność (powiedzmy 1 Hz), potrzebujesz nieuzasadnionego długiego okna (powiedzmy 1 sekundę). Oznacza to, że nie można szybko wykryć stanów nieustalonych lub nowo wprowadzonych częstotliwości. Oznacza to również, że problemu nie da się rozwiązać dzięki szybszemu procesorowi i wyższej częstotliwości próbkowania - ograniczenie jest nierozerwalnie związane z czasem.

  2. Ludzie postrzegają częstotliwość logarytmicznie, ale pojemniki FFT są rozmieszczone liniowo. Np. Różnica 20 Hz na niskim końcu naszego słuchu jest ogromna , podczas gdy różnica 20 Hz na wysokim końcu jest niezauważalna. Aby więc uzyskać wymaganą dokładność przy niskich częstotliwościach, musimy obliczyć znacznie więcej niż wymagamy przy wysokich częstotliwościach.

  3. Niektóre z tych problemów można rozwiązać interpolując przedziały FFT. Może to działać w przypadku dużej ilości dźwięku muzycznego, ponieważ częstotliwości są często rozmieszczone dość daleko od siebie, a więc nie więcej niż 1 częstotliwość wycieka do pary pojemników. Ale nie zawsze tak będzie, szczególnie w przypadku dźwięków nieharmonicznych, takich jak instrumenty perkusyjne. Interpolacja jest więc po prostu zgadywaniem.

Z tego, co rozumiem przez algorytm DFT / FFT, wyjścia (amplitudy bin) są w rzeczywistości korelacją sinus / cosinus przy częstotliwości każdego bin. Uderza mnie to, że jeśli algorytm mógłby zostać przeprojektowany, tak aby częstotliwości bin były rozmieszczone nieliniowo (tj. Korelujemy inny zestaw sinusów / cosinusów), wówczas moglibyśmy osiągnąć równomierną rozdzielczość dla wszystkich częstotliwości. Czy to możliwe, czy jest to marzenie o fajce oparte na moim niepełnym zrozumieniu matematyki?

Wydaje mi się, że mógłbym rozwiązać problem również z użyciem siły brutalnej poprzez korelację sinusów / cosinusów przy każdej częstotliwości, która mnie interesuje. Nie jestem zbyt dobrze zorientowany w matematyce. czy to możliwe? Jakiego rodzaju wydajność? Czy rozwiązałoby to mój problem?

Czy istnieje inny sposób uzyskania dokładniejszego rozkładu częstotliwości sygnału w czasie rzeczywistym? Wydajność procesora jest problemem, ale nie głównym - jestem częściowo zainteresowany tym, czy można to teoretycznie zrobić. Jednak coś, co jest wykonalne w czasie rzeczywistym na nowoczesnej maszynie stacjonarnej, byłoby idealne.

bryhoyt
źródło
3
Który problem próbujesz rozwiązać? wykrywanie f0, wykrywanie wielokrotnego f0 (do transkrypcji), rozpoznawanie akordów, modelowanie barwy ...? Istnieją rozwiązania doraźne dla niektórych z tych problemów. Czy zależy Ci na odwracalności (do zastosowania w ramach analizy-> transformacja-> resynteza)?
pikenety
Problem, który próbuję rozwiązać, jest raczej otwarty. Mam ogólne zainteresowanie muzyką cyfrową, obejmującą większość twojej listy. Ale moja niejasność jest częściowo ze względu na mój brak wiedzy o tym, co można zrobić i jakie są standardem przemysłowym specyficzny lub najlepsze sposoby rozwiązywania każdego problemu można wymienić (till I zadał to pytanie, będę zawsze zakłada FFT było go ). Ale przedmiotem na twojej liście najbardziej interesujących mnie jest modelowanie barwy. Chciałbym również znaleźć sposoby na wydobycie złożonych dźwięków brzmiących jednocześnie w nagraniu. Resynteza jest ekscytująca. Interesujące są algorytmy AI.
bryhoyt
Bardziej konkretny problem, który próbowałem rozwiązać w przeszłości i chciałbym spróbować jeszcze raz: chciałbym napisać program do „improwizacji” w czasie rzeczywistym z grupą graczy lub śpiewaków nagranych za pomocą mikrofonu. Doszedłem do tego, że mój komputer „gwizdkuje” sinusoidą ze mną, zauważalnie opóźniony i przestrojony. Istotne byłoby, aby taka improwizacja była dokładnie dostrojona i rytmiczna. Jasne, istnieją inne sposoby osiągnięcia tego celu (gracze grają na instrumentach cyfrowych lub przekazują komputerowi pewne „informacje wewnętrzne”, takie jak z góry ustalona sekwencja akordów itp.), Ale to nie jest mój cel.
bryhoyt
„algorytm mógłby zostać przeprojektowany w taki sposób, aby częstotliwości bin były rozmieszczone nieliniowo, a następnie moglibyśmy osiągnąć równomierną rozdzielczość dla wszystkich częstotliwości”. Brzmi jak ciągła transformata falkowa
Morleta

Odpowiedzi:

5

Jak skomentowałem poprzedni post, metoda analizy czasowo-częstotliwościowej znana jako „krótkoterminowa transformata Fouriera” jest równoważna z zestawem filtrów, analizującym twój sygnał x . Dla danego okna analizy w n , o rozmiarze N , filtr przy częstotliwości k / N wynosi: h n = w - n e j 2 π n kXxwnNk/N

hn=wnej2πnkN

Dla zwykłych okien analizy (Hann, Hamminga, a nawet prostokąta) odpowiada to filtrowi dolnoprzepustowemu z częstotliwością odcięcia około , która jest „przesunięta” do przedziału częstotliwości k1/Nk (dzięki złożonej modulacji wykładniczej) , co prowadzi do uzyskania filtra pasmowoprzepustowego.

W tym momencie, aby odpowiedzieć bezpośrednio na twoje obawy związane z odbiciem ludzkiej percepcji, niektórzy ludzie wyprowadzili [„transformację stałej Q” (CQT)] [Brown91]. Opiera się na tej samej zasadzie co FT, w interpretacji banku filtrów. Jednak centra nie są rozmieszczone liniowo, jak w przypadku „normalnego” FT, ale raczej log2 rozstawione. Skala jest następnie ściśle związane z Zachodniej muzycznej skali: Jeśli ktoś wybiera f k + 1 = 2 1 / 12 f k , to otrzymamy 12 częstotliwości na oktawę (dzwonek dzwoni :-)?) I pasma ustawione , na przykład, 2 : 1 / 12 - 1fkfk+1=21/12fk. Możesz także wybrać inne centra, które najlepiej odpowiadają Twoim potrzebom.21/1212fk

Tu i ówdzie można znaleźć implementacje CQT, najnowsze, autorstwa prof. Klapuri, z dość przyzwoitą odwrotnością można znaleźć tutaj . Grupa Audio w Telecom ParisTech ma również implementację prof. Prado, ale jeszcze tego nie próbowałem.

[Brown91] J. Brown, „Obliczanie stałej transformacji spektralnej Q”, Journal of Acoustical Society of America, 1991, 89, 425-434

EDYCJA 20121014: niektóre odpowiedzi i komentarze do twoich pytań (bryhoyta).

  1. Po prostu ogólne pomysły na własne komentarze do głównego pytania: Wygląda na to, że interesuje Cię wiele aplikacji, które moim zdaniem nie są dość trywialnymi problemami. „Modelowanie barwy” wydaje mi się bardziej związane z rozpoznawaniem mowy itp., Dla których rozdzielczość lub precyzja wysokości lub częstotliwości nie stanowi większego problemu (zastanów się, jak zwykle obliczane są MFCC).

    Zastanów się także, ilu najlepszych badaczy ( F. Pachet i zespół repmus w IRCAM we Francji) , aby zacytować kilku) pracuje nad tematem automatycznej improwizacji i akompaniamentu: zadanie nie jest niemożliwe, ale wymaga wiedzy specjalistycznej w wielu obszarach. Podsumowując, typowy system musi naśladować ludzki układ słuchowy (przynajmniej), wdrażać percepcję dźwięku / muzyki / wysokości dźwięku / rytmu, znać teorię muzyki i podejmować decyzje na podstawie oszacowań wszystkich poprzednich kroków. Transformacja Fouriera lub dowolna reprezentacja sygnału to tylko jeden (mały) krok w kierunku celu końcowego - i potencjalnie, moim zdaniem, najlepiej rozumiany do tej pory.

    To powiedziawszy, nadal istnieje możliwość, że wszyscy spoglądają daleko poza to, co się faktycznie dzieje, i że możesz to rozbić w prosty, a więc elegancki sposób! Nie zapomnij opublikować o tym, kiedy to się skończy! :-)

  2. próbka 0,1 s przy 44 kHz wystarcza, aby pomieścić szeroki zakres częstotliwości

    Fs/N=44100/4410=10Hz

  3. FFT nie może tego wykryć dla niskich i wysokich częstotliwości, ale mówisz, że inne algorytmy mogą: jaki jest kompromis?

    Krótka odpowiedź: przeczytaj moją pracę magisterską na temat oceny melodii!

    Mówiąc nieco więcej: wiele algorytmów szacowania wysokości dźwięku wykracza poza ograniczenia FT, dzięki założeniom dotyczącym przetwarzanych dźwięków. Oczekujemy, że nuty z naturalnych dźwięków (ludzki głos, obój, saksofon, fortepian ...) będą bardziej złożone niż pojedyncze sinusoidy. Większość dźwięków jest mniej więcej harmoniczna, co oznacza, że ​​można je modelować jako sumy sinusoid, których częstotliwość jest wielokrotnością częstotliwości podstawowej.

    Przydatne jest zatem uwzględnienie tych harmonicznych przy szacowaniu wysokości tonu, ponieważ istnieją metody wykorzystujące funkcje detekcji, takie jak sumy widmowe, produkty widmowe lub funkcje autokorelacji. Ktoś niedawno zaczął pokrewny temat .

  4. Jakie są kompromisy? Mówiąc dokładniej, jakiego poziomu dokładności częstotliwości mogę się spodziewać w rozsądnie krótkim oknie? (Rozumiem, że rozmiar okna w CQT jest zmienny - o ile?) Mówiąc dokładniej, jak blisko będę w stanie dotrzeć do mojego ok. cel 0,5% różnicy częstotliwości z oknem 0,005s?

    Jak wcześniej wspomniano, przy oknie o wartości 0,005 s można spodziewać się czegoś w rodzaju „przecieku częstotliwości” 200 Hz. To naprawdę problem tylko wtedy, gdy masz 2 sinusoidy o częstotliwościach bliższych niż 200 Hz, tak że FT nie będzie w stanie pokazać, że są to 2 różne sinusoidy. Cóż, jesteśmy daleko od twojego 0,5% (nawiasem mówiąc, półton ma 6% częstotliwości!), A 0,005 s jest naprawdę trochę mały dla twojego celu. Jeśli jednak chcesz podawać oszacowanie co 0,005 s, nadal możesz przetwarzać dłuższe nakładające się klatki, jak zwykle w przetwarzaniu mowy / muzyki. Czy tego właśnie chcesz?

    Nk=Fsfk(21/B1)
    BB=48fk=100Hzwymagają okien o długości około 0,7 s. Nic nie znaczy, że tracimy wtedy trochę rozdzielczości czasowej ... Ale jak wspomniano wcześniej, jest to problem tylko wtedy, gdy zapomnimy o strukturze dźwięku. Dodatkowo psychoakustyka uważa, że ​​poniżej 500 Hz ludzie tak naprawdę nie odróżniają sinusoid: nawet ludzie są tam wyzwani. Oczywiście możemy mieć nadzieję, że nasze komputery radzą sobie lepiej niż my, ale tutaj mamy trudny problem!

    Na koniec zauważ, że istnieją inne sposoby obliczania reprezentacji czasowo-częstotliwościowej dźwięku, rozważ na przykład banki filtrów gammatone. Zaletą wspomnianego wcześniej CQT jest to, że istnieje oprogramowanie zarówno dla transformacji, jak i jej odwrócenia. Osobiście nadal trzymam się STFT ze względu na jego prostotę i ponieważ do tej pory nigdy nie potrzebowałem lepszej rozdzielczości na niskich częstotliwościach, nawet do separacji źródła.

    [Schoerkhuber2010] Schoerkhuber, C. i Klapuri, A., „Zestaw narzędzi do przekształcania Constant-Q do przetwarzania muzyki”, 7. Konferencja Sound and Music Computing, Barcelona, ​​Hiszpania, 2010.

Jean-Louis Durrieu
źródło
Mała uwaga: CQT może pomóc rozwiązać problemy z punktami 1 i 2, ale nie z punktem 3. Jeśli chodzi o punkt 3, zawsze istnieje kompromis między rozdzielczością czasu i częstotliwości, a jeśli chcesz dobrej rozdzielczości częstotliwości na niskich składowych częstotliwości, najprawdopodobniej musisz zaakceptować utratę rozdzielczości czasowej. Teraz, dla oszacowania wysokości, mogą istnieć inne rozwiązania, możesz przeczytać moje w mojej rozprawie doktorskiej, jeśli jesteś zainteresowany: D
Jean-Louis Durrieu,
Nie do końca rozumiem. Wiem, że nic nie dostajesz za darmo - nie mogę oczekiwać, że algorytm dokładnie wykryje częstotliwości, które nie były próbkowane w dobrej rozdzielczości przez co najmniej kilka okresów najniższej częstotliwości. Ale próbka 0,1 s przy 44 kHz wystarcza, aby pomieścić szeroki zakres częstotliwości, które człowiek może dokładnie rozróżnić (w kategoriach względnych - „tutaj jest piąta”, „jest płaska pomniejszona 4.” itp.), Co potwierdza informacje jest gdzieś tam FFT nie może tego wykryć dla niskich i wysokich częstotliwości, ale mówisz, że inne algorytmy mogą: jaki jest kompromis?
bryhoyt
Ze wszystkich powyższych doskonałych odpowiedzi CQT wygląda jak najbardziej pasujące do pytania, które zadałem. Jakie są kompromisy? Mówiąc dokładniej, jakiego poziomu dokładności częstotliwości mogę się spodziewać w rozsądnie krótkim oknie? (Rozumiem, że rozmiar okna w CQT jest zmienny - o ile?) Mówiąc dokładniej, jak blisko będę w stanie dotrzeć do mojego ok. cel 0,5% różnicy częstotliwości z oknem 0,005s? (To moje przybliżone przypuszczenie, kiedy człowiek mógłby zacząć słyszeć, że coś nie jest dostrojone lub nie do pokonania)
bryhoyt
5

Po pierwsze, dzięki klasycznemu podejściu krótkoterminowej transformacji Fouriera istnieje alternatywa dla interpolacji - w szczególności techniki wykorzystujące informacje fazowe do odzyskania częstotliwości chwilowej ( patrz to pytanie ), które mogą bardzo dokładnie określić pozycję piku widmowego bez zwiększenie rozmiaru FFT. Wadą, jak słusznie powiedziałeś, jest to, że nie zwiększasz zdolności systemu do rozróżniania sąsiednich pików - ale jest to już ogromna poprawa w porównaniu do korzystania z centralnej częstotliwości indeksu bin FFT.

srFFT_sizmi

Istnieje inne podejście, które działa na zasadzie brutalnej siły: „sonduj” swoje sygnały złożonym wykładniczym oknem (falki Gabora). Charakteryzują się one częstotliwością środkową, czasem środkowym i szerokością pasma (która mierzy rozkład falki w czasie lub na częstotliwości). Będziesz musiał ocenić wiele, wiele, wiele korelacji między twoim sygnałem a tymi falkami przy dowolnej liczbie przesunięć czasowych, częstotliwości i szerokości pasma. Wynik będzie taki sam, jak bardzo elastyczny „kafelkowy” STFT, w którym wybierany jest optymalny rozmiar okna dla każdego zakresu czasowego i każdego pasma częstotliwości. Poza kosztem obliczeniowym wadą jest to, że nie ma wydajnego algorytmu i algorytmu przyczynowego (musisz znać z wyprzedzeniem tyle próbek, ile najdłuższa falka w słowniku). Jeśli chcesz eksperymentować z tymi technikami,MPTK .

k

  • k
  • Działają dobrze w obecności białego szumu - wymaga to wybielenia sygnału przed analizą; pomaga także przeprowadzanie analizy w poszczególnych kanałach banku filtrów.

Są one drogie obliczeniowo, ale mogą działać online z krótkimi oknami, jeśli zamówienia modeli i / lub hałas są niskie.

fenenety
źródło
4

Częstotliwość czy wysokość dźwięku? Istnieje już mnóstwo prac naukowych i książek na temat postrzegania ludzkiej smoły. Ale, IIRC, ludzie mają tendencję do bycia słabymi w dokładnie „wyodrębnianiu” częstotliwości, chyba że są podstawową częstotliwością. I wiele pików częstotliwości w „krytycznym paśmie” jest zwykle odbieranych jako hałas. Tak więc każda metoda z „dokładnością zbliżoną do ludzkiej” może również obejmować pewne niepowodzenia oceny zdolności postrzegania przez człowieka.

FFT jest tylko zbiorem filtrów, które nie są optymalne dla wielu celów, chyba że wymagane są ortogonalność i odwracalność. Inne banki filtrów są możliwe, jeśli nie potrzebujesz tych dwóch (a ludzka percepcja wyraźnie tego nie robi), takie jak bank filtrów częstotliwości MEL. Po zidentyfikowaniu piku częstotliwości za pomocą banku filtrów częstotliwości MEL, dalsza analiza za pomocą interpolacji FFT lub technik wokodera fazowego może być użyteczna do udoskonalenia oszacowania częstotliwości dowolnego izolowanego piku częstotliwości widmowej.

Zauważ, że żadna z tych technik filtrowania nie jest faktycznie gromadzona w tym samym zakresie danych w dziedzinie czasu, w porównaniu z FFT. To, co się dzieje, może w rzeczywistości polegać na utracie informacji w celu lepszego dopasowania do „niedokładności” lub anomalii ludzkiego aparatu słuchowego.

Oszacowanie wysokości dźwięku na podstawie zestawu częstotliwości jest zupełnie innym problemem, ponownie tematem wielu prac naukowych i rozdziału książek o audiologii i tym podobnych.

Ostatnią częścią twojego pytania na temat wydajności może być czerwony śledź. Obecnie można wykonywać dziesiątki FFT i dziesiątki różnych banków filtrów w czasie rzeczywistym na procesorze telefonu komórkowego. Biorąc pod uwagę bardzo wydajne biblioteki FFT dostępne od dostawców procesorów, FFT z tysiącami „nadmiarowych” pojemników może być bardziej wydajny niż znacznie mniejszy, ale bardziej naiwnie kodowany bank filtrów.

hotpaw2
źródło
Bardzo pouczająca odpowiedź, dzięki. Zdaję sobie sprawę z różnicy między wysokością a częstotliwością, ale twoja odpowiedź naprawdę pomogła podkreślić, jak bardzo ludzka dokładność zależy od dźwięku spełniającego określone wymagania. To prawda, że ​​zgodnie z moją wiedzą na temat harmonii ludzie są dość słabi w wydobywaniu częstotliwości, które nie są fundamentalne. Potrafię dokładnie rozróżnić interwały strojenia od siebie oraz interwały strojenia (interwały spółgłoski łatwiejsze niż dysonansowe). Miałbym jednak problem z rozróżnieniem dwóch przedziałów braku melodii (innych niż „płaski”, „bardzo płaski”, „ostry” itp.).
bryhoyt
2

Istnieje wiele alternatyw, ale zależy to od tego, co robisz. Fizycznie twierdziłbym, że nasze uszy są bardziej jak bank filtrów równoległych niż FFT, co daje im dobrą rozdzielczość czasową, a proces zwany „ogniskowaniem” daje im dobrą rozdzielczość częstotliwości. Tak więc w niektórych przypadkach teoretycznie można użyć banku filtrów, ale wymaga to dużo przetwarzania, co pozostawia wiele danych do przetworzenia.

Możliwe jest postrzeganie falek jako zestawu szczególnie wydajnych i powiązanych filtrów. Problem z falkami do analizy muzycznej i audio polega na tym, że zazwyczaj dają one rozdzielczość tylko 1 oktawę (chociaż można to zrobić na różne sposoby, tak naprawdę nie widziałem, aby fale były szczególnie przydatne w audio).

Innym podejściem jest użycie nakładających się okien FFT. Możesz zwiększyć rozdzielczość częstotliwości FFT, patrząc nie tylko na informacje o wielkości, ale także na informacje o fazie. Pozwala to na użycie znacznie krótszych okien niż można by użyć w inny sposób, co skutkuje lepszą wydajnością i lepszą rozdzielczością czasu. Nakładające się okna są trudne do poprawnej resyntezy, a zbyt wiele założeń dotyczących fazy może być również niebezpieczne. Tak czy inaczej, tego rodzaju sztuczki są prawdopodobnie podstawą rozwiązywania złożonych problemów analizy czasowo-częstotliwościowej.

Istnieje również szereg innych narzędzi do określonych aplikacji.

Bjorn Roche
źródło
1
Obliczenie krótkoterminowej transformaty Fouriera (STFT) jest równoważne analizie sygnału za pomocą banku filtrów. Pozwolićxnbyć sygnałem. STFTX, z częstotliwością k i rama m, z oknem analizy wn, jest zwykle obliczany jako:
Xfam=nxn+mwnmi-jot2)πnkN.
tzn. sukcesywnie obliczamy N.-długie przekształcenia Fouriera (FT) włączone xn przesunięty o mpróbki. Można to również wyrazić jako:
Xfam=pxpwp-mmi-jot2)π(p-m)kN.=pxphm-p
gdzie hn=w-nmijot2)πnkN., stąd interpretacja banku filtrów!
Jean-Louis Durrieu,
1
STFT może być bankiem filtrów, ale nie wszystkie banki filtrów są STFT.
Bjorn Roche,