Rozpoznawanie danych zgrupowanych w kształty

9

Pracuję nad projektem w Pythonie, aby wykryć i sklasyfikować jakąś piosenkę ptasią, i znalazłem się w sytuacji, w której muszę przekonwertować plik fali na dane częstotliwości w funkcji czasu. Nie stanowiło to większego problemu, ale aby móc sklasyfikować różne sylaby w grupy, muszę napisać coś, co wykryje, gdy dane skupią się w określonym kształcie. Aby dać wyobrażenie o tym, jak wyglądają dane, oto obraz tego, jak wyglądają dane po wydrukowaniu:

wprowadź opis zdjęcia tutaj

Potrzebuję jakiegoś sposobu, aby uzyskać każdą sylabę (każdy kształt z separacją po obu stronach) i zapisać je w zmiennej lub we własnych plikach, abym mógł uruchomić korelację Pearsona między nimi za pomocą SciPy.

Ponadto wolę Python, ale jestem otwarty na kodowanie w innych językach, jeśli masz inny sposób.

Dzięki!

smckee
źródło
Nie jestem do końca zaznajomiony z tym, co zamierzam zasugerować, ale wygląda na to, że ciągła transformacja falkowa z falką zawierającą właściwości twoich sylab jest czymś, na co warto spojrzeć.
heltonbiker
Czy potrzebujesz kształtu lub próbujesz sklasyfikować ptaki? Jeśli tak, to przy użyciu dźwięku Hidden Markov Model?
Michaił

Odpowiedzi:

2

Dwa pytania:

1 / Blisko 8s, możemy zaobserwować stabilną wysokość dźwięku przez około 100 ms, a następnie nagły wzrost spada do 8,5 sekundy. Czy cała ta sekwencja (8s do 8,5s) tworzy jeden byt, czy też uważasz, że dwa etapy (stabilny, a następnie malejący) są dwoma bytami?

2 / Czy chcesz pracować z lub bez nadzoru. Czy wiesz z góry, jakich „wzorów” szukać?

  • Jeśli chcesz pracować bez nadzoru (powiedz, że zebrałeś nagrania i dążysz do wyodrębnienia z nich „ustrukturyzowanej reprezentacji”), twoim pierwszym problemem jest wykrywanie aktywności głosowej. Wystarczy użyć intensywności sygnału, być może w połączeniu z metryką „pitchiness” (powiedzmy stosunek maksymalnej autokorelacji w zakresie pomostu, tutaj 1kHz - 5kHz), aby wykryć segmenty, w których występuje aktywny silny ton tonalny. Filtruj medianę wynikowej sekwencji, aby ją wygładzić, a następnie ustaw wartość progową, aby uzyskać różne segmenty. Po podzieleniu sygnału na segmenty możesz robić z nimi ciekawe rzeczy. Na przykład, możesz wyodrębnić dla każdego z nich trajektorię wysokości tonu (sekwencja z najsilniejszym pikiem częstotliwości dla każdej ramki FFT lub coś bardziej niezawodnego wyodrębnionego za pomocą prawdziwego estymatora wysokości tonu), użyj DTW do obliczenia macierzy odległości parami między każdym blokiem i użyj algorytmu grupowania (k-średnie, skupienie aglomeracyjne) w celu zidentyfikowania grup o podobnych wzorach podziałów (segmenty 8: 8,5 i 10: 10,5). Jest prawdopodobne, że podejście bez nadzoru będzie nadmiernie segmentowało - na przykład 7.6: 8.5 i 9.6: 10.5 zostaną rozpoznane jako powtórzenie dwóch tych samych bloków, podczas gdy dla ciebie mogą one zasadniczo być jednym wzorem, ale możesz użyć czegoś takiegoSequitur, aby mieć jeden poziom struktury wyższy.

  • Jeśli masz predefiniowany słownik „wzorców”, którym chcesz oznaczyć swój sygnał, lepiej postępuj zgodnie z metodami stosowanymi do rozpoznawania mowy, z tą jedyną znaczącą różnicą, że rozpoznawanie mowy nie uwzględnia wysokości głosu podczas wielkość liter jest jedyną informacją, którą należy wziąć pod uwagę! System rozpoznawania mowy rozwiązuje zarówno zadania segmentacji, jak i rozpoznawania w jednej operacji dekodowania FST.

fenenety
źródło