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


Answers

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

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

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

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

Question

В отличие от детектора хлопка («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 кГц, и я бы хотел избежать много обработки или хранения образцов.

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

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

Посмотрите:

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

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

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

Update2: Вычисление RMS обнаруживает, что дверь легко закрывается в простом случае:

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

-Адам




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

ОБНОВИТЬ

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

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



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

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




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




Links