Tło: Pracuję nad aplikacją na iPhone'a (wspomnianą w kilku innych postach ), która „słucha” chrapania / oddychania, gdy ktoś śpi i określa, czy występują oznaki bezdechu sennego (jako wstępny ekran „laboratorium snu” testowanie). Aplikacja wykorzystuje przede wszystkim „różnicę widmową” do wykrywania chrapania / oddechów i działa całkiem dobrze (korelacja około 0,85-0,90) podczas testowania z nagraniami laboratoryjnymi podczas snu (które w rzeczywistości są dość głośne).
Problem: Większość hałasu „w sypialni” (wentylatory itp.) Mogę odfiltrować za pomocą kilku technik i często niezawodnie wykrywam oddech na poziomach S / N, gdzie ludzkie ucho nie może go wykryć. Problemem jest hałas głosu. Nie jest niczym niezwykłym, że w tle działa telewizor lub radio (lub po prostu ktoś mówi w oddali), a rytm głosu ściśle pasuje do oddychania / chrapania. W rzeczywistości przeprowadziłem nagranie zmarłego autora / gawędziarza Billa Holma za pośrednictwem aplikacji i było to w zasadzie nie do odróżnienia od chrapania w rytmie, zmienności poziomu i kilku innych miar. (Chociaż mogę powiedzieć, że najwyraźniej nie miał bezdechu sennego, przynajmniej nie będąc na jawie).
To trochę długa szansa (i prawdopodobnie szereg zasad na forum), ale szukam pomysłów na rozróżnianie głosu. Nie musimy jakoś odfiltrowywać chrapania (pomyślałoby, że to byłoby miłe), ale raczej potrzebujemy sposobu, aby odrzucić jako „zbyt głośny” dźwięk, który jest nadmiernie zanieczyszczony głosem.
Jakieś pomysły?
Pliki opublikowane: Umieściłem niektóre pliki na dropbox.com:
Pierwsza jest raczej przypadkowym utworem rockowym (jak sądzę), a druga to nagranie przemówienia zmarłego Billa Holma. Oba (które wykorzystuję jako moje próbki „szumu” w odróżnieniu od chrapania) zostały zmieszane z szumem w celu zaciemnienia sygnału. (To sprawia, że zadanie ich zidentyfikowania jest znacznie trudniejsze.) Trzeci plik to dziesięć minut twojego nagrania, w którym pierwsza trzecia w większości oddycha, środkowa trzecia to mieszane oddychanie / chrapanie, a ostatnia trzecia to dość stałe chrapanie. (Kaszlesz po bonus.)
Wszystkie trzy pliki zostały przemianowane z „.wav” na „_wav.dat”, ponieważ wiele przeglądarek utrudnia pobieranie plików wav. Wystarczy zmienić nazwę z powrotem na „.wav” po pobraniu.
Aktualizacja: Myślałem, że entropia „robi to dla mnie”, ale okazało się, że były to przede wszystkim osobliwości przypadków testowych, których używałem, a także algorytm, który nie był zbyt dobrze zaprojektowany. W ogólnym przypadku entropia niewiele dla mnie robi.
Następnie wypróbowałem technikę, w której obliczam FFT (używając kilku różnych funkcji okna) ogólnej wielkości sygnału (próbowałem mocy, strumienia widmowego i kilku innych miar) próbkowanych około 8 razy na sekundę (biorąc statystyki z głównego cyklu FFT czyli co 1024/8000 sekund). Przy 1024 próbkach obejmuje to czas około dwóch minut. Miałem nadzieję, że będę w stanie dostrzec w tym wzorce ze względu na powolny rytm chrapania / oddychania kontra głos / muzyka (i że może to być również lepszy sposób na rozwiązanie problemu „ zmienności ”), ale chociaż istnieją wskazówki wzoru tu i tam, nie ma nic, na czym mógłbym się naprawdę zatrzasnąć.
( Dalsze informacje: W niektórych przypadkach FFT wielkości sygnału wytwarza bardzo wyraźny wzór z silnym pikiem przy około 0,2 Hz i harmonicznymi schodkowymi. Ale wzór nie jest prawie tak wyraźny przez większość czasu, a głos i muzyka mogą generować mniej wyraźne wersje o podobnym wzorze. Może istnieć jakiś sposób obliczenia wartości korelacji dla liczby zasług, ale wydaje się, że wymagałoby to dopasowania krzywej do wielomianu czwartego rzędu, a robienie tego raz na sekundę w telefonie wydaje się niepraktyczne.)
Próbowałem również wykonać tę samą FFT o średniej amplitudzie dla 5 pojedynczych „pasm”, na które podzieliłem widmo. Pasma to 4000-2000, 2000-1000, 1000-500 i 500-0. Wzorzec dla pierwszych 4 pasm był ogólnie podobny do ogólnego wzorca (chociaż nie było prawdziwego pasma „wyróżniającego się”, a często zanikająco mały sygnał w pasmach wyższych częstotliwości), ale pasmo 500-0 było po prostu losowe.
Bounty: Dam Nathanowi nagrodę, mimo że nie zaoferował nic nowego, biorąc pod uwagę, że była to jak dotąd najbardziej produktywna sugestia. Nadal mam kilka punktów, które chciałbym przyznać komuś innemu, jeśli wpadną one na dobre pomysły.
źródło
Odpowiedzi:
tło
Zgodnie z poniższymi dokumentami chrapanie charakteryzuje się pikiem przy około 130 Hz i jest całkowicie skoncentrowane poniżej 12 kHz:
Zobaczmy, czy możemy to wykorzystać.
Przykład MATLAB
Mamy słabą rejestrację chrapania dziecka ; 10-minutowy, 8-bitowy plik WAV mono. Częstotliwość próbkowania wynosi 8 KHz, co oznacza, że szerokość pasma sygnału audio wynosi 4K Hz. Poziom jest bardzo niski, więc zrobię to najpierw go opowiem .
Oś y jest znormalizowana do szerokości pasma, 4KHz, tak że wycięcie, które widzisz przy 0.1, odpowiada częstotliwości 400 Hz. Występuje skok odpowiadający kaszelowi w ~ 186s; zignoruj to. Możemy słabo zobaczyć wycięcia podczas każdego chrapania. Co więcej, wydają się skoncentrowane poniżej 0,2 x 4KHz = 800Hz. Przyjrzyjmy się bliżej.
Tym razem oś częstotliwości została oznaczona w hercach. Teraz wycięcia są dość wyraźne. Widzimy nawet podtony szumu linii energetycznej zaczynającego się od 60 Hz (180 Hz, 300 Hz, 420 Hz). Teraz jest istota algorytmu: sklasyfikujmy sygnał na podstawie energii w tym podzakresie, z usuniętym szumem linii.
Jeśli chcemy się zachwycić, możemy odrzucić zbyt duże skoki:
Niski SNR, przejawiający się w trudnościach w rozpoznawaniu sygnału na pierwszym wykresie, oznacza, że mamy swobodę wynoszącą tylko połowę standardowego odchylenia (którego wartość wynosiła 4,1). Pędy zaznaczają chrapanie.
źródło
Po prostu wrzucając to tutaj, aby uwzględnić wszystkie możliwości, możesz być w stanie użyć entropii, nie wiem, jaki jest poziom entropii chrapania w porównaniu do mowy, ale jeśli jest wystarczająco inny, to może działać. http://www.ee.columbia.edu/~dpwe/papers/ShenHL98-endpoint.pdf
źródło
Może statystyki w dziedzinie czasu? Chrapanie wydaje się mieć względnie długie okresy stanu ustalonego, podczas gdy energia mowy zmienia się dość szybko w krótkich okresach czasu. Można to również połączyć z analizą spektralną. Samogłoski mają więcej niskich częstotliwości, a spółgłosek więcej wysokich częstotliwości. Podczas mowy widmo może szybko odbijać się między tymi stanami, a przechowywanie może pozostawać w jednym stanie przez dłuższy czas.
źródło
Złożoność spektralna w czasie. Postawię hipotezę, że ludzka mowa prawdopodobnie używa więcej fonemów i ze znacznie większą złożonością statystyczną w ich sekwencjonowaniu niż sekwencje fonemów chrapania.
Jest to prawdopodobnie o wiele łatwiejszy problem niż ciągłe rozpoznawanie mowy, ponieważ nie trzeba właściwie rozpoznawać żadnego konkretnego fonemu lub zdania, tylko liczbę segmentów widmowych sondujących fonem i pewną statystyczną miarę złożoności ich sekwencji (entropia lub test ściśliwości może działać). Sprawdź, czy możesz ustalić wiarygodny próg dla tych środków.
źródło