Finden Sie bei einem Audiostream heraus, wann eine Tür zuschlägt (Schalldruckpegelberechnung?)

Lesezeit: 10 Minuten

Benutzeravatar von Adam Davis
Adam Davis

Nicht anders als ein Klatschendetektor (“Klatsch auf! Klatsch Klatsch Klatsch ab! Klatsch Klatsch Klatsch an, klatsch ab, der Klöppel! Klatsch Klatsch “) Ich muss erkennen, wann sich eine Tür schließt. Das ist in einem Fahrzeug einfacher als eine Zimmer- oder Haushaltstür:

Hör mal zu: http://ubasics.com/so/van_driver_door_closing.wav

Aussehen:
Das Bild der Wellenform zeigt eine stetige Linie, dann eine plötzliche Unterbrechung, die sich auf eine stetige Linie einpendelt

Es wird mit 16 Bit 4 kHz gesampelt, und ich möchte viel Verarbeitung oder Speicherung von Samples vermeiden.

Wenn Sie es in Audacity oder einem anderen Wellenform-Tool betrachten, ist es ziemlich charakteristisch und wird aufgrund des erhöhten Schalldrucks im Fahrzeug fast immer übersteuert – selbst wenn die Fenster und andere Türen geöffnet sind:

Hör mal zu: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Aussehen:
Alt-Text

Ich gehe davon aus, dass es einen relativ einfachen Algorithmus gibt, der Messwerte bei 4 kHz und 8 Bit erfasst und den „stationären Zustand“ verfolgt. Wenn der Algorithmus einen signifikanten Anstieg des Schallpegels erkennt, würde er die Stelle markieren.

  • Was sind deine Gedanken?
  • Wie würden Sie dieses Ereignis erkennen?
  • Gibt es Codebeispiele für Schalldruckpegelberechnungen, die hilfreich sein könnten?
  • Kann ich mit weniger häufigem Sampling davonkommen (1 kHz oder noch langsamer?)

Aktualisieren: Spielen mit Octave (numerische Open-Source-Analyse – ähnlich wie Matlab) und sehen, ob der quadratische Mittelwert mir das gibt, was ich brauche (was zu etwas führt, das dem SPL sehr ähnlich ist)

Update2: Die Berechnung des RMS findet die Tür im einfachen Fall leicht geschlossen:
Alt-Text Alt-Text

Jetzt muss ich mir nur noch die schwierigen Fälle ansehen (Radio an, Heizung/Luft auf hoch usw.). Das CFAR sieht wirklich interessant aus – ich weiß, dass ich einen adaptiven Algorithmus verwenden muss, und CFAR passt auf jeden Fall.

-Adam

  • Ist ein Beschleunigungsmesser eine Option?

    – ccook

    1. Februar 2009 um 6:51 Uhr

  • Ich schließe einen dreiachsigen Beschleunigungsmesser auf der Platine ein. Es enthält übrigens auch einen Drucksensor, einen Lichtsensor, eine Türschaltererkennung, GPS und eine Kamera. Obwohl diese Optionen verfügbar sind, erfordert das Design idealerweise nur das Mikrofon zum Erfassen des Türschließens.

    – Adam Davis

    1. Februar 2009 um 6:54 Uhr

  • Nur ein zufälliger Gedanke – wenn es beim Schließen fast immer schneidet – warum nicht einfach nach dem Clip suchen?

    – Aronchick

    7. Mai 2009 um 18:18 Uhr

  • @aronchick – weil es so viele Geräusche im Auto gibt, die auch laut genug sind, um zu schneiden, aber auf andere Weise anders sind.

    – Adam Davis

    7. Mai 2009 um 18:43 Uhr

Wenn Sie sich die Screenshots der Quell-Audiodateien ansehen, besteht eine einfache Möglichkeit, eine Änderung des Schallpegels zu erkennen, darin, a Numerische Integration der Proben, um die “Energie” der Welle zu einem bestimmten Zeitpunkt herauszufinden.

Ein grober Algorithmus wäre:

  1. Teilen Sie die Proben in Abschnitte auf
  2. Berechnen Sie die Energie jedes Abschnitts
  3. Nehmen Sie das Verhältnis der Energien zwischen dem vorherigen Fenster und dem aktuellen Fenster
  4. Wenn das Verhältnis einen bestimmten Schwellenwert überschreitet, stellen Sie fest, dass ein plötzliches lautes Geräusch aufgetreten ist.

