Frage

Nicht anders als bei einem clap-Detektor ( "Clap auf! klatschen klatschen Klatschen weg! klatschen klatschen Clap auf, klatschen ab, die Clapper! klatschen klatschen „) ich muss erkennen, wenn eine Tür schließt. Dies ist in einem Fahrzeug, das leichter als ein Zimmer oder Haustür ist:

Hören Sie: http://ubasics.com/so/van_driver_door_closing.wav

Look:
„Bild

Es ist Probenahme bei 16bits 4khz, und ich möchte eine Menge Verarbeitung oder Lagerung von Proben vermeiden.

Wenn man es betrachtet in Dreistigkeit oder eine anderes Wellenform-Werkzeug ist es ganz unverwechselbar, und fast immer Clip aufgrund der Erhöhung des Schalldruckes im Fahrzeug - auch wenn die Fenster und andere Türen offen:

Hören Sie: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Look:
alt text

Ich erwarte, dass es ein relativ einfacher Algorithmus, der Ablesungen bei 4 kHz nehmen würde, 8 Bits, und halten Sie den Überblick über die ‚steady state‘. Wenn der Algorithmus eine deutliche Steigerung des Schallpegels erkennt wäre es die Stelle markiert.

  • Was sind Ihre Gedanken?
  • Wie würden Sie dieses Ereignis erkennen?
  • Gibt es Code-Beispiele von Schalldruckpegel Berechnungen, die helfen könnten?
  • Kann ich weg mit weniger häufigen Probenahme (1kHz oder sogar noch langsamer?)

Update: mit Octave Spielen (Open-Source-numerische Analyse - ähnlich wie Matlab) und sehen, ob der Root Mean Square mir geben, was ich brauche (was den SPL in etwas sehr ähnlichen Ergebnisse)

Update2: Computer der RMS findet sich die Tür leicht im einfachen Fall:
alt text
Jetzt muss ich bei den schwierigen Fällen (Radio, Wärme / Luft hoch, usw.) anschauen. Die CFAR sieht wirklich interessant. - Ich weiß, ich werde einen adaptiven Algorithmus haben, zu verwenden, und CFAR sicherlich passt die Rechnung

-Adam

War es hilfreich?

Lösung

Mit Blick auf den Screenshots der Quelle Audiodateien, eine einfache Möglichkeit, eine Änderung des Schallpegels zu erkennen wäre, ein numerische Integration die Proben, die, um herauszufinden,‚‘der Welle zu einem bestimmten Zeitpunkt.

Ein grober Algorithmus sei:

  1. Teilen Sie die Proben in Abschnitte
  2. Berechnen Sie die Energie jedes Abschnitts
  3. Nehmen Sie das Verhältnis der Energien zwischen dem vorhergehenden Fenster und dem aktuellen Fenster
  4. Wenn das Verhältnis eines bestimmten Schwellenwert überschreitet, zu bestimmen, dass es ein plötzliches lautes Geräusch 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 eine Verzichtserklärung hinzufügen, dass ich nicht versucht haben.

Auf diese Weise möglich sein sollte, zunächst aufgenommen, ohne dass die Proben durchgeführt werden. Solange es Puffer von einiger Länge (WINDOW_SIZE in dem Beispiel) ist, kann eine numerische Integration durchgeführt werden, um die Energie des Abschnitts des Schalls zu berechnen. Dies schließt jedoch bedeutet, dass es eine Verzögerung bei der Verarbeitung, abhängig von der Länge der WINDOW_SIZE sein. eine gute Länge für einen Abschnitt des Schalls Bestimmung ist ein weiteres Anliegen.

Wie in den Abschnitten nach Split

In der ersten Audiodatei, scheint es, dass die Dauer des Klangs der Türschließ 0,25 Sekunden ist, so dass das Fenster für die numerische Integration verwendet wahrscheinlich höchstens halb so groß sein sollte, oder sogar wie ein Zehntel, so dass die Differenz zwischen dem Schweigen und plötzlichem Ton kann bemerkt werden, auch wenn das Fenster zwischen dem stillen Abschnitt und dem Rausch Abschnitt überlappend ist.

Zum Beispiel, wenn das Integrationsfenster 0,5 Sekunden waren, und das erste Fenster bedeckte von 0,25 Sekunden Stille und 0,25 Sekunden nach Schließen der Tür, und das zweite Fenster bedeckte 0,25 Sekunden der Türschließ und 0,25 Sekunden Stille, es scheint, dass die beiden Abschnitte des Schalls das gleiche Maß an Rauschen hat daher nicht die Geräuscherkennung auszulösen. Ich stelle mir ein kurzes Zeitfenster, die würde dieses Problem etwas lindern.

Allerdings mit einem Fenster, das zu kurz ist, bedeutet, dass der Anstieg des Ton möglicherweise nicht vollständig paßt in ein Fenster, und es kann apppear, dass es wenig Unterschied in der Energie zwischen den benachbarten Abschnitten, die den Ton dazu führen können, entgehen lassen.

Ich glaube, die WINDOW_SIZE und THRESHOLD gehen, um sowohl den Klang empirisch bestimmt werden müssen, die erfasst werden soll.

Aus Gründen der Bestimmung, wie viele Proben, die dieser Algorithmus benötigt, im Speicher zu halten, lassen Sie uns sagen, ist die WINDOW_SIZE 1/10 der Klang der Türschließ, die etwa 0,025 Sekunde. Bei einer Abtastrate von 4 kHz, ist, dass 100 Proben. Das scheint nicht zu viel von einem Speicherbedarf zu sein. Mit 16-Bit-Samples, das ist 200 Byte.

Vorteile / Nachteile

Der Vorteil dieser Methode ist, dass die Verarbeitung mit einfacher Integer-Arithmetik durchgeführt werden, wenn die Quelle Audio-in als ganzen Zahlen zugeführt wird. Der Haken ist, wie bereits erwähnt, dass die Echtzeitverarbeitung eine Verzögerung, in Abhängigkeit von der Größe des Abschnitts haben wird, die integriert ist.

Es gibt ein paar Probleme, die ich von diesem Ansatz denken:

  1. Wenn die Hintergrundgeräusche zu laut sind, wird die Energiedifferenz zwischen dem Hintergrundrauschen und Schließen der Tür nicht leicht unterschieden werden, und es kann erkennen können, um das Schließen der Tür nicht.
  2. Jeder abrupter Geräusch, wie ein Klatschen, könnte als die Tür betrachtet werden endet.

Vielleicht, die Vorschläge in den anderen Antworten kombiniert, wie versucht, die Frequenzsignatur des Türschließ mit Fourier-Analyse zu analysieren, die mehr Verarbeitung erfordern würden, aber es wäre weniger machen zu fehleranfällig.

Es wird wahrscheinlich einige Experimente nehmen, bevor einen Weg zu finden, um solve dieses Problem.

Andere Tipps

Sie sollten an die Tür schließen Schalter im Auto tippen in. Der Versuch, dies zu tun, mit Ton Analyse Overengineering.

Es gibt viele Vorschläge über verschiedene Signalverarbeitung Ansätze zu nehmen, aber wirklich, von der Zeit lernen Sie Erkennung eine eingebettete Signalverarbeitungsplatine Theorie, bauen, lernen die Verarbeitung Architektur für den Chip, den Sie gewählt haben, versuchen, einen Algorithmus, debuggen, und dann tune es für das Auto, das Sie wollen, es zu benutzen (und dann erneut abstimmen und re-debug es für jedes andere Auto), wird den Wunsch aufkommen lassen Sie stickey nur ein Rohr mit Klebeband Schalter im Auto und hotglued einen Magneten an der Tür.

Nicht, dass es nicht ein interessantes Problem für die dsp Experten zu lösen, aber von der Art und Weisen Sie diese Frage fragen, ist es klar, dass ein solide Verarbeitung ist nicht die Route, die Sie nehmen wollen. Es wird nur ein solcher Alptraum macht es richtig arbeiten.

Auch die Klöppel ist nur ein Hochpassfilter in einen Schwellenwertdetektor zugeführt. (Plus ein Timer, um sicherzustellen, 2 claps schnell genug zusammen)

Es gibt eine Menge relevanter Literatur zu diesem Problem in der Radar Welt (es heißt Entdeckungstheorie).

Sie können einen Blick auf „Zelle durchschnittlich CFAR“ (konstante Fehlalarmrate) Erkennung haben. Wikipedia hat ein bisschen hier . Ihre Idee ist sehr ähnlich wie diese, und es sollte funktionieren! :)

