To poboczna podróż z mojej aplikacji do chrapania .
Miałem problem z wytworzeniem autokorelacji sygnału audio, aby zobaczyć, czy to „koreluje” z chrapaniem / oddychaniem bardzo dobrze. Mam prosty algorytm (daje 1,0 jako element zerowy, co jest dobrym znakiem), ale zastanawiam się, jak ocenić wynik, aby ustalić, czy autokorelacja jest silna, a być może dalej, jak użyć go do oddzielenia różne możliwe źródła dźwięku.
Pytanie nr 1: Czy RMS autokorelacji (pomijanie elementu zero) jest równie dobrą miarą „jakości”, czy jest coś lepszego?
Aby rozwinąć: Chcę po prostu w sposób numeryczny (w przeciwieństwie do „patrzenia” na wykres), aby odróżnić sygnał silnie skorelowany od gorzej skorelowanego.
(Naprawdę nie wiem wystarczająco dużo, aby wiedzieć, jakie inne pytania zadać).
Niektóre wczesne wyniki: w niektórych przypadkach autokorelacja (RMS lub szczyt) pokazuje dramatyczny skok na chrapanie - dokładnie taką odpowiedź, którą chciałbym zobaczyć. W innych przypadkach nie ma widocznego ruchu w tych środkach (i mogą to być dwa kolejne chrapania z dwiema odpowiedziami), aw sytuacjach o wysokim poziomie hałasu pomiary faktycznie spadają (nieznacznie) podczas chrapania.
Aktualizacja - 22 maja: Nareszcie mam trochę czasu, żeby nad tym popracować. (Zostałem wciągnięty w inną aplikację, która jest dosłownie bólem). Podałem wynik autokorelacji do FFT, a wynik jest dość interesujący - pokazuje dość dramatyczny szczyt w pobliżu źródła, gdy zaczyna się chrapanie.
Więc teraz mam problem z kwantyfikacją tego szczytu. Co dziwne, najwyższe szczyty, pod względem wielkości bezwzględnej, występują w innych momentach, ale próbowałem stosunku szczytu do średniej arytmetycznej i to całkiem nieźle. Jakie są więc dobre sposoby pomiaru „szczytowości” FFT. (I proszę nie mów, że muszę wziąć FFT z tego - ta rzecz jest już blisko połknięcia własnego ogona. :))
Przyszło mi również do głowy, że jakość FFT mogłaby się nieco poprawić, jeśli odbijam lustrzanie wprowadzane wyniki autokorelacji, z zerowym (co z definicji 1,0 wielkości) pośrodku. To położyłoby „ogony” na obu końcach. Czy to (prawdopodobnie) dobry pomysł? Czy odbicie lustrzane powinno być pionowe czy odwrócone? (Oczywiście, spróbuję tego bez względu na to, co powiesz, ale pomyślałem, że może uda mi się uzyskać wskazówki na temat szczegółów.)
Wypróbowana płaskość
Moje przypadki testowe można z grubsza podzielić na kategorię „dobrze wychowanych” i „problematycznych dzieci”.
W przypadku „dobrze wychowanych” przypadków testowych płaskość FFT autokorelacji gwałtownie spada, a stosunek szczytowej do średniej autokorelacji wzrasta podczas chrapania. Stosunek tych dwóch liczb (stosunek pików podzielony przez płaskość) jest szczególnie czuły, wykazując 5-10-krotny wzrost podczas oddechu / chrapania.
Jednak w przypadku „problematycznych dzieci” liczby zmierzają dokładnie w przeciwnym kierunku. Stosunek szczyt / średnia nieznacznie spada, podczas gdy płaskość faktycznie wzrasta o 50-100%
Różnica między tymi dwiema kategoriami jest (głównie) trzykrotna:
- Poziomy hałasu są (zwykle) wyższe u „dzieci z problemami”
- Poziomy dźwięku są (prawie zawsze) niższe w „problematycznych dzieciach”
- „Dzieci z problemami” zwykle składają się z większego oddychania i mniej faktycznego chrapania (i muszę je wykryć)
Jakieś pomysły?
Aktualizacja - 25.05.2012: Trochę przedwcześnie jest mieć taniec zwycięstwa, ale kiedy zastanawiałem się nad autokorelacją o punkcie, wziąłem FFT, a następnie wykonałem płaskość spektralną, mój kombinowany schemat proporcji pokazał dobry skok w kilka różnych środowisk. Odzwierciedlenie autokorelacji wydaje się poprawiać jakość FFT.
Jednym drobnym punktem jest to, że ponieważ „składowa prądu stałego” odbijanego „sygnału” wynosi zero, zerowy wynik FFT jest zawsze równy zero, a ten rodzaj łamie średnią geometryczną obejmującą zero. Ale pomijanie elementu zerowego wydaje się działać.
Rezultat, który otrzymuję, jest daleki od wystarczającego do samodzielnego rozpoznania chrapania / oddechów, ale wydaje się, że jest to dość wrażliwe „potwierdzenie” - jeśli nie dostanę „skoku”, prawdopodobnie nie jest to chrapanie / oddech.
Nie analizowałem go dokładnie, ale podejrzewam, że dzieje się tak, że podczas oddechu / chrapania dochodzi gdzieś dźwięk gwizdka, a ten gwizd jest wykrywany.
źródło
Odpowiedzi:
Czynności wstępne
Demonstracja jest łatwiejsza dzięki pakietowi audioread MATLAB , który umożliwia odczyt / zapis plików MP3. Alternatywnie możesz ręcznie przekonwertować plik MP3 w tym pliku na WAV.
Łatwa skrzynka
Zanim przeanalizujemy problematyczny plik, przejdźmy do SoundCloud i weźmy porządne chrapanie , abyśmy wiedzieli, czego się spodziewać, gdy SNR będzie wysoki. To jest MP3 52s stereo 44,1 KHz MP3. Pobierz go do folderu na ścieżce MATLAB.
Teraz obliczmy spektrogram (wybrałem okno Hann z próbką 8192) i płaskość spektralną:
Ogromne spadki płaskości spektralnej (tj. Odchylenie od białego szumu) krzyczą „Chrapię”. Możemy go łatwo sklasyfikować, patrząc na odchylenie od linii podstawowej (mediana):
Mieliśmy więcej niż dwa standardowe odchylenia nadproża. Dla porównania sama standardowa odmiana wynosi 6,8487 .
Ciężki przypadek
Teraz spójrzmy na twój plik . Jest to 10-minutowy plik WAV 8KHz. Ponieważ poziom jest tak niski, pomaga w kompandowaniu sygnału.
Widzisz te fajne spadki towarzyszące każdemu chrapaniu? Ja też nie. A co z ładnymi szczytami? Nie chrapią, ale dźwięk poruszającego się obiektu. Odchylenie standardowe to marne 0,9388
Wniosek
Musisz uzyskać czystszy sygnał, jeśli chcesz polegać na płaskości spektralnej! Musiałem to po prostu usłyszeć. W przypadku wykrycia niskiego SNR, nakłoń użytkownika do umieszczenia telefonu bliżej lub skorzystania z mikrofonu takiego jak telefon dostarczany z zestawem słuchawkowym.
Dobrą wiadomością jest to, że jest to możliwe do wykrycia chrapania nawet w przypadku problematycznej. Ponieważ jednak to pytanie nie dotyczyło wyłącznie wykrywania chrapania, zatrzymam się tutaj i wyjaśnię, jak to zrobić w drugim pytaniu .
źródło
Autokorelacja jest bezpośrednio związana z odwrotnym DFT gęstości widmowej mocy twojego sygnału. W tym sensie, każda informacja zawarta w kwadracie wielkości twojego DFT jest również zawarta w funkcji autokorelacji.
To powiedziawszy jednak, jedyną rzeczą, którą autokorelacja może powiedzieć, jest obecność harmonicznych. (Odległość od środkowego szczytu do następnego najwyższego). Być może chrapanie podczas oddychania VS ma różne podstawowe harmoniczne, a jeśli tak, to „metoda autokorelacji” byłaby z pewnością dobrym punktem wyjścia do wydobycia cech (w tym przypadku harmonicznych).
Zatem autokorelacja białego szumu będzie funkcją delta i nie będzie miała żadnych pików wtórnych (ani żadnych innych pików o tej materii) poza swoim pikiem środkowym. W przeciwieństwie do tego, jeśli sygnał ma harmoniczne, wówczas jego funkcja autokorelacji będzie zawierać drugorzędowe i trzeciorzędowe piki, proporcjonalne do występującej podstawowej harmonicznej. Odległość od głównego (środkowego) szczytu do drugiego szczytu okres podstawowej częstotliwości.
EDYTOWAĆ:
Myślę, że to, czego szukasz, to miara - liczba - kodująca, jak podobna jest funkcja autokorelacji do delty, a VS funkcja autokorelacji wyglądająca, jakby zawierała wiele pików. W tym celu można zastosować miarę płaskości widmowej lub, w bardziej ogólnym przypadku, pomiar średniej geometrycznej do średniej arytmetycznej.
źródło