Pseudocode

samples = load_audio_samples()     // Array containing audio samples
WINDOW_SIZE = 1000                 // Sample window of 1000 samples (example)

for (i = 0; i < samples.length; i += WINDOW_SIZE):
    // Perform a numerical integration of the current window using simple
    // addition of current sample to a sum.
    for (j = 0; j < WINDOW_SIZE; j++):
        energy += samples[i+j]

    // Take ratio of energies of last window and current window, and see
    // if there is a big difference in the energies. If so, there is a
    // sudden loud noise.
    if (energy / last_energy > THRESHOLD):
        sudden_sound_detected()

    last_energy = energy
    energy = 0;

Ich sollte einen Haftungsausschluss hinzufügen, dass ich das nicht ausprobiert habe.

Dieser Weg sollte möglich sein, ohne vorher alle Samples aufgezeichnet zu haben. Solange es einen Puffer von einiger Länge gibt (WINDOW_SIZE im Beispiel) kann eine numerische Integration durchgeführt werden, um die Energie des Schallabschnitts zu berechnen. Dies bedeutet jedoch, dass es abhängig von der Länge der E-Mail zu einer Verzögerung bei der Bearbeitung kommt WINDOW_SIZE. Die Bestimmung einer guten Länge für einen Tonabschnitt ist ein weiteres Anliegen.

Wie man in Abschnitte aufteilt

In der ersten Audiodatei scheint es, dass die Dauer des Geräusches beim Schließen der Tür 0,25 Sekunden beträgt, also sollte das für die numerische Integration verwendete Fenster wahrscheinlich höchstens die Hälfte davon sein, oder sogar eher ein Zehntel, also der Unterschied zwischen den Stille und plötzliche Geräusche können wahrgenommen werden, selbst wenn das Fenster zwischen dem stillen Abschnitt und dem Rauschabschnitt überlappt.

Wenn beispielsweise das Integrationsfenster 0,5 Sekunden betrug und das erste Fenster die 0,25 Sekunden Stille und 0,25 Sekunden Türschließen abdeckte und das zweite Fenster 0,25 Sekunden Türschließen und 0,25 Sekunden Stille abdeckte, kann es so aussehen Die beiden Tonabschnitte haben den gleichen Rauschpegel und lösen daher die Tonerkennung nicht aus. Ich kann mir vorstellen, dass ein kurzes Fenster dieses Problem etwas lindern würde.

Ein zu kurzes Fenster bedeutet jedoch, dass der Anstieg des Tons möglicherweise nicht vollständig in ein Fenster passt, und es kann so aussehen, als gäbe es einen geringen Energieunterschied zwischen den benachbarten Abschnitten, was dazu führen kann, dass der Ton verpasst wird.

Ich glaube die WINDOW_SIZE und THRESHOLD müssen beide für den zu detektierenden Ton empirisch bestimmt werden.

Um zu bestimmen, wie viele Samples dieser Algorithmus im Speicher behalten muss, sagen wir, die WINDOW_SIZE ist 1/10 des Geräusches beim Schließen der Tür, was etwa 0,025 Sekunden entspricht. Bei einer Abtastrate von 4 kHz sind das 100 Abtastungen. Das scheint kein allzu großer Speicherbedarf zu sein. Bei Verwendung von 16-Bit-Samples sind das 200 Bytes.

Vorteile Nachteile

Der Vorteil dieses Verfahrens besteht darin, dass die Verarbeitung mit einfacher ganzzahliger Arithmetik durchgeführt werden kann, wenn das Quellaudio als ganze Zahlen eingespeist wird. Der Haken an der Sache ist, wie bereits erwähnt, dass die Echtzeitverarbeitung abhängig von der Größe des integrierten Abschnitts verzögert wird.

Es gibt ein paar Probleme, die ich mir zu diesem Ansatz vorstellen kann:

  1. Wenn das Hintergrundgeräusch zu laut ist, wird der Energieunterschied zwischen dem Hintergrundgeräusch und dem Schließen der Tür nicht leicht zu unterscheiden sein und das Schließen der Tür kann möglicherweise nicht erkannt werden.
  2. Jedes abrupte Geräusch, wie beispielsweise ein Klatschen, könnte als das Schließen der Tür betrachtet werden.