Viel Glück!

Ich würde, indem man die spektralen beginnen. Ich tat dies auf den beiden Audio-Dateien gab, und es scheint einige Ähnlichkeit zu sein, das Sie nutzen könnten. Zum Beispiel scheint der Hauptunterschied zwischen den beiden um 40-50Hz zu sein. Mein .02.

UPDATE

Ich hatte eine andere Idee, nachdem dieses Posting. Wenn Sie können, fügen Sie einen Beschleunigungsmesser auf das Gerät. Dann korrelieren die Schwingungs- und akustische Signale . Dies sollte mit Querfahrzeugtür Erkennung helfen. Ich denke, es sollte gut, da der Ton korreliert ist vibrierend angetrieben, wheres die Stereo zum Beispiel ist es nicht. Ich habe ein Gerät habe, dass meine Motordrehzahl mit einer Windschutzscheibe Halterung (Saugnapf), so dass die Empfindlichkeit konnte könnte es erkennen. (Ich mache keine Versprechungen das funktioniert!)


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

Das Verfahren zum Auffinden deutliche Spitze in Audiosignalen genannt wird Transientenerkennung . Anwendungen wie Sonys Säure und Ableton Live Transientenerkennung verwenden die Beats in der Musik zu finden Beat-Matching zu tun.

