Biorąc pod uwagę strumień audio, znajdź, gdy drzwi trzaskają (obliczanie poziomu ciśnienia akustycznego?)

Podobnie jak wykrywacz klaskania ("Clap on! clap clap Clap off! clap clap Clap on, clap off, Clapper! clap clap ") muszę wykryć, kiedy drzwi się zamykają. Jest to pojazd, który jest łatwiejszy niż drzwi do pokoju lub domu: {]}

Posłuchaj: http://ubasics.com/so/van_driver_door_closing.wav

Zobacz:
obraz kształtu fali pokazuje stałą linię, a następnie nagłe zakłócenia, osiadanie do stałej linii

To próbkowanie przy 16bitach 4khz, i chciałbym uniknąć dużo przetwarzania lub przechowywania próbki.

Kiedy spojrzysz na niego w audacity lub innym narzędziu do kształtowania fali, jest dość charakterystyczny i prawie zawsze zaciska się ze względu na wzrost ciśnienia akustycznego w pojeździe - nawet gdy okna i inne drzwi są otwarte.]}

Posłuchaj: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Zobacz:
alt text

Spodziewam się, że istnieje stosunkowo prosty algorytm, który pobierałby odczyty przy 4kHz, 8 bitach i zachowywał ślad "stanu ustalonego". Gdy algorytm wykryje znaczny wzrost poziomu dźwięku, oznaczy miejsce.

  • jakie są Twoje myśli?
  • Jak wykryłbyś to wydarzenie?
  • czy są przykłady obliczeń poziomu ciśnienia akustycznego, które mogłyby pomóc?
  • Czy mogę uniknąć mniej częstego próbkowania (1kHz lub nawet wolniej?)

Update: gra z Octave (Analiza numeryczna open source - podobna do Matlab) i sprawdzanie, czy root mean square da mi to ,czego potrzebuję (co skutkuje czymś bardzo podobnym do SPL)

Update2: Obliczanie RMS łatwo znajduje zamknięcie drzwi w prostym przypadku:
alt text alt text
Teraz wystarczy spojrzeć na trudne przypadki (radio włączone, heat/air on high, itp.). CFAR wygląda naprawdę ciekawie-wiem, że będę musiał użyć algorytmu adaptacyjnego, a cfar na pewno pasuje do rachunku.

- Adam

Author: Community, 2009-02-01

9 answers

Patrząc na zrzuty ekranu źródłowych plików audio, jednym z prostych sposobów wykrycia zmiany poziomu dźwięku byłoby wykonanienumerycznej integracji próbek, aby dowiedzieć się "energii" fali w określonym czasie.

Przybliżony algorytm to:

  1. podziel próbki na sekcje
  2. Oblicz energię każdego odcinka
  3. weź stosunek energii między poprzednim oknem a bieżącym oknem
  4. Jeśli stosunek przekracza jakiś próg, ustalić, że był nagły głośny hałas.

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;

Powinienem dodać zastrzeżenie, że nie próbowałem tego.

Ten sposób powinien być możliwy do wykonania bez uprzedniego zarejestrowania wszystkich próbek. Tak długo, jak istnieje bufor o pewnej długości (WINDOW_SIZE w przykładzie), można wykonać całkowanie numeryczne w celu obliczenia energii odcinka dźwięku. Oznacza to jednak, że będzie opóźnienie w przetwarzaniu, zależne od długości WINDOW_SIZE. Kolejnym problemem jest ustalenie odpowiedniej długości odcinka dźwięku.

Jak podzielić na sekcje

W pierwszym pliku audio wydaje się, że czas trwania dźwięku zamykania drzwi wynosi 0,25 sekundy, więc okno używane do całkowania numerycznego powinno być co najwyżej połowy tego, a nawet dziesiątej, więc różnica między ciszą a nagłym dźwiękiem może być zauważona, nawet jeśli jest to możliwe. okno jest nakładające się między sekcją cichą i sekcją szumów.