Vielleicht kombinieren Sie die Vorschläge in den anderen Antworten, z. B. den Versuch, die Frequenzsignatur des Türschließens mithilfe der Fourier-Analyse zu analysieren, was mehr Verarbeitung erfordern würde, aber weniger fehleranfällig wäre.

Es wird wahrscheinlich einige Experimente erfordern, bevor Sie einen Weg finden, dieses Problem zu lösen.

  • Ich mag diesen Ansatz wirklich, also werde ich ihn implementieren und meine Ergebnisse hier zurückmelden. Anstatt einen festen Schwellenwert zu haben, werde ich die durchschnittliche Energie verfolgen und einen einstellbaren Faktor haben (dh das Fenster muss das 1,5-fache des Durchschnitts betragen, um auszulösen).

    – Adam Davis

    14. Februar 2009 um 14:50 Uhr

Benutzeravatar von James Caccese
James Caccese

Sie sollten die Türschließschalter im Auto antippen. Der Versuch, dies mit einer soliden Analyse zu tun, ist Overengineering.

Es gibt viele Vorschläge zu verschiedenen Signalverarbeitungsansätzen, aber wirklich, bis Sie etwas über die Erkennungstheorie gelernt haben, bauen Sie eine eingebettete Signalverarbeitungsplatine, lernen Sie die Verarbeitungsarchitektur für den von Ihnen gewählten Chip kennen, versuchen Sie einen Algorithmus, debuggen Sie ihn, und stimmen Sie es dann auf das Auto ab, für das Sie es verwenden möchten (und stimmen Sie es dann erneut ab und debuggen Sie es erneut für jedes andere Auto). Tür.

Nicht, dass es für die DSP-Experten kein interessantes Problem zu lösen wäre, aber aus der Art und Weise, wie Sie diese Frage stellen, geht hervor, dass die Tonverarbeitung nicht der Weg ist, den Sie einschlagen möchten. Es wird einfach so ein Alptraum sein, es richtig zum Laufen zu bringen.

Außerdem ist die Klappe nur ein Hochpassfilter, das in einen Schwellenwertdetektor eingespeist wird. (plus ein Timer, um sicherzustellen, dass 2 schnell genug zusammen klatschen)

  • In vielen Situationen ist dies die richtige Antwort. Wenn dies ohne Verkabelung der Schalter möglich ist, können wir Installationsprobleme, Kostenerhöhungen und Haftungsprobleme vermeiden, und da dieses Gerät wiederverwendet werden soll (nicht dauerhaft installiert), ist die Verkabelung nicht optimal. Es ist jedoch eine Option.

    – Adam Davis

    1. Februar 2009 um 3:56 Uhr

  • In einigen Fällen, wie z. B. bei elektrischen Schiebe- oder Fließhecktüren, kann eine Verkabelung erforderlich sein, da das Schließgeräusch nicht so energisch ist, sodass mehr Verarbeitung oder kundenspezifische Abstimmung (und damit Einrichtung) erforderlich ist. Ein weiterer Gedanke war, einen Lichtsensor in der Nähe einer Innenbeleuchtung zu platzieren – einfach zu installieren und funktioniert auch.

    – Adam Davis

    1. Februar 2009 um 3:58 Uhr

  • Ich neige dazu, dem zuzustimmen, aber das hat mich nicht davon abgehalten, einen Weg vorzuschlagen, es algorithmisch zu machen …. 🙂 +1

    – Zeichnete Hall

    1. Februar 2009 um 4:24 Uhr

  • “So wie Sie diese Frage stellen, ist klar, dass die Tonverarbeitung nicht der Weg ist, den Sie einschlagen möchten.” Was an der Art und Weise, wie ich die Frage stelle, deutet darauf hin? Ich werde es gerne ändern, wenn ich einen falschen Eindruck von meiner Absicht erwecke.

    – Adam Davis

    1. Februar 2009 um 6:52 Uhr

  • Tut mir leid, wenn ich wie ein Arsch rübergekommen bin, aber Sie scheinen neu in der Signalverarbeitung zu sein. Ich möchte Sie nicht abschrecken, wenn Sie spielen oder lernen möchten, aber wenn Sie in angemessener Zeit eine echte Lösung für die Türschließerkennung finden möchten, ist die Audiosignalverarbeitung wahrscheinlich der schwierigste Weg.

    – James Caccese

    1. Februar 2009 um 8:30 Uhr

