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

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

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

Облик:
image of waveform shows steady line, then sudden disruption, settling down to steady line

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

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

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

Облик:
alt text

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

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

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

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

-Adam

Ответ 1

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

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

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

псевдокод

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 секунды молчания, это может показаться, что два раздела звука имеют одинаковый уровень шума, поэтому не запускают обнаружение звука. Я предполагаю, что наличие короткого окна немного облегчит эту проблему.

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Возможно, вы посмотрите на обнаружение "постоянное значение ложной тревоги" в режиме "усреднение ячейки CFAR". В Wikipedia немного здесь. Ваша идея очень похожа на это, и она должна работать!:)

Удачи!

Ответ 4

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

UPDATE

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

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

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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