Na przykład, jeśli okno integracyjne wynosiło 0,5 sekundy, a pierwsze okno zakrywało 0,25 sekundy ciszy i 0,25 sekundy zamykania drzwi, a drugie okno zakrywało 0,25 sekundy zamykania drzwi i 0,25 sekundy ciszy, może się wydawać, że dwie sekcje dźwięku mają ten sam poziom hałasu, dlatego nie uruchamiają detekcji dźwięku. Wyobrażam sobie, że krótkie okno ulży ten problem nieco.

Jednak posiadanie zbyt krótkiego okna oznacza, że wzrost dźwięku może nie w pełni zmieścić się w jednym oknie i może się okazać, że istnieje niewielka różnica w energii między sąsiednimi sekcjami, co może spowodować, że dźwięk zostanie pominięty.

Wierzę, że WINDOW_SIZE i THRESHOLD będą musiały zostać empirycznie określone dla dźwięku, który zostanie wykryty.

W celu ustalenia, ile próbek algorytm ten będzie musiał zachować w pamięci, powiedzmy, WINDOW_SIZE jest 1/10 dźwięku zamykania drzwi, co wynosi około 0,025 sekundy. Przy częstotliwości próbkowania 4 kHz, czyli 100 próbek. Wydaje się, że nie jest to zbyt wymagająca pamięć. Używając 16-bitowych próbek, które mają 200 bajtów.

Zalety / Wady

Zaletą tej metody jest to, że przetwarzanie może być wykonywane za pomocą prostej arytmetyki całkowitej, jeśli dźwięk źródłowy jest podawany jako liczby całkowite. Połów jest, jak wspomniano już to przetwarzanie w czasie rzeczywistym będzie miało opóźnienie, w zależności od wielkości zintegrowanej sekcji.

Jest kilka problemów, które mogę wymyślić w tym podejściu:

  1. jeśli hałas tła jest zbyt głośny, różnica w energii między hałasem tła a zamknięciem drzwi nie będzie łatwo odróżnić i może nie być w stanie wykryć zamknięcia drzwi.
  2. każdy nagły hałas, taki jak klaskanie, można uznać za drzwi zamykam.

Być może, łącząc sugestie w innych odpowiedziach, takie jak próba analizy sygnatury częstotliwościowej zamykania drzwi za pomocą analizy Fouriera, która wymagałaby więcej przetwarzania, ale uczyniłaby ją mniej podatną na błędy.

Zanim znajdziemy sposób na rozwiązanie tego problemu, prawdopodobnie trzeba będzie trochę poeksperymentować.

 26
Author: coobird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 02:54:46

Należy włączyć przełączniki zamykania drzwi w samochodzie. Próba zrobienia tego z analizą dźwięku jest zbyt zaawansowana.

Istnieje wiele sugestii dotyczących różnych przetwarzania sygnału podejścia do podjęcia, ale tak naprawdę, zanim dowiesz się o wykrywaniu teorii, zbuduj wbudowaną płytkę przetwarzania sygnału, naucz się przetwarzania architektury dla wybranego układu, spróbuj algorytmu, Debuguj go, a następnie dostroić go do samochodu, w którym chcesz go używać (a następnie ponownie dostroić i ponownie debugować it dla co drugi samochód), będziesz życzył sobie tylko przyklejony trzciny przełącznik wewnątrz samochodu i hotglued magnes do drzwi.

Nie to, że nie jest to interesujący problem do rozwiązania dla ekspertów dsp, ale z tego, w jaki sposób zadajesz to pytanie, jest jasne, że dźwięk przetwarzanie nie jest drogą, którą chcesz obrać. To będzie taki koszmar. żeby wszystko działało jak należy.

Ponadto, klapka jest tylko filtrem wysoko-przepustowym wprowadzanym do detektora progu. (Plus timer, aby upewnić się 2 claps quickly enough together)

 8
