Как контролировать микрофон на предмет шумового звука?

Я пытаюсь найти алгоритм для обнаружения, когда пользователь дует в микрофон (например, Ninentdo DS или iPhone) на устройстве WM6 с C #.

Я думал использовать Waveform для считывания с микрофона в реальном времени в небольшой буфер, но я немного не понимаю, как распознать дующий звук, я думаю, это звучит как белый шум. Кто-нибудь знает, как это сделать?

Любая помощь будет оценена.


person Federico    schedule 07.01.2009    source источник
comment
шум звук ... кажется неудобным сочетанием.   -  person mmcdole    schedule 14.02.2009
comment
Вас волнует, что звук дует, а не что-то громкое? Проблема становится намного проще, если вам все равно, что такое звук.   -  person Steve Rowe    schedule 14.02.2009


Ответы (5)


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

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

person ctacke    schedule 07.01.2009
comment
На самом деле у нас есть две разные реализации, которые я реализовал много лет назад (вероятно, в версии 1.2 или около того). - person ctacke; 08.01.2009
comment
Я думаю, что шум (по крайней мере, белый шум, который должен производить удар в микрофон) по определению представляет собой смесь всех частот; преобладающая частота будет означать высоту звука, которая сделает звук не шумом - person Steven A. Lowe; 14.02.2009
comment
Разные микрофоны будут генерировать разную частотную характеристику. Я думаю, что попытка обнаружить это в частотной области будет слишком сложной задачей для алгоритма ... работающего в некоторых случаях, но неуспешного в других. - person Nik Reiman; 14.02.2009

Удар в микрофон не обязательно покажет доминирующие частоты в верхнем диапазоне (10,00 Гц +). Воздух в микрофон ПК, скорее всего, вызовет статическое состояние и искажение сигнала, который также имеет много низких частот. Результирующий сигнал будет просто большим всплеском насыщения.

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

person sthg    schedule 08.01.2009
comment
Значение 10 000 Гц было чистой догадкой - я никогда не смотрел записи удара. Ваше упоминание об искажении только что дало мне идею для другого ответа. - person MusiGenesis; 08.01.2009

В ответе sthg искажение упоминается как вероятный результат удара в микрофон. Я только что провел быстрый тест, и моя запись выдувания (на дешевом микрофоне) показала большое количество образцов при минимальных и максимальных значениях (например, 32767 и -32768 в файле WAV с 16 битами на образец), что похоже, что на каждую из вершин нанесена плоская вершина. Очень простой способ обнаружить дующий звук может заключаться в том, чтобы просто подсчитать все сэмплы, которые имеют минимальные / максимальные значения, и если они составляют более 5% от общего количества (или какой-либо другой порог), предположить, что дует ветер.

person MusiGenesis    schedule 08.01.2009
comment
Просто, эффективно, быстро ... Думаю, я бы пошел именно так (хотя это не так весело, как скользящее БПФ). - person ctacke; 08.01.2009
comment
Спасибо. Я надеялся, что кто-нибудь уловит юмор в фразе «Предположим, что идет дуть». :) - person MusiGenesis; 08.01.2009

Это не совсем то же самое, но вот мой ответ на вопрос об обнаружении начала заметки:

Обнаружение начала

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

Вы можете использовать БПФ, но я думаю, что это будет слишком медленно для использования в реальном времени, особенно на устройстве Windows Mobile (хотя это может быть достаточно быстрым). Однако маловероятно, что дующий шум будет иметь доминирующую частоту, если только воздуходувка не насвистывает конкретную ноту. Если БПФ достаточно быстрое, вы можете действительно захотеть искать шумы, которые не имеют доминирующей частоты (вы могли бы предположить, что что-то с доминирующей частотой или частотами было речью или каким-либо инструментом) и которые сильно взвешены. ближе к верхнему пределу слышимого диапазона (выше 10 000 Гц или около того).

person MusiGenesis    schedule 08.01.2009
comment
Поверю на слово по доминирующим частотам. Вся моя работа с БПФ была связана с сейсмическим анализом. Что я знаю, так это то, что явно зашумленные формы волны часто показывают пару доминирующих всплесков из-за собственных частот. Я предположил (вероятно, ошибочно), что вы видите подобное в белом шуме. - person ctacke; 08.01.2009
comment
Я думаю, что белый шум сам по себе показывает одинаковую интенсивность на всех частотах (хотя это может быть розовый шум - уже поздно, и я слишком устал, чтобы гуглить). Однако я не думаю, что на самом деле удар был бы белым шумом. - person MusiGenesis; 08.01.2009

Я не смотрел на спектр этого, но думаю, вы должны увидеть спектр шума с ограниченной полосой с большей энергией ниже нескольких сотен Гц. Это означает, что вам не нужен БПФ с полной полосой пропускания звука, а 16K точек - это излишне. Даже при 256-точечном БПФ в небольшой полосе пропускания вы сможете отличить шум от звука в микрофоне отдельно от речи.

person stevenvh    schedule 14.02.2009