2009-01-31 1 views
39

Не в отличие от детектора хлопать ("подсунуть! хлоп хлоп Хлоп прочь! хлоп хлоп Хлоп на, хлопать выключен, колотушки! clap clap ") Мне нужно обнаружить, когда дверь закрывается. Это в автомобиле, который легче, чем в комнате или бытовой двери:Учитывая аудиопоток, найти, когда дверь захлопывается (расчет уровня звукового давления?)

Listen: http://ubasics.com/so/van_driver_door_closing.wav

Посмотрите:
image of waveform shows steady line, then sudden disruption, settling down to steady line

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

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

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

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

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

  • Что вы думаете?
  • Как вы узнали это событие?
  • Есть ли примеры кода для измерения уровня звукового давления, которые могут помочь?
  • Могу ли я уйти с менее частой дискретизации

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

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

-Adam

+0

Возможно ли использовать акселерометр? – ccook

+0

Я включил акселерометр с тройной осью на доске. Кстати, он также включает датчик давления, датчик освещенности, обнаружение дверного переключателя, GPS и камеру. Хотя эти варианты доступны, в идеале дизайн потребует только микрофон для обнаружения закрытия двери. –

+0

просто случайная мысль - если она почти всегда зажимается, когда она закрывается - почему бы просто не обнаружить клип? – aronchick

ответ

26

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

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

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

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

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

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

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

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

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

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

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

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

+0

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

1

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

3

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

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

8

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

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

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

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

+1

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

+1

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

+0

Я склонен соглашаться, но это не мешало мне предлагать способ сделать это алгоритмически .... :) +1 –

5

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

UPDATE

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

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

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

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

Удачи вам!

+0

+1 звуки (хех), как хорошее приложение – ccook

4

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

Отличительный шип, который вы видите в форме волны выше, называется переходным, и есть несколько хороших алгоритмов для его обнаружения. В документе Transient detection and classification in energy matters описаны 3 метода для этого.

0

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

+0

Также называется скоростью Найквиста - скоростью, с которой должна выполняться выборка, чтобы избежать наложения псевдослучайных данных в заданной непрерывной дискретной конверсии http://en.wikipedia.org/wiki/Nyquist_rate. –

0

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

+0

Да, я показал здесь очень простые случаи. Реальность гораздо более суровая - с радио и нагревом/AC на высокой, тогда я получаю разумные результаты, но я также получаю несколько ложных срабатываний с только обнаружением пика RMS. –

 Смежные вопросы

  • Нет связанных вопросов^_^