Как сравнить два снимка, чтобы увидеть, какой из них громче? - PullRequest
2 голосов
/ 31 октября 2010

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

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

Если это поможет, я использую класс Microsoft.Xna.Framework.Audio.Microphone для захвата звука.

Ответы [ 4 ]

4 голосов
/ 31 октября 2010

Вы можете преобразовать каждую выборку (нормализованную в диапазоне от 1,0 до -1,0) в значение в децибелах, применив формулу

дБ = 20 * log-base-10 (sample-value)

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

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

2 голосов
/ 31 октября 2010

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

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

Или, если вы действительно хотите какую-то громкость, вычислите сумму квадратов амплитуд от интересующих вас частот (например, 50-20000 Гц) и, если среднее значение этого значения запоследние 30 секунд значительно выше среднего значения за последние 10 минут или превышают определенный абсолютный порог звукового сигнала тревоги.

0 голосов
/ 31 октября 2010

Я согласен с @Ed Swangren, для многих источников потребуется много игр с образцами данных. Для меня это звучит так, будто хитрость заключается в том, чтобы ограничить или, надеюсь, устранить ложные срабатывания. Мой опыт с младенцами - они намного плач громче, чем окружающая среда. поэтому, отслеживая средние измерения (freq / amp / ??) нормальной среды, а затем классифицируя, насколько эти изменения соответствуют характеристикам плачущего ребенка, который меняется от ребенка к ребенку, вы, вероятно, захотите систему, которая «узнает». Желаем удачи.

обновление: эта библиотека может оказаться полезной http://naudio.codeplex.com/

0 голосов
/ 31 октября 2010

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

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

Хорошо, я просто выкидываю идеи здесь;Я ни в коем случае не эксперт по обработке звука.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...