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

Используйте литерал regex [MDN] :

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;

Вы делаете две ошибки, когда используете RegExp [MDN] :

  • «Разделители» / не должны быть частью выражения
  • . Если вы определяете выражение как строку, вам нужно избежать обратного слэша, потому что это escape-символ в строках

Кроме того, модификаторы передаются как второй аргумент функции.

Итак, если вы хотите использовать RegExp (который вы не используете в этом случае), эквивалент был бы следующим:

var reg = new RegExp("\\(\\s*([0-9.-]+)\\s*,\\s([0-9.-]+)\\s*\\)", "g");

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


Я всегда нахожу его полезно скопировать и пропустить выражение RegExp в консоли и посмотреть его вывод. Принимая ваше исходное выражение, получаем:

/(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g

, что означает, что выражения пытаются сопоставить /, s и g буквально, а parens () по-прежнему рассматриваются как специальные символы .


Обновление: .match() возвращает массив:

["(25.774252, -80.190262)", "(18.466465, -66.118292)", ... ]

, который, кажется, не очень полезен.

Вы должны использовать .exec() [MDN] для извлечения чисел:

["(25.774252, -80.190262)", "25.774252", "-80.190262"]

Это нужно вызывать до тех пор, пока все строки не будут обрабатывается.

Пример:

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
var result, points = [];

while((result = reg.exec(polygons)) !== null) {
    points.push([+result[1], +result[2]]);
}

Это создает массив массивов, а унарный плюс (+) преобразует строки в числа:

[
    [25.774252, -80.190262], 
    [18.466465, -66.118292], 
    ...
]

Конечно, если вы хотите, чтобы значения как строки, а не как числа, вы можете просто опустить +.

41
задан Community 8 February 2017 в 14:09
поделиться

9 ответов

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

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

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

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

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

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

27
ответ дан coobird 9 February 2017 в 00:09
поделиться
  • 1
    Это абсолютно задержано. Иногда, Apple так глупа/близорука. – Alex Gray 11 September 2011 в 03:03

Необходимо коснуться в к двери близко переключатели в автомобиле. При попытке сделать это со звуковым анализом - сверхразработка.

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

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

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

8
ответ дан James Caccese 9 February 2017 в 00:09
поделиться
  • 1
    environment.plist, работающий отлично здесь со Львом и it' s все еще ссылаемый в Apple' s документы разработчика: developer.apple.com/library/mac/#documentation/MacOSX/… . I' m всегда очень подозрительный к вещам, предположительно, сказанным " некоторый парень в Apple Support". – mluisbrown 18 October 2011 в 22:40

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

ОБНОВЛЕНИЕ

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

alt text
(источник: charlesrcook.com )

%% 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
ответ дан Glorfindel 9 February 2017 в 00:09
поделиться
  • 1
    Ссылочный документ теперь перечислен как " Retired" на developer.apple.com. – Dorrin 21 September 2013 в 04:41

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

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

4
ответ дан Nick Haddad 9 February 2017 в 00:09
поделиться
  • 1
    Хм, это действительно запускается с трех пробелов? Если так, that' s не правильный: определения XML требуются, чтобы быть в самом начале файла (за исключением возможного BOM). – SamB 5 October 2012 в 05:45

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

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

Удачи!

7
ответ дан Drew Hall 9 February 2017 в 00:09
поделиться
  • 1
    Я подозрителен также, тем более, что люди поддержки даже не знали environment.plist во-первых (следовательно эскалация к старшему advisor' s супервизор). Однако упомянутая выше документация разработчика датирована 2009, и последняя версия XCode, кажется, не включает Редактора Списка свойств приложение больше (хотя я действительно находил тот в своей старой папке инструментов разработчика). Если it' s работающий над Вашей системой, можно ли сказать мне, что полномочия находятся на ней? Мои -rw-r--r--@, и файл принадлежит моему пользователю и группе (как в, группа, имя которой является моим именем пользователя), – sworisbreathing 25 October 2011 в 03:20

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

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

3
ответ дан Turnkey 9 February 2017 в 00:09
поделиться
  • 1
    That' s относящийся к тем переменным среды, которые динамический загрузчик использует, не ко всем переменным среды. Они, вероятно, изменили динамический загрузчик для создания его тяжелее для спуфинга его в загрузку произвольного кода, который мог быть вредоносным кодом в процессы. –  30 November 2012 в 07:58

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

0
ответ дан Szundi 9 February 2017 в 00:09
поделиться

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

0
ответ дан barrowc 9 February 2017 в 00:09
поделиться
  • 1
    Ни одно из этого не работает. В моей системе, по крайней мере. – Michael Irwin 21 January 2012 в 05:38

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

0
ответ дан Mark Heath 9 February 2017 в 00:09
поделиться
  • 1
    Спасибо. У меня есть это dll, на который ссылаются, но изо всех сил пытаюсь понять то, что я должен использовать для замены " ObserveOn" метод в запросе выше к. Я могу сослаться на DispatcherScheduler, но он имеет, не Подписывают метод на нем для вызова. – irascian 26 June 2011 в 20:10
Другие вопросы по тегам:

Похожие вопросы: