41 Stimmen

Ermitteln Sie anhand eines Audiostroms, wann eine Tür zuschlägt (Berechnung des Schalldruckpegels?)

Nicht unähnlich einem Klatschdetektor ("Klatschen Sie! klatschen klatschen Klatschen Sie ab! klatschen klatschen Klatsche ein, klatsche aus, der Clapper! klatschen klatschen ") Ich muss erkennen, wenn sich eine Tür schließt. Dies geschieht in einem Fahrzeug, was einfacher ist als eine Zimmer- oder Wohnungstür:

Zuhören: http://ubasics.com/so/van_driver_door_closing.wav

Sehen Sie:
image of waveform shows steady line, then sudden disruption, settling down to steady line

Es wird mit 16bits 4khz gesampelt, und ich möchte eine Menge Verarbeitung oder Speicherung von Samples vermeiden.

Wenn man sich das in Audacity oder einem anderen Waveform-Tool anschaut, ist es ziemlich ausgeprägt und wird fast immer durch den erhöhten Schalldruck im Fahrzeug geclippt - auch wenn die Fenster und andere Türen geöffnet sind:

Zuhören: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Sehen Sie:
alt text

Ich vermute, dass es einen relativ einfachen Algorithmus gibt, der Messwerte mit 4 kHz und 8 Bit erfasst und den "stabilen Zustand" festhält. Wenn der Algorithmus einen signifikanten Anstieg des Schallpegels feststellt, würde er die Stelle markieren.

  • Was denken Sie darüber?
  • Wie würden Sie dieses Ereignis erkennen?
  • Gibt es Code-Beispiele für Schalldruckpegelberechnungen, die hilfreich sein könnten?
  • Kann ich mit einer geringeren Abtastfrequenz auskommen (1 kHz oder noch langsamer)?

Aktualisierung: Ich spiele mit Octave (Open Source für numerische Analyse - ähnlich wie Matlab) und versuche herauszufinden, ob ich mit dem Root Mean Square (Wurzel-Mittelwert-Quadrat) das bekomme, was ich brauche (was zu etwas führt, das dem SPL sehr ähnlich ist)

Update2: Bei der Berechnung des RMS wird 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 höchster Stufe usw.). Das CFAR sieht wirklich interessant aus - ich weiß, dass ich einen adaptiven Algorithmus verwenden muss, und CFAR passt auf jeden Fall ins Konzept.

-Adam

0 Stimmen

Ist ein Beschleunigungsmesser eine Option?

0 Stimmen

Ich habe einen Drei-Achsen-Beschleunigungsmesser auf dem Board. Übrigens sind auch ein Drucksensor, ein Lichtsensor, eine Türschaltererkennung, GPS und eine Kamera vorhanden. Obwohl diese Optionen verfügbar sind, wird das Design im Idealfall nur das Mikrofon für die Erkennung der Türschließung benötigen.

0 Stimmen

Nur ein zufälliger Gedanke - wenn es fast immer clippt, wenn es schließt - warum nicht einfach für den Clip erkennen?

28voto

coobird Punkte 155882

Wenn man sich die Screenshots der Quell-Audiodateien ansieht, wäre eine einfache Möglichkeit, eine Änderung des Geräuschpegels zu erkennen, die Durchführung einer numerische Integration der Proben, um die "Energie" der Welle zu einem bestimmten Zeitpunkt zu ermitteln.

Ein grober Algorithmus würde lauten:

  1. Teilen Sie die Proben in Abschnitte ein
  2. Berechnen Sie die Energie der einzelnen Abschnitte
  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 hinzufügen, dass ich das noch nicht ausprobiert habe.

Dieser Weg sollte möglich sein, ohne dass alle Proben vorher aufgezeichnet werden müssen. Solange ein Puffer einer gewissen Länge vorhanden ist ( WINDOW_SIZE im Beispiel), kann eine numerische Integration durchgeführt werden, um die Energie des Schallabschnitts zu berechnen. Dies bedeutet jedoch, dass es eine Verzögerung bei der Verarbeitung gibt, die von der Länge des WINDOW_SIZE . Ein weiteres Anliegen ist die Bestimmung einer guten Länge für einen Klangabschnitt.