Benutzeravatar von Drew Hall
Zeichnete Halle

Es gibt eine Menge relevanter Literatur zu diesem Problem in der Radarwelt (es wird Detektionstheorie genannt).

Sie können sich die Erkennung von “Cell Averaging CFAR” (Constant False Alarm Rate) ansehen. Wikipedia hat ein bisschen hier. Ihre Idee ist dieser sehr ähnlich und sollte funktionieren! 🙂

Viel Glück!

Benutzeravatar von ccook
ckochen

Ich würde mit einem Blick auf das Spektral beginnen. Ich habe dies bei den beiden Audiodateien getan, die Sie gegeben haben, und es scheint eine Ähnlichkeit zu geben, die Sie verwenden könnten. Zum Beispiel scheint der Hauptunterschied zwischen den beiden bei etwa 40-50 Hz zu liegen. Meine .02.

AKTUALISIEREN

Ich hatte eine andere Idee, nachdem ich dies gepostet hatte. Wenn Sie können, fügen Sie dem Gerät einen Beschleunigungssensor hinzu. Dann korrelieren die Vibrations- und akustischen Signale. Dies sollte bei der Erkennung von Querfahrzeugtüren helfen. Ich denke, es sollte gut korreliert sein, da der Klang vibrationsgetrieben ist, wo die Stereoanlage beispielsweise nicht ist. Ich hatte ein Gerät, das meine Motordrehzahl mit einer Windschutzscheibenhalterung (Saugnapf) erkennen konnte, also könnte die Empfindlichkeit da sein. (Ich verspreche nichts, dass das funktioniert!)

Alt-Text
(Quelle: charlesrcook.com)

%% Test Script (Matlab)
clear
hold all %keep plots open
dt=.001

%% Van driver door
data = wavread('van_driver_door_closing.wav');

%Frequency analysis
NFFT = 2^nextpow2(length(data));
Y = fft(data(:,2), NFFT)/length(data);
freq = (1/dt)/2*linspace(0,1,NFFT/2);
spectral = [freq'  2*abs(Y(1:NFFT/2))];

plot(spectral(:,1),spectral(:,2))

%% Repeat for van sliding door
data = wavread('van_driverdoorclosing.wav');

%Frequency analysis
NFFT = 2^nextpow2(length(data));
Y = fft(data(:,2), NFFT)/length(data);
freq = (1/dt)/2*linspace(0,1,NFFT/2);
spectral = [freq'  2*abs(Y(1:NFFT/2))];

plot(spectral(:,1),spectral(:,2))

Der Prozess zum Auffinden deutlicher Spitzen in Audiosignalen wird aufgerufen transiente Erkennung. Anwendungen wie Sonys Säure und Ableton Live Verwenden Sie die Transientenerkennung, um die Beats in der Musik für das Beat-Matching zu finden.

Die deutliche Spitze, die Sie in der obigen Wellenform sehen, wird als Transient bezeichnet, und es gibt mehrere gute Algorithmen, um sie zu erkennen. Das Papier Transientenerkennung und -klassifizierung in Energiefragen beschreibt 3 Methoden, um dies zu tun.

Benutzeravatar von Turnkey
Schlüsselfertig

Ich könnte mir vorstellen, dass die Frequenz und Amplitude auch von Fahrzeug zu Fahrzeug stark variieren würden. Der beste Weg, dies festzustellen, wäre eine Probenahme in einem Civic im Vergleich zu einem großen SUV. Vielleicht könnten Sie den Benutzer die Tür in einem “Lernmodus” schließen lassen, um die Amplituden- und Frequenzsignatur zu erhalten. Dann könnten Sie das verwenden, um im Nutzungsmodus zu vergleichen.

Sie könnten auch die Verwendung in Betracht ziehen Fourier-Analyse Hintergrundgeräusche zu eliminieren, die nicht mit dem Schließen der Tür verbunden sind.

Benutzeravatar von Szundi
Szundi

Vielleicht sollten Sie versuchen, einen signifikanten sofortigen Anstieg des Luftdrucks zu erkennen, der das Schließen einer Tür kennzeichnen sollte. Sie können es mit dieser Wellenform- und Schallpegelanalyse koppeln und all dies könnte Ihnen ein besseres Ergebnis liefern.

1398630cookie-checkFinden Sie bei einem Audiostream heraus, wann eine Tür zuschlägt (Schalldruckpegelberechnung?)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy