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.