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.