Jak utworzyć wykres częstotliwości w funkcji czasu?

9

Jestem inżynierem chemikiem, a nie EE, więc to trochę trudne.

Próbuję dowiedzieć się, jak pobrać dane amplitudy w funkcji czasu i przekształcić je w częstotliwość w funkcji czasu. Moim pierwszym instynktem jest podzielenie moich danych na części, wykonanie FFT na każdym fragmencie, a następnie wykreślić to. Niestety, ponieważ czas trwania każdego wycinka zbliża się do zera, nie ma już wystarczającej ilości informacji, aby uzyskać dokładne informacje o częstotliwości (niskie częstotliwości wymagają więcej niż bardzo małego wycinka czasu). Więc ... jak to zrobić? Jestem pewien, że to jakiś znany problem, który ktoś już rozwiązał.

Oto rodzaj transformacji, którego szukam, ilustrowany falą dźwiękową (nuta fortepianu G). Jak widać, ten wykres składa się z trzech osi, a trzecia jest reprezentowana kolorem.

Dzięki!

wprowadź opis zdjęcia tutaj

Nacięcie
źródło

Odpowiedzi:

5

Rozdzielczość czasu w funkcji częstotliwości jest dobrze znanym problemem i rzeczywiście istnieją sposoby na jej rozwiązanie. W przypadku sygnałów audio niektóre z powszechnie stosowanych technik obejmują: metody parametryczne; rozdzielczość adaptacyjna (analizuj z różnymi konfiguracjami czas / częstotliwość i łącz wyniki razem - Wen X. i M. Sandler, „Spektrogram złożony przy użyciu wielu transformacji Fouriera”); falki / rozkłady na nadmiernie skompletowanych zasadach; oraz wykorzystanie informacji o fazie do wyodrębnienia dokładnej lokalizacji pików częstotliwości (IFgram).

Wygląda jednak na to, że pokazany wykres nie wykorzystuje niektórych z tych technik; więc podejrzewam, że nie tego możesz szukać. Wydaje się, że na osi poziomej występuje „rozmazywanie” (na przykład przy t = 1,2 s) i jest to pewny znak, że analiza została przeprowadzona z dużym nakładaniem się między częściami.

Rzeczywiście czas trwania porcji i liczba ramek analizy na sekundę nie muszą być ze sobą powiązane, jeśli pozwala się na nakładanie ramek. Jeśli więc chcesz użyć ramki analizy o długości 40 ms, twoja siatka nie musi być:

ramka 1: t = 0..t = 40 ms; ramka 2: t = 40 ms .. t = 80 ms

Może to być:

ramka 1: t = 0..t = 40 ms; ramka 2: t = 10 ms .. t = 50 ms

To nakładanie się może dać złudzenie wyższej rozdzielczości czasowej bez zbytniego zmniejszania rozmiaru okna FFT. Zauważ, że może to pomóc jedynie w dokładnym zlokalizowaniu zdarzenia na osi czasu - nie pomoże rozwiązać dwóch zdarzeń blisko w czasie ... Podobnie jak zwiększenie rozmiaru FFT może pomóc w identyfikacji położenia piku częstotliwości, ale nie w przypadku rozdzielczość dwóch sąsiadujących pików częstotliwości.

fenenety
źródło
Jak poszedłbyś w drugą stronę (przekształcenie ze spektrogramu na sygnał audio)
Piotr
4

Tak, wiele osób pracowało nad analizą częstotliwości i czasu.

Podejście „pokrój moje dane na części, wykonaj FFT na każdym fragmencie” jest dobrym pomysłem. Zastosowanie „funkcji okna” na każdym fragmencie, tuż przed wykonaniem FFT, pomaga uniknąć wielu artefaktów. Pomaga także pozwolenie na nakładanie się fragmentów. Po tych drobnych poprawkach kończy się transformacja Gabora , która wydaje się być najpopularniejszą krótkotrwałą transformacją Fouriera (STFT).

Jak już wskazałeś i jak wskazuje artykuł w Wikipedii, wszystkie krótkotrwałe techniki transformacji Fouriera mają kompromis:

  • kiedy przecinasz szereg czasowy na bardzo krótkie kawałki, otrzymujesz bardzo precyzyjne informacje o czasie, kiedy dokładnie zaczyna się i kończy dźwięk, ale informacje o częstotliwości są bardzo rozmyte.
  • Kiedy przecinasz szereg czasowy na bardzo długie kawałki, otrzymujesz bardzo precyzyjne informacje o częstotliwości co do dokładnej częstotliwości tonu, ale dokładny czas, w którym zaczyna się i kończy, jest rozmazany.

Jest to znany problem, ale niestety nie tylko nie został rozwiązany, ale udowodniono, że niepewność między nimi jest nieunikniona - granica Gabora, granica Heisenberga-Gabora, zasada nieoznaczoności itp.

Gdybym był tobą, zacząłbym od jednej z wielu gotowych bibliotek do obliczania transformacji Gabora i eksperymentował z cięciem szeregów czasowych na różne długości. Istnieje spora szansa, że ​​będziesz miał szczęście i skończysz z pewną długością, która zapewni odpowiednią lokalizację czasu i odpowiednią dyskryminację częstotliwości.

Jeśli to nie zadziała dla tej aplikacji, to chciałbym przenieść się do innych podejść do reprezentacji czasowo-częstotliwościowej i analizy czasowo-częstotliwościowej - falkowych przekształca chirplet transformat , ułamkowy transformaty Fouriera (FRFT), etc.

EDYCJA: Niektóre kody źródłowe do generowania spektrogramów / wykresów wodospadu z danych audio:

Obraz do Spektrogramu jest odwrócony w stosunku do powyższych narzędzi.

David Cary
źródło
Przekształcenie Gabora dotyczy tylko okien Gaussa. Jeśli używasz innego okna, jest to po prostu STFT. (A prawdziwe okna gaussowskie nie istnieją w wersji cyfrowej, ponieważ zwężają się w nieskończoność.)
endolith
@endolith: Masz rację. Transformacja Gabora wykorzystuje „funkcję okna Gaussa”, która jest obcięta do skończonej długości - jest dość zbliżona, ale nie matematycznie identyczna z idealną gaussowską.
David Cary,
Myślę, że transformata Gabora jest transformacją ciągłą, wykorzystującą całkę, więc może mieć niecięty Gaussa jako okno?
endolith
@endolith: Tak, w zasadzie osoba może użyć nieciętego gaussa jako okna. W praktyce, ponieważ praktycznie cała energia Gaussa mieści się w kilku sigmach środkowego garbu, użycie przyciętego okna praktycznie zawsze nie czyni zauważalnej różnicy na wykresie wyjściowym. Ponieważ oprogramowanie, które produkuje spektrogramy wykresów kaskadowych, wielokrotnie stosuje okno Gaussa, a następnie wykonuje FFT dla każdej kolumny wykresu, „nie obcięcie” spowodowałoby, że to oprogramowanie byłoby nieznośnie wolne.
David Cary