【发布时间】:2010-10-30 21:02:01
【问题描述】:
给定从麦克风捕获的两个字节数组数据,我如何确定哪一个具有更多的噪声尖峰?我会假设有一种算法可以应用于数据,但我不知道从哪里开始。
说到底,我需要能够确定婴儿何时哭泣与房间内的环境噪音。
如果有帮助,我将使用 Microsoft.Xna.Framework.Audio.Microphone 类来捕捉声音。
【问题讨论】:
标签: c# algorithm audio windows-phone-7
给定从麦克风捕获的两个字节数组数据,我如何确定哪一个具有更多的噪声尖峰?我会假设有一种算法可以应用于数据,但我不知道从哪里开始。
说到底,我需要能够确定婴儿何时哭泣与房间内的环境噪音。
如果有帮助,我将使用 Microsoft.Xna.Framework.Audio.Microphone 类来捕捉声音。
【问题讨论】:
标签: c# algorithm audio windows-phone-7
您可以通过应用公式将每个样本(标准化为 1.0 到 -1.0 的范围)转换为分贝等级
dB = 20 * log-base-10(样本值)
说实话,只要您不介意偶尔的误报,并且您的麦克风设置正常,您应该可以轻松分辨婴儿哭声和环境背景噪音之间的区别,而无需费力做 FFT。
我建议您查看噪声门的源代码,它几乎可以满足您的需求,具有可配置的攻击时间和阈值。
【讨论】:
首先使用快速傅里叶变换将信号变换到频域。 然后检查典型“哭泣频率”中的信号是否明显高于其他幅度。
speex 编解码器的预处理器支持噪声与信号检测,但我不知道你是否可以让它与 XNA 一起使用。
或者,如果您真的想要某种响度,请计算您感兴趣的频率(例如 50-20000Hz)的振幅平方和,如果过去 30 秒的平均值明显高于过去 10 分钟的平均值或超过某个绝对阈值会发出警报。
【讨论】:
在什么时候响亮?信号的平均幅度会告诉您平均哪个更大,但这是一种愚蠢的蛮力方式。不过在实践中它可能对你有用。
说到底,我需要能够确定婴儿何时哭泣与房间内的环境噪音。
好的,所以,我只是在这里抛出一些想法;我绝不是音频处理方面的专家。
如果您知道自己的输入,即婴儿哭声(相对响亮,音调较高)与环境噪声(相对安静),您应该能够根据音调(频率)和幅度(响度)分析信号.当然,如果他在录音的过程中,有人把一些锅碗瓢盆掉在了厨房的地板上,那就很难辨别了。
作为第一遍,我将简单地遍历信号,始终保持音高和幅度的标准偏差,然后在这些偏差超出您必须定义的某个阈值时设置一个标志。当他们回来时,您可以安全地假设您捕捉到了婴儿的哭声。
再一次,只是在这里给你一个想法。你必须看看它在实际数据中是如何工作的。
【讨论】:
我同意@Ed Swangren 的观点,需要大量处理大量来源的数据样本。对我来说,这听起来像是限制或希望消除误报的诀窍。我对婴儿的体验是,他们的哭声远比环境大。因此,跟踪正常环境的平均测量值(频率/安培/??),然后对变化与哭泣婴儿的特征进行分类,该特征因孩子而异,因此您可能需要一个系统'学习'。祝你好运。
更新:你可能会发现这个库很有用 http://naudio.codeplex.com/
【讨论】: