Jak rozpoznać, czy jest sygnał (kiedy twój sygnał przypomina szum)?

11

To znowu mój detektor chrapania.

Jestem całkiem dobry w wykrywaniu sygnału, gdy coś tam jest - może śledzić od chrapania po ścianach po oddychanie, którego nawet nie słyszysz na nagraniu. Problem polega na tym, że nie wiem, kiedy sygnał spadnie poniżej wykrywalnego poziomu, a aplikacja po prostu „słyszy rzeczy”. I niestety chrapanie / oddychanie jest często na tyle nieregularne, że prosta autokorelacja lub podobny schemat pomiaru interwałów raczej nie pomoże. (I w rzeczywistości jest prawdopodobne, że w niektórych przypadkach hałas jest bardziej regularny niż oddychanie).

Czy są jakieś sztuczki, których mi brakuje, aby dowiedzieć się, kiedy nie ma sygnału? Wygląda na to, że stoję tu przed trudnym miejscem, biorąc pod uwagę, że „sygnał” jest na początku bardzo podobny do szumu.

(I może jest to związane z innym problemem, który mam: o dziwo, nie jestem w stanie dokładnie (lub nawet w przybliżeniu) zmierzyć poziomu sygnału, nawet gdy jest dość głośny. Ponieważ muszę mimo to użyć średnich kroczących i współczynników do wykrycia sygnału, informacje o poziomie gubią się. Szukam kilku sztuczek, aby je odtworzyć.)

Podstawowa technika

(Dla Yoda)

Sygnał audio jest próbkowany (ogólnie z 8000 Hz, z różnych powodów), a następnie poddawany FFT w 1024 blokach. (W moich eksperymentach filtry Hamminga i nakładające się na siebie bloki wydają się mieć niewielki wpływ, choć można je później ponownie odwiedzić.)

FFT jest podzielony na „prążki” (obecnie 5, nieco skośny, aby umieścić więcej szczegółów na dolnym końcu), a „różnica widmowa” i poziom każdego pasma jest sumowany. Długoterminowe średnie wartości ograniczonych wartości szczytowych są stosowane jako „progi”, a dalsze korekty odchylenia są stosowane w celu utrzymania około 20% wskaźnika „powyżej progu”.

Każdej wartości „powyżej progu” przypisuje się wagę 1 (poniżej progu podaje się wagę 0), ale następnie tę wagę koryguje się na podstawie widocznej „zmienności” (w przybliżeniu 2 Hz) w paśmie, aby nadać większą wagę pasmom które niosą bardziej widoczny sygnał.

Wagi pasm są sumowane, a następnie sumowane wagi kolejnych bloków są sumowane przez około sekundę, aby uzyskać bieżący „wynik”. Jest to ponownie porównywane z progiem średniej bieżącej (plus kilka heurystyk) w celu wykrycia wystąpienia / przesunięcia chrapania.

Aktualizacja

Nagle przyszło mi do głowy, że jeśli mój algorytm skutecznie utrzymuje sygnał o stałym poziomie (według mojego problemu z poziomem sygnału), sposobem na skuteczne zmierzenie SNR jest pomiar szumu, gdy nie ma sygnału.

Dogodnie chrapania są przerywane, a pomiędzy nimi jest mnóstwo „martwego powietrza”. I już wykrywam koperty z chrapaniem. Więc wszystko poza kopertą (między końcem jednego chrapania a początkiem następnego) jest prawdopodobnie hałasem! To mogę (z niewielkim stopniem dokładności / powtarzalności) zmierzyć. (Oczywiście trzeba było trzykrotnie wymyślić przyzwoity algorytm - rzeczywistość nigdy nie pasuje do teorii).

Nie mam jeszcze pełnej odpowiedzi, ale zrobiłem postęp.

(Chociaż powyższa technika daje mi dość dobre przybliżenie dla SNR, wciąż mam problemy z oszacowaniem rzeczywistego poziomu sygnału. Moje wskazania „względnego poziomu” mogą być poza skalą dla ledwie słyszalnego oddechu i tak dalej dla grzechotki okiennej. Potrzebuję jakiegoś proxy dla poziomu absolutnego).

Daniel R. Hicks
źródło
„To znowu mój detektor chrapania” - czy możesz podać link do swojego poprzedniego pytania (w którym prawdopodobnie opisałeś to szczegółowo) lub dodać kilka szczegółów na temat swojego detektora w tym pytaniu?
Lorem Ipsum

Odpowiedzi:

5

Do tej pory wydawało się, że chrapanie można rozpoznać po obecności silnego okresowego wzoru w dźwięku. Jeśli powiesz mi, że mogą istnieć inne źródła o tej samej właściwości, nadszedł czas, aby przejść dalej i skupić się na właściwości sygnału bardziej specyficznej dla chrapania; i sugerowałbym dokładniejsze przyjrzenie się barwie samego nagranego dźwięku. Biorąc pod uwagę, że ludzki słuchacz może chrapać od oddychania, możesz zastosować tradycyjne podejście do klasyfikacji sygnału audio. Oblicz funkcje, takie jak MFCC i wzorce fluktuacji danych audio, i wytrenuj klasyfikator bayesowski (lub bardziej wyrafinowany), aby odróżniał chrapanie od oddychania.

Być może nadszedł czas, aby przejrzeć literaturę na ten temat ... Na przykład znalazłem to: http://web.itu.edu.tr/kamasak/pubs/pdf/pm7_8_007.pdf

fenenety
źródło
Jednym z problemów jest to, że natura dźwięku jest bardzo różna u poszczególnych osób, a nawet u jednej osoby w ciągu nocy. Ale dziękuję za wskazówki - przyjrzę się im.
Daniel R Hicks,
Jeśli Twój zestaw treningowy jest wystarczająco duży, może to być nadal wykonalne przy użyciu technik uczenia maszynowego.
fenenety
Mam ponad 50 zestawów danych. Niestety algorytm, który działa idealnie na jednym zestawie, zawiedzie się niestety na drugim. Niektóre z nich mają włączony telewizor w tle, niektóre dudnią wentylatory itp. Oddychanie / chrapanie może być ledwo słyszalne lub łuszczy się farba. Podmiot może zmieniać pozycje i całkowicie zmieniać charakter swojego chrapania. Pewny schemat samostrojenia jest wyraźnie wymagany.
Daniel R Hicks
jakich funkcji używasz do klasyfikacji?
pikenety
Przede wszystkim tylko „różnica widmowa” (zwana również „strumieniem spektralnym”) w celu wykrycia „początku” i „przesunięcia”. Ale mój obecny schemat dzieli widmo na pasma i „waży” każde pasmo w oparciu o pozorną siłę sygnału w tym paśmie (co ocenia się na podstawie wielkości zmiany różnicy widmowej występującej przy około 1/2 Hz). Działa to dobrze, wykrywając oddech / chrapanie w całym zakresie głośności, nawet przy znacznym hałasie, ale skutecznie traci wszelkie wskazania rzeczywistej głośności. A samo patrzenie na jednoczesny całkowity poziom dźwięku nie działa z powodu problemu z hałasem.
Daniel R Hicks,
0

Może być konieczne zbudowanie dynamicznego klasyfikatora, który może dostosować się do bieżącego tematu, fazy snu i środowiska audio, zamiast dostroić się do ustalonego zestawu treningowego.

hotpaw2
źródło
Tak myślę.
Daniel R Hicks,