Hintergrund: Ich arbeite an einer iPhone-Anwendung (auf die in mehreren anderen Posts hingewiesen wird ), die während des Schlafens Schnarchen / Atmen "abhört" und feststellt, ob Anzeichen von Schlafapnoe vorliegen (als Vorbild für "Schlaflabor"). testen). Die Anwendung verwendet hauptsächlich "Spektraldifferenzen" zur Erkennung von Schnarchen / Atemzügen und funktioniert recht gut (Korrelation zwischen ca. 0,85 und 0,90), wenn sie mit Aufnahmen aus dem Schlaflabor verglichen wird (die tatsächlich ziemlich laut sind).
Problem: Das meiste "Schlafzimmer" -Geräusch (Ventilatoren usw.) kann ich durch verschiedene Techniken herausfiltern und kann Atmung bei S / N-Pegeln, bei denen das menschliche Ohr sie nicht erkennen kann, oft zuverlässig erkennen. Das Problem ist das Sprachrauschen. Es ist nicht ungewöhnlich, dass ein Fernseher oder ein Radio im Hintergrund läuft (oder einfach jemand in der Ferne spricht), und der Rhythmus der Stimme passt genau zum Atmen / Schnarchen. Tatsächlich habe ich eine Aufnahme des verstorbenen Autors / Geschichtenerzählers Bill Holm über die App abgespielt, und es war im Wesentlichen nicht zu unterscheiden von Schnarchen in Bezug auf Rhythmus, Pegelvariabilität und verschiedenen anderen Maßnahmen. (Obwohl ich sagen kann, dass er anscheinend keine Schlafapnoe hatte, zumindest nicht wach.)
Das ist also ein bisschen langwierig (und wahrscheinlich ein Teil der Forenregeln), aber ich suche nach Ideen, wie man die Stimme unterscheidet. Wir müssen das Schnarchen nicht irgendwie herausfiltern (dachte, das wäre schön), sondern wir müssen nur einen Weg finden, um Geräusche als "zu laut" abzulehnen, die übermäßig mit Sprache verschmutzt sind.
Irgendwelche Ideen?
Veröffentlichte Dateien: Ich habe einige Dateien auf dropbox.com platziert:
Das erste ist ein eher zufälliges Stück Rockmusik (ich denke), und das zweite ist eine Aufnahme des verstorbenen Bill Holm. Beide (die ich als Beispiel für "Rauschen" verwende, um von Schnarchen zu unterscheiden) wurden mit Rauschen gemischt, um das Signal irgendwie zu verschleiern. (Dies erschwert die Identifizierung erheblich.) Bei der dritten Datei handelt es sich um eine zehnminütige Aufzeichnung von Ihrer Person, bei der das erste Drittel hauptsächlich atmet, das mittlere Drittel gemischt atmet / schnarcht und das letzte Drittel ziemlich gleichmäßig schnarcht. (Sie bekommen einen Husten als Bonus.)
Alle drei Dateien wurden von ".wav" in "_wav.dat" umbenannt, da viele Browser das Herunterladen von WAV-Dateien erschweren. Benennen Sie sie nach dem Herunterladen einfach wieder in ".wav" um.
Update: Ich dachte, Entropie würde für mich "den Trick machen", aber es stellte sich heraus, dass es sich hauptsächlich um Besonderheiten der von mir verwendeten Testfälle handelte, sowie um einen Algorithmus, der nicht allzu gut konzipiert war. Im Allgemeinen tut die Entropie sehr wenig für mich.
Anschließend habe ich eine Technik ausprobiert, bei der ich die FFT (unter Verwendung mehrerer verschiedener Fensterfunktionen) der Gesamtsignalgröße (ich habe Leistung, Spektralfluss und mehrere andere Messwerte ausprobiert) berechnet, die ungefähr 8 Mal pro Sekunde abgetastet wurde (wobei die Statistiken aus dem Haupt-FFT-Zyklus entnommen wurden) das ist alle 1024/8000 Sekunden). Bei 1024 Stichproben deckt dies einen Zeitbereich von etwa zwei Minuten ab. Ich hatte gehofft, dass ich aufgrund des langsamen Rhythmus von Schnarchen / Atmen vs. Stimme / Musik Muster darin erkennen kann (und dass es auch eine bessere Möglichkeit ist, das Problem der " Variabilität " anzugehen ), aber es gibt Hinweise Von einem Muster gibt es hier und da nichts, woran ich mich wirklich festhalten kann.
( Weitere Informationen: In einigen Fällen erzeugt die FFT der Signalgröße ein sehr ausgeprägtes Muster mit einer starken Spitze bei etwa 0,2 Hz und Oberschwingungen im Gleichschritt. Das Muster ist jedoch die meiste Zeit nicht annähernd so ausgeprägt, und Stimme und Musik können weniger ausgeprägt sein Versionen eines ähnlichen Musters. Es könnte eine Möglichkeit geben, einen Korrelationswert für eine Gütezahl zu berechnen, aber es scheint, dass eine Kurvenanpassung auf ein Polynom 4. Ordnung erforderlich ist, und dies einmal pro Sekunde in einem Telefon zu tun, erscheint unpraktisch.)
Ich habe auch versucht, die gleiche FFT der durchschnittlichen Amplitude für die 5 einzelnen "Bänder" zu machen, in die ich das Spektrum unterteilt habe. Die Bänder sind 4000-2000, 2000-1000, 1000-500 und 500-0. Das Muster für die ersten 4 Bänder war im Allgemeinen dem Gesamtmuster ähnlich (obwohl es kein echtes "herausragendes" Band gab und in den höheren Frequenzbändern häufig ein verschwindend kleines Signal), aber das 500-0-Band war im Allgemeinen nur zufällig.
Kopfgeld: Ich werde Nathan das Kopfgeld geben, obwohl er nichts Neues angeboten hat, da dies der produktivste Vorschlag war, den es bisher gab. Ich habe noch ein paar Punkte, die ich gerne an andere vergeben würde, wenn sie gute Ideen hätten.
quelle
Antworten:
Hintergrund
Nach den nachstehenden Veröffentlichungen ist das Schnarchen durch einen Peak bei etwa 130 Hz gekennzeichnet und vollständig auf unter 12 kHz konzentriert:
Mal sehen, ob wir das nutzen können.
MATLAB Beispiel
Wir haben eine schlechte Aufzeichnung eines schnarchenden Kindes ; eine 10-minütige 8-Bit-Mono-WAV-Datei. Die Abtastrate beträgt 8 kHz, was bedeutet, dass die Bandbreite des Audiosignals 4 kHz beträgt. Das Level ist sehr niedrig, also werde ich es zuerst kompandieren .
Die y-Achse ist auf die Bandbreite von 4 kHz normiert, sodass die bei 0,1 angezeigte Kerbe einer Frequenz von 400 Hz entspricht. Es gibt eine Spitze, die einem Husten bei ~ 186s entspricht; ignoriere das. Wir können die Kerben bei jedem Schnarchen vage sehen. Darüber hinaus scheinen sie unter 0,2 x 4 kHz = 800 Hz konzentriert zu sein. Lass uns genauer hinschauen.
Diesmal wurde die Frequenzachse in Hertz angegeben. Jetzt sind die Kerben ganz klar. Wir können sogar die Obertöne des Stromleitungsrauschens ab 60 Hz (180 Hz, 300 Hz, 420 Hz) erkennen. Nun kommt das Wesentliche des Algorithmus: Lassen Sie uns das Signal anhand der Energie in diesem Teilband klassifizieren, wobei das Leitungsrauschen entfernt wird.
Wenn wir Lust haben, können wir übergroße Spikes wegwerfen:
Das niedrige SNR, das sich in der Schwierigkeit äußert, das Signal im ersten Diagramm zu erkennen, bedeutet, dass wir nur einen Spielraum von einer halben Standardabweichung haben (deren Wert 4,1 betrug). Die Stiele markieren das Schnarchen.
quelle
Wenn Sie dies hier reinwerfen, um alle Möglichkeiten abzudecken, können Sie möglicherweise Entropie verwenden. Ich weiß nicht, wie hoch die Entropie zwischen Schnarchen und Sprache ist. http://www.ee.columbia.edu/~dpwe/papers/ShenHL98-endpoint.pdf
quelle
Zeitbereichsstatistik vielleicht? Das Schnarchen scheint relativ lange Perioden des Gleichgewichtszustands zu haben, während sich die Sprachenergie über kurze Zeiträume ziemlich stark ändert. Dies könnte auch mit einer Spektralanalyse kombiniert werden. Vokale haben mehr niederfrequente Inhalte und Konsonanten mehr hochfrequente. Während des Sprechens kann das Spektrum schnell zwischen diesen Zuständen hin und her springen, während das Speichern für längere Zeiträume in einem Zustand verbleibt.
quelle
Spektrale Komplexität im Zeitverlauf. Ich gehe davon aus, dass die menschliche Sprache wahrscheinlich mehr Phoneme verwendet und ihre Sequenzierung statistisch weitaus komplexer ist als die Phonemsequenzen des Schnarchens.
Dies ist wahrscheinlich ein viel einfacheres Problem als die kontinuierliche Spracherkennung, da Sie nicht unbedingt ein bestimmtes Phonem oder einen bestimmten Satz richtig erkennen müssen, sondern nur die Anzahl der phonemklingenden Spektralsegmente und ein statistisches Maß für die Komplexität ihrer Sequenzen (Entropie oder Entropie) Kompressibilitätstest funktioniert möglicherweise). Prüfen Sie dann, ob Sie einen zuverlässigen Schwellenwert für diese Maßnahmen ermitteln können.
quelle