Wie man in Abschnitte unterteilt

In der ersten Audiodatei scheint die Dauer des Geräuschs beim Schließen der Tür 0,25 Sekunden zu betragen, so dass das für die numerische Integration verwendete Fenster wahrscheinlich höchstens die Hälfte oder sogar eher ein Zehntel davon betragen sollte, damit der Unterschied zwischen der Stille und dem plötzlichen Geräusch wahrgenommen werden kann, selbst wenn sich das Fenster zwischen dem leisen Abschnitt und dem Geräuschabschnitt überschneidet.

Wenn das Integrationsfenster beispielsweise 0,5 Sekunden beträgt und das erste Fenster die 0,25 Sekunden Stille und die 0,25 Sekunden des Türschließens abdeckt, während das zweite Fenster die 0,25 Sekunden des Türschließens und die 0,25 Sekunden der Stille abdeckt, könnte es so aussehen, als ob die beiden Geräuschabschnitte den gleichen Geräuschpegel hätten und daher die Geräuscherkennung nicht auslösen würden. Ich könnte mir vorstellen, dass ein kurzes Fenster dieses Problem etwas abmildern würde.

Ein zu kurzes Fenster bedeutet jedoch, dass der Anstieg des Schalls möglicherweise nicht vollständig in ein Fenster passt, und es kann der Eindruck entstehen, dass der Energieunterschied zwischen den benachbarten Abschnitten gering ist, was dazu führen kann, dass der Schall nicht wahrgenommen wird.

Ich glaube, die WINDOW_SIZE y THRESHOLD müssen beide empirisch für den zu erfassenden Ton bestimmt werden.

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

Vorteile/Nachteile

Der Vorteil dieser Methode ist, dass die Verarbeitung mit einfacher Ganzzahlarithmetik erfolgen kann, wenn die Audioquelle als Ganzzahl eingespeist wird. Der Nachteil ist, wie bereits erwähnt, dass die Echtzeitverarbeitung je nach Größe des zu integrierenden Abschnitts eine Verzögerung aufweist.

Es gibt einige Probleme, die mir bei diesem Ansatz einfallen:

  1. Wenn das Hintergrundgeräusch zu laut ist, kann der Energieunterschied zwischen dem Hintergrundgeräusch und dem Schließen der Tür nicht leicht unterschieden werden, so dass das Schließen der Tür möglicherweise nicht erkannt werden kann.
  2. Jedes plötzliche Geräusch, wie z. B. ein Klatschen, könnte als Schließen der Tür gewertet werden.

Vielleicht sollte man die Vorschläge aus den anderen Antworten kombinieren und versuchen, die Frequenzsignatur des Türschließens mit Hilfe der Fourier-Analyse zu analysieren, was zwar mehr Rechenarbeit erfordern würde, aber weniger fehleranfällig wäre.

Es wird wahrscheinlich einige Experimente erfordern, bevor wir eine Lösung für dieses Problem finden.

0 Stimmen

Dieser Ansatz gefällt mir sehr gut, also werde ich ihn umsetzen und hier über meine Ergebnisse berichten. Anstatt einen festen Schwellenwert zu haben, werde ich die durchschnittliche Energie im Auge behalten und einen einstellbaren Faktor haben (d.h. das Fenster muss mehr als das 1,5-fache des Durchschnitts betragen, um auszulösen).

8voto

James Caccese Punkte 1374

Sie sollten die Türschließschalter im Auto anzapfen. Der Versuch, dies mit einer Geräuschanalyse zu tun, ist eine Überforderung.

Es gibt eine Reihe von Vorschlägen zu verschiedenen Signalverarbeitungen Ansätze, die man verfolgen kann, aber bis man sich mit der Erkennungstheorie Erkennungstheorie lernen, ein Embedded Signal Processing Board bauen, die Architektur des von Ihnen gewählten Chips kennenlernen, einen Algorithmus ausprobieren, ihn debuggen und dann den Algorithmus für das Auto, in dem Sie ihn verwenden wollen, abstimmen (und dann für jedes andere für jedes andere Auto), werden Sie sich wünschen, Sie hätten einfach einen Reed-Schalter Schalter ins Auto geklebt und einen Magneten an die Tür geklebt.