Die deutliche Spitze Sie oben in der Wellenform zu sehen ist eine vorübergehende genannt, und es gibt mehrere gute Algorithmen es zu erkennen. Das Papier Transient Detektion und Klassifikation in Energiefragen 3 Methoden beschreiben, dies zu tun.

Ich könnte mir vorstellen, dass die Frequenz und Amplitude auch deutlich von Fahrzeug zu Fahrzeug variieren würden. Die beste Weg, um festzustellen, dass würde eine Probe in einem Civic im Vergleich zu einem großen SUV statt. Vielleicht könnten Sie den Benutzer die Tür in einem „Lernmodus“ schließen die Amplitude und Frequenz Signatur zu erhalten. Dann könnten Sie verwenden, wenn im Nutzungsmodus zu vergleichen.

Sie könnten auch mit berücksichtigen Fourier-Analyse Hintergrundgeräusche zu eliminieren, die nicht mit zugeordnet sind, die Tür zu schließen.

Vielleicht sollten Sie versuchen, signifikanten sofortigen Anstieg des Luftdruckes zu erfassen, die eine Tür zu schließen markieren sollten. Sie können es mit dieser Wellenform und Schallpegels Analyse koppeln und diese alle könnten Sie ein besseres Ergebnis.

In der Frage der weniger häufiger Probenahme, die höchste Schallfrequenz, die erfaßt werden kann, ist die Hälfte der Abtastrate. Wenn also die Schallautotür stärkste bei 1000Hz ist (zum Beispiel) dann eine Abtastrate unterhalb 2000 Hz würde völlig diesen Ton verlieren

Ein sehr einfaches Noise Gate tun würde wahrscheinlich in Ihrer Situation ganz gut. warten einfach für die erste Probe, deren Amplitude oberhalb eines vorgegebenen Schwellwerts ist (zur Vermeidung von Hintergrundrauschen mit Triggerung). Sie müßten nur komplizierter, als diese erhalten, wenn Sie zwischen verschiedenen Arten von Rauschen (beispielsweise eine Tür schließt im Vergleich zu einem Handklatschen) unterscheiden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top