Учитывая аудиоstream, найдите, когда дверь хлопает (расчет уровня звукового давления?)

В отличие от детектора хлопка («Clap on! Clap clap Clap off! Clap clap Clap on, clap off, clapper! Clap clap ») Мне нужно обнаружить, когда дверь закрывается. Это находится в транспортном средстве, которое легче, чем комната или бытовая дверь:

Слушайте: http://ubasics.com/so/van_driver_door_closing.wav

Посмотрите:
изображение формы волны показывает устойчивую линию, затем внезапное разрушение, оседание до устойчивой линии

Это выборка на 16 бит 4 кГц, и я бы хотел избежать много обработки или хранения образцов.

Когда вы смотрите на него в духе или другом инструменте осциллограммы, это довольно отчетливо и почти всегда заклинивается из-за увеличения звукового давления в автомобиле – даже когда windows и другие двери открыты:

Слушайте: http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

Посмотрите:
alt text

Я ожидаю, что существует относительно простой алгоритм, который будет принимать показания на частоте 4 кГц, 8 бит и отслеживать «устойчивое состояние». Когда алгоритм обнаруживает значительное увеличение уровня звука, он будет отмечать пятно.

  • Что ты думаешь?
  • Как бы вы обнаружили это событие?
  • Существуют ли примеры кода для расчета уровня звукового давления, которые могут помочь?
  • Могу ли я уйти с менее частым отбором (1 кГц или даже медленнее?)

Обновление: игра с Octave (численный анализ с открытым исходным кодом – аналогичный Matlab) и просмотр, если средний квадрат корня даст мне то, что мне нужно (что приводит к чему-то очень похожему на SPL)

Update2: Вычисление RMS обнаруживает, что дверь легко закрывается в простом случае:
alt text alt text
Теперь мне просто нужно посмотреть на сложные случаи (радио, высокая температура / air и т. Д.). CFAR выглядит действительно интересно – я знаю, что мне придется использовать адаптивный алгоритм, и CFAR, безусловно, соответствует законопроекту.

