Dies ist ein Abstecher von meiner Schnarch-App .
Ich hatte ein Problem damit, eine Autokorrelation des Audiosignals zu erzeugen, um zu sehen, ob dies sehr gut mit Schnarchen / Atmen "korreliert". Ich habe einen einfachen Algorithmus (erzeugt 1.0 als nulltes Element, was ein gutes Vorzeichen ist), aber ich frage mich, wie ich das Ergebnis bewerten soll, um festzustellen, ob die Autokorrelation stark ist, und vielleicht weiter, wie ich es zum Trennen verwenden kann verschiedene mögliche Schallquellen.
Frage 1: Ist der Effektivwert der Autokorrelation (Überspringen des Elements Null) so gut wie jede andere "Qualitäts" -Metrik oder gibt es etwas Besseres?
Um es näher zu erläutern: Ich möchte einfach eine numerische Methode (im Gegensatz zum "Betrachten" eines Diagramms), um ein stark autokorreliertes Signal von einem weniger gut autokorrelierten Signal zu unterscheiden.
(Ich weiß nicht genug, um zu wissen, welche anderen Fragen ich stellen soll.)
Einige frühe Ergebnisse: In einigen Fällen zeigt die Autokorrelation (entweder RMS oder Peak) einen dramatischen Schnarchsprung - genau die Reaktion, die ich gerne sehen würde. In anderen Fällen ist bei diesen Maßnahmen überhaupt keine Bewegung erkennbar (und dies können zwei aufeinanderfolgende Schnarchen mit den beiden Reaktionen sein), und in Situationen mit hohem Rauschen sinken die Messungen während eines Schnarchens tatsächlich (leicht).
Update - 22. Mai: Ich habe endlich Zeit, noch etwas daran zu arbeiten. (Ich wurde von einer anderen App abgezogen, die buchstäblich schmerzhaft ist.) Ich habe die Ausgabe der Autokorrelation in eine FFT eingespeist und die Ausgabe ist etwas interessant - sie zeigt einen ziemlich dramatischen Peak in der Nähe des Ursprungs, wenn ein Schnarchen beginnt.
Jetzt stehe ich also vor dem Problem, diesen Peak irgendwie zu quantisieren. Seltsamerweise treten die höchsten Peaks, gemessen an der absoluten Größe, zu anderen Zeiten auf, aber ich habe das Verhältnis von Peak zu arithmetischem Mittel ausprobiert und das lässt sich ziemlich gut verfolgen. Was sind also einige gute Möglichkeiten, um die "Peakedness" der FFT zu messen? (Und bitte sag nicht, dass ich eine FFT davon nehmen muss - dieses Ding ist schon kurz davor, seinen eigenen Schwanz zu schlucken. :))
Außerdem kam mir der Gedanke, dass die Qualität der FFT etwas verbessert werden könnte, wenn ich die eingespeisten Autokorrelationsergebnisse mit Null (was per Definition 1,0 ist) in der Mitte spiegelreflektiere. Dies würde die "Schwänze" an beiden Enden setzen. Ist das (möglicherweise) eine gute Idee? Sollte das Spiegelbild aufrecht oder invertiert sein? (Natürlich werde ich es versuchen, unabhängig davon, was Sie sagen, aber ich dachte, ich könnte vielleicht ein paar Hinweise zu den Details bekommen.)
Versuchte Flachheit--
Meine Testfälle lassen sich grob in die Kategorien "gut erzogen" und "Problemkinder" einteilen.
Für die "gut erzogenen" Testfälle sinkt die Ebenheit der FFT der Autokorrelation dramatisch und das Verhältnis von Peak zu durchschnittlicher Autokorrelation steigt während eines Schnarchens an. Das Verhältnis dieser beiden Zahlen (Spitzenverhältnis geteilt durch Ebenheit) ist besonders empfindlich und zeigt einen 5-10-fachen Anstieg während eines Atems / Schnarchens.
Für die "Problemkinder" gehen die Zahlen jedoch genau in die entgegengesetzte Richtung. Das Peak / Average-Verhältnis sinkt leicht, während die Ebenheit tatsächlich um 50-100% zunimmt
Der Unterschied zwischen diesen beiden Kategorien ist (meistens) dreifach:
- Die Geräuschpegel sind (normalerweise) bei den "Problemkindern" höher.
- Die Audiopegel sind bei den "Problemkindern" (so gut wie immer) niedriger.
- Die "Problemkinder" bestehen in der Regel aus mehr Atmung und weniger tatsächlichem Schnarchen (und ich muss beides erkennen).
Irgendwelche Ideen?
Update - 25.05.2012: Es ist etwas verfrüht, einen Siegestanz zu haben, aber als ich die Autokorrelation über einen Punkt reflektierte, die FFT davon nahm und dann die spektrale Ebenheit durchführte, zeigte mein kombiniertes Verhältnisschema einen guten Sprung verschiedene Umgebungen. Das Reflektieren der Autokorrelation scheint die Qualität der FFT zu verbessern.
Ein kleiner Punkt ist jedoch, dass, da die "DC-Komponente" des reflektierten "Signals" Null ist, das nullte FFT-Ergebnis immer Null ist und dies irgendwie ein geometrisches Mittel bricht, das Null enthält. Das Überspringen des nullten Elements scheint jedoch zu funktionieren.
Das Ergebnis, das ich erhalte, ist bei weitem nicht ausreichend, um Schnarchen / Atemzüge selbst zu identifizieren, aber es scheint eine ziemlich sensible "Bestätigung" zu sein - wenn ich den "Sprung" nicht bekomme, ist es wahrscheinlich kein Schnarchen / Atemzug.
Ich habe es nicht genau analysiert, aber ich vermute, dass irgendwo während des Atems / Schnarchens ein Pfeifgeräusch auftritt und dass Pfeifen erkannt wird.
quelle
Antworten:
Vorbereitungen
Diese Demonstration ist mit dem MATLAB-Paket audioread einfacher, mit dem MP3-Dateien gelesen / geschrieben werden können. Alternativ können Sie die MP3-Datei im Beispiel manuell in WAV konvertieren.
Einfacher Fall
Bevor wir Ihre problematische Datei untersuchen, gehen wir zu SoundCloud und schnarchen ordentlich, damit wir wissen, was uns erwartet, wenn das SNR hoch ist. Dies ist ein 52s Stereo 44,1KHz MP3. Laden Sie es in einen Ordner im Pfad von MATLAB herunter .
Berechnen wir nun das Spektrogramm (ich habe ein Hann-Fenster mit 8192 Stichproben gewählt) und die spektrale Ebenheit:
Die großen Einbrüche in der spektralen Flachheit (dh Abweichung vom weißen Rauschen) schreien "Ich schnarche". Wir können es leicht klassifizieren, indem wir die Abweichung von der Grundlinie (Median) betrachten:
Wir hatten mehr als zwei Standardabweichungen der Kopffreiheit. Die Standardvariante selbst ist als Referenz 6.8487 .
Schwerer Fall
Schauen wir uns nun Ihre Datei an . Es ist eine 10-minütige 8-kHz-WAV-Datei. Da der Pegel so niedrig ist, hilft es, das Signal zu kompandieren .
Sehen Sie diese schönen Dips, die jedes Schnarchen begleiten? Ich auch nicht. Wie wäre es mit den schönen Gipfeln? Sie schnarchen nicht, aber das Geräusch des sich bewegenden Motivs. Die Standardabweichung beträgt nur 0,9388
Fazit
Sie müssen ein saubereres Signal erhalten, wenn Sie sich auf die spektrale Ebenheit verlassen möchten! Ich hatte es nur um etwas zu hören. Wenn ein niedriges SNR festgestellt wird, fordern Sie den Benutzer auf, das Telefon näher zu platzieren, oder verwenden Sie ein Mikrofon wie das mit dem Headset gelieferte Telefon.
Die gute Nachricht ist , dass es ist möglich , selbst in dem problematischen Fall Schnarchen zu erkennen. Da es bei dieser Frage jedoch nicht nur um die Schnarcherkennung ging, werde ich hier aufhören und in Ihrer anderen Frage erklären, wie das geht .
quelle
Die Autokorrelation steht in direktem Zusammenhang mit der inversen DFT der spektralen Leistungsdichte Ihres Signals. In diesem Sinne sind alle Informationen, die im Größenquadrat Ihrer DFT enthalten sind, auch in der Autokorrelationsfunktion enthalten.
Das einzige, was die Autokorrelation Ihnen sagen kann, ist das Vorhandensein von Harmonischen. (Der Abstand vom Mittelgipfel zum nächsthöheren). Vielleicht hat das Schnarchen gegen die Atmung unterschiedliche grundlegende Harmonische, und wenn ja, wäre die "Autokorrelationsmethode" sicherlich ein guter Ausgangspunkt, damit Merkmale (in diesem Fall Harmonische) extrahiert werden können.
Somit ist die Autokorrelation von weißem Rauschen eine Delta-Funktion und weist keine sekundären Peaks (oder andere Peaks für diese Angelegenheit) außerhalb ihres mittleren Peaks auf. Wenn das Signal dagegen Oberschwingungen aufweist, enthält seine Autokorrelationsfunktion sekundäre und tertiäre Spitzen, die der vorhandenen Grundschwingung entsprechen. Der Abstand vom Hauptpeak (Mittelpeak) zum Sekundärpeak ist die Periode Ihrer Grundfrequenz.
BEARBEITEN:
Ich denke, was Sie suchen, ist ein Maß - eine Zahl -, das kodiert, wie ähnlich eine Autokorrelationsfunktion einem Delta ist, im Vergleich zu einer Autokorrelationsfunktion, die so aussieht, als hätte sie viele Peaks. Zu diesem Zweck kann das Maß für die spektrale Ebenheit anwendbar sein, oder in einem allgemeineren Fall die Messung Ihres geometrischen Mittelwerts zum arithmetischen Mittelwert.
quelle