Author: James Caccese,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 06:39:16

W świecie radarów jest wiele literatury na ten temat (nazywa się to teorią detekcji).

Możesz spojrzeć na wykrywanie" uśredniania komórek CFAR " (stała częstotliwość fałszywego alarmu). Wikipedia ma trochę tutaj . Twój pomysł jest bardzo podobny do tego i powinien zadziałać! :)

Powodzenia!

 6
Author: Drew Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 04:23:39

Zacząłbym od spojrzenia na widmo. Zrobiłem to na dwóch plikach audio, które dałeś, i wydaje się, że jest pewne podobieństwo, którego mógłbyś użyć. Na przykład główna różnica między tymi dwoma wydaje się być około 40-50Hz. Ojej .02.

UPDATE

Miałem inny pomysł po opublikowaniu tego. Jeśli możesz, Dodaj akcelerometr do urządzenia. Następnie skorelować sygnały wibracyjne i akustyczne . Powinno to pomóc w wykrywaniu drzwi pojazdu krzyżowego. Myślę o tym. powinien być dobrze skorelowany, ponieważ dźwięk jest napędzany wibracjami, gdzie na przykład stereo nie jest. Miałem urządzenie, które było w stanie wykryć obroty silnika za pomocą mocowania przedniej szyby (przyssawki), więc czułość może tam być. (Nie obiecuję, że to działa!)

Alt text http://www.charlesrcook.com/spectral.jpg

%% 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))
 5
Author: ccook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 06:50:03

Proces znajdowania wyraźnych skoków w Sygnałach audio nazywa się detekcją przejściową . Aplikacje takie jak Sony ' S Acid i Ableton Live używają detekcji przejściowej do znajdowania bitów w muzyce do dopasowywania bitów.

Wyraźny skok, który widzisz w powyższym kształcie fali, nazywa się przejściowym i istnieje kilka dobrych algorytmów do jego wykrywania. W ArtykuleDetekcja i klasyfikacja przejściowa w sprawach energetycznych opisano 3 metody wykonywania to.

 4
Author: Nick Haddad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 13:00:41

Wyobrażam sobie, że częstotliwość i amplituda różnią się znacznie w zależności od pojazdu. Najlepszym sposobem na ustalenie tego byłoby pobranie próbki w Civic kontra dużym SUV-ie. Być może mógłbyś zamknąć drzwi w trybie "uczenia się", aby uzyskać sygnaturę amplitudy i częstotliwości. Następnie możesz użyć tego do porównania w trybie użytkowania.

Możesz również rozważyć użycie analizy Fouriera w celu wyeliminowania szumów tła, które nie są związane z drzwiami blisko.

 3
Author: Turnkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 00:41:25

Może powinieneś spróbować wykryć znaczny natychmiastowy wzrost ciśnienia powietrza, który powinien oznaczać zamknięcie drzwi. Możesz go sparować z analizą kształtu fali i poziomu dźwięku, a to wszystko może dać lepszy wynik.

 1
Author: Szundi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-31 23:51:21

W przypadku rzadszego próbkowania najwyższa częstotliwość dźwięku, jaką można wychwycić, wynosi połowę częstotliwości próbkowania. Tak więc, jeśli dźwięk drzwi samochodu był najsilniejszy przy 1000 hz (na przykład), częstotliwość próbkowania poniżej 2000 Hz straciłaby ten dźwięk całkowicie

 0
Author: barrowc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 02:35:59

Bardzo prosta bramka dźwiękowa prawdopodobnie sprawdziłaby się w twojej sytuacji. Po prostu poczekaj na pierwszą próbkę, której Amplituda przekracza określoną wartość progową (aby uniknąć wyzwalania szumem tła). Trzeba by się bardziej skomplikować tylko wtedy, gdy trzeba rozróżnić różne rodzaje hałasu (np. zamykanie drzwi a klaskanie ręką).

 0
Author: Mark Heath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 07:55:21