鉴于从麦克风捕获的两个字节数据阵列,我如何确定哪个数据的噪声更多?我假设有一个算法我可以应用于数据,但我不知道从哪里开始。
归结起来,我需要能够确定婴儿何时哭泣,以及房间内的环境噪音。
如果有帮助,我使用Microsoft.Xna.Framework.Audio.Microphone类来捕获声音。
答案 0 :(得分:4)
您可以通过应用公式将每个样本(标准化范围为1.0到-1.0)转换为分贝评级
dB = 20 * log-base-10(样本值)
老实说,只要你不介意偶尔的假阳性,并且你的麦克风设置好了,你应该没有问题,告诉婴儿哭闹和环境背景噪音之间的区别,而不必经历麻烦进行FFT。
我建议您查看一个噪声门的源代码,它可以完成你所追求的,可配置的攻击时间和时间。阈值。
答案 1 :(得分:2)
首先使用快速傅里叶变换将信号转换为频域。 然后检查典型“哭频”中的信号是否明显高于其他振幅。
speex编解码器的预处理器支持噪声与信号检测,但我不知道你是否可以使用XNA。
或者,如果您真的想要某种响度,请计算您感兴趣的频率(例如50-20000Hz)的幅度平方和,以及过去30秒内的平均值是否显着高于过去10分钟或超过一定绝对阈值的平均值发出警报。
答案 2 :(得分:0)
大声点什么?信号的平均幅度会告诉你哪一个平均平均,但这是一种愚蠢,蛮力的方式。它虽然可能对你有用。
归结起来,我需要能够确定婴儿何时哭泣,以及房间内的环境噪音。
好的,所以,我只是在这里抛出想法;我绝不是音频处理方面的专家。
如果你知道你的输入,即婴儿哭(相对较大的高音)与环境噪音(相对安静),你应该能够根据音高(频率)和幅度(响度)分析信号。当然,如果他在录制期间有人将一些锅碗瓢盆放到厨房地板上,那将很难辨别。
作为第一遍,我将简单地遍历信号,保持音高和幅度的标准偏差,然后在这些偏差超过某个您必须定义的阈值时设置一个标志。当他们回来时你可以安全地认为你抓住了婴儿的哭声。
再一次,在这里给你一个想法。您必须看到它在实践中如何与实际数据一起使用。
答案 3 :(得分:0)
我同意@Ed Swangren,很多资源的数据样本需要花费很多时间。对我来说,听起来好像是限制或希望消除误报。我对婴儿的体验是,他们比环境更响亮地哭泣。因此,跟踪正常环境的平均测量值(频率/安培/ ??),然后分类变化与哭泣婴儿的特征相匹配的程度,这些特征从孩子到孩子都会发生变化,因此您可能需要一个系统“学习”。祝你好运。
更新:您可能会发现此库有用http://naudio.codeplex.com/