-Адам

    Глядя на скриншоты исходных аудиофайлов, одним простым способом обнаружить изменение уровня звука было бы сделать численное интегрирование образцов, чтобы узнать «энергию» волны в определенное время.

    Грубым алгоритмом было бы:

    1. Разделить образцы на разделы
    2. Вычислить энергию каждого раздела
    3. Возьмите отношение энергий между предыдущим окном и текущим окном
    4. Если отношение превышает некоторый порог, определите, что раздался внезапный громкий шум.

    ПСЕВДОКОД

    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; 

    Я должен добавить отказ от ответственности, что я не пробовал это.

    Этот способ должен быть выполнен без предварительного отбора образцов. До тех пор, пока в примере есть буфер некоторой длины ( WINDOW_SIZE ), можно вычислить численное интегрирование для вычисления энергии раздела звука. Это означает, однако, что задержка в обработке будет зависеть от длины WINDOW_SIZE . Еще одна проблема заключается в определении хорошей длины для раздела звука.

    Как разделить разделы

    В первом звуковом файле кажется, что продолжительность звука закрытия двери составляет 0,25 секунды, поэтому окно, используемое для численного интегрирования, должно быть, должно быть, не более половины этого или даже больше похоже на десятое, поэтому разница между тишину и внезапный звук можно заметить, даже если окно перекрывается между секцией молчания и секцией шума.

    Например, если окно интеграции составляло 0,5 секунды, а первое окно охватывало 0,25 секунды молчания и 0,25 секунд закрытия двери, а второе окно закрывало 0,25 секунды закрытия двери и 0,25 секунды молчания, может показаться, что два раздела звука имеют одинаковый уровень шума, поэтому не запускают обнаружение звука. Я предполагаю, что короткое окно облегчит эту проблему.

    Однако наличие слишком короткого windows будет означать, что увеличение звука может не полностью вписаться в одно окно, и может показаться, что между соседними разделами мало различий в энергии, что может привести к пропущению звука.

    Я считаю, что WINDOW_SIZE и THRESHOLD должны быть определены эмпирически для звука, который будет обнаружен.

    Для определения количества образцов, которые этот алгоритм должен хранить в памяти, скажем, WINDOW_SIZE составляет 1/10 звука закрытия двери, что составляет около 0,025 секунды. При частоте дискретизации 4 кГц, то есть 100 выборок. Похоже, что это не слишком большая потребность в памяти. Использование 16-разрядных образцов, которые составляют 200 байт.

    Преимущества недостатки

    Преимущество этого метода заключается в том, что обработка может выполняться с простой целочисленной арифметикой, если исходный звук подается как целые числа. Уловка, как уже упоминалось, что обработка в реальном времени будет иметь задержку, в зависимости от размера раздела, который интегрирован.

    Есть несколько проблем, которые я могу придумать для этого подхода:

    1. Если фоновый шум слишком громкий, различие в энергии между фоновым шумом и закрытием двери не будет легко различаться, и он не сможет обнаружить закрытие двери.
    2. Любой резкий шум, такой как хлопок, можно рассматривать как закрытие двери.

    Возможно, сочетание предложений в других ответах, таких как попытка анализа частотной сигнатуры закрытия двери с использованием анализа Фурье, что потребует большей обработки, но сделает ее менее подверженной ошибкам.

    Вероятно, это займет несколько экспериментов, прежде чем найти способ решить эту проблему.

    Вы должны нажать на дверные замки в автомобиле. Попытка сделать это со звуковым анализом – это чрезмерный аудит.

    Есть много предложений относительно разных подходов к обработке сигналов, но на самом деле, к тому времени, когда вы узнаете о теории обнаружения, постройте встроенную плату обработки сигналов, изучите архитектуру обработки выбранного вами микросхемы, попробуйте алгоритм, отлаживаете его, и затем настройте его для автомобиля, на котором вы хотите его использовать (а затем повторно настройте и повторно отлаживайте его для каждого другого автомобиля), вы захотите, чтобы вы просто вставляли кассету с герконом в автомобиль и нагревали магнит до дверь.

    Не то, чтобы это не было проблемой для экспертов dsp, но из-за того, что вы задаете этот вопрос, ясно, что обработка звука – это не тот маршрут, который вы хотите принять. Это будет просто такой кошмар, чтобы он работал правильно.

    Кроме того, clapper представляет собой только фильтр высоких частот, подаваемый в пороговый детектор. (плюс таймер, чтобы убедиться, что 2 claps достаточно быстро вместе)

    В радарном мире есть много соответствующей литературы по этой проблеме (она называется теорией обнаружения).

    Вы можете взглянуть на детектирование «CFA» (постоянная ложная тревога). Википедия здесь немного. Ваша идея очень похожа на это, и она должна работать! 🙂

    Удачи!

    Я начну с рассмотрения спектра. Я сделал это на двух аудиофайлах, которые вы дали, и, похоже, есть какое-то сходство, которое вы могли бы использовать. Например, основное различие между ними, по-видимому, составляет около 40-50 Гц. Мой .02.

    ОБНОВИТЬ

    У меня была другая идея после публикации этого. Если можно, добавьте акселерометр на устройство. Затем коррелируют колебательные и акустические сигналы . Это должно помочь в обнаружении перекрестного автомобиля. Я думаю, что это должно быть хорошо коррелировано, поскольку звук вибрационно управляется, если стерео, например, нет. У меня было устройство, способное обнаруживать обороты двигателя с помощью лобового стекла (присоски), поэтому чувствительность может быть там. (Я не обещаю, что это работает!)

    alt text http://sofru.miximages.com/c/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)) 

    Процесс обнаружения различного шипа в аудиосигналах называется временным обнаружением . Приложения, такие как Sony Acid и Ableton Live, используют детектор переходных процессов, чтобы найти удары в музыке для выполнения биения.

    Четкий всплеск, который вы видите в форме волны выше, называется переходным, и есть несколько хороших алгоритмов для его обнаружения. В статье «Определение и classификация переходных процессов в энергетических вопросах» описаны 3 метода для этого.

    Я бы предположил, что частота и амплитуда также будут значительно отличаться от транспортного средства к транспортному средству. Лучший способ определить, что будет брать образец в Civic против большого внедорожника. Возможно, вы можете заставить пользователя закрыть дверь в режиме обучения, чтобы получить амплитудную и частотную сигнатуру. Затем вы можете использовать это для сравнения в режиме использования.

    Вы также можете рассмотреть возможность использования анализа Фурье для устранения фоновых шумов, которые не связаны с закрытием двери.

    Возможно, вам стоит попытаться обнаружить значительный мгновенный подъем давления airа, который должен закрыть дверь. Вы можете связать его с этим анализом уровня волны и уровня звука, и все это может дать вам лучший результат.

    Что касается менее частых выборок, то самая высокая частота звука, которая может быть захвачена, составляет половину частоты дискретизации. Таким образом, если звук автомобильной двери был самым сильным на частоте 1000 Гц (например), тогда частота дискретизации ниже 2000 Гц полностью потеряла бы этот звук

    Очень простая шумовая завеса, вероятно, будет очень хорошо в вашей ситуации. Просто дождитесь появления первого образца, амплитуда которого превышает заданное пороговое значение (чтобы избежать срабатывания фонового шума). Вам нужно будет только усложниться, если вам нужно различать различные типы шумов (например, закрытие двери по сравнению с ручным хлопанием).

    Давайте будем гением компьютера.