Nicht, dass es nicht ein interessantes Problem für die DSP-Experten wäre, das es zu lösen gilt, aber die Art und Weise, wie Sie diese Frage stellen, zeigt, dass Sound Verarbeitung nicht der Weg ist, den Sie gehen wollen. Es wird einfach ein Albtraum sein um es richtig zu machen.

Außerdem ist der Klöppel nur ein Hochpassfilter, der mit einem Schwellenwertdetektor verbunden ist. (plus ein Timer, um sicherzustellen, dass 2 Klatschen schnell genug zusammen)

1 Stimmen

In vielen Situationen ist dies die richtige Antwort. Wenn es möglich ist, die Schalter nicht zu verdrahten, können wir Installationsprobleme, Kostensteigerungen und Haftungsfragen vermeiden, und da dieses Gerät wiederverwendet werden soll (nicht dauerhaft installiert), ist eine Verdrahtung nicht optimal. Es ist aber eine Option.

1 Stimmen

In einigen Fällen, z. B. bei elektrischen Schiebe- oder Hecktüren, kann eine Verkabelung erforderlich sein, da das Geräusch des Schließens nicht so energisch ist, so dass mehr Verarbeitung oder eine individuelle Abstimmung (und damit Einrichtung) erforderlich ist. Ein anderer Gedanke war, einen Lichtsensor in der Nähe einer Innenraumbeleuchtung anzubringen - einfach zu installieren und funktioniert auch.

0 Stimmen

Ich neige dazu, dem zuzustimmen, aber das hat mich nicht davon abgehalten, einen Weg vorzuschlagen, es algorithmisch zu tun.... :) +1

7voto

Drew Hall Punkte 27579

In der Radarwelt gibt es eine Menge einschlägiger Literatur zu diesem Problem (man nennt es Detektionstheorie).

Sie könnten sich mit der Erkennung von "Zellenmittelung CFAR" (Constant False Alarm Rate) befassen. Wikipedia hat ein wenig aquí . Ihre Idee ist dem hier sehr ähnlich, und es sollte funktionieren! :)

Viel Glück!

5voto

ccook Punkte 5772

Ich würde mit der Betrachtung des Spektrums beginnen. Ich habe das mit den beiden Audiodateien gemacht, die Sie angegeben haben, und es scheint einige Ähnlichkeiten zu geben, die Sie nutzen könnten. Zum Beispiel scheint der Hauptunterschied zwischen den beiden bei 40-50 Hz zu liegen. Meine Meinung.

UPDATE

Ich hatte eine andere Idee, nachdem ich dies gepostet hatte. Wenn Sie können, bauen Sie einen Beschleunigungsmesser in das Gerät ein. Dann die Schwingungs- und akustischen Signale zu korrelieren . Dies sollte bei der fahrzeugübergreifenden Türerkennung helfen. Ich denke, es sollte gut korreliert sein, da der Ton vibrationsgesteuert ist, wo die Stereoanlage zum Beispiel nicht ist. Ich hatte schon einmal ein Gerät, das meine Motordrehzahl mit einer Windschutzscheibenhalterung (Saugnapf) erfassen konnte, die Empfindlichkeit könnte also vorhanden sein. (Ich verspreche nicht, dass das funktioniert!)

alt text
(Quelle: <a href="http://www.charlesrcook.com/spectral.jpg" rel="nofollow noreferrer">charlesrcook.com </a>)

%% 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))

4voto

Nick Haddad Punkte 8507

Das Verfahren zum Auffinden einzelner Spikes in Audiosignalen wird als Transientenerkennung . Anwendungen wie Sonys Acid y Ableton Live die Erkennung von Transienten verwenden, um die Beats in der Musik für den Beat-Matching-Prozess zu finden.

Die deutliche Spitze, die Sie in der obigen Wellenform sehen, wird als Transiente bezeichnet, und es gibt mehrere gute Algorithmen, um sie zu erkennen. Das Papier Erkennung und Klassifizierung von Transienten in Energiefragen beschreibt 3 Methoden, um dies zu erreichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X