如何比较两个捕获以查看哪个更响亮?

给定从麦克风捕获的两个字节数据arrays,如何确定哪个数据中的噪声峰值更多? 我假设有一个算法我可以应用于数据,但我不知道从哪里开始。

说到这一点,我需要能够确定婴儿哭闹的时间与房间内的环境噪音。

如果它有帮助,我使用Microsoft.Xna.Framework.Audio.Microphone类来捕获声音。

您可以通过应用公式将每个样本(标准化范围为1.0到-1.0)转换为分贝评级

dB = 20 * log-base-10(样本值)

说实话,只要你不介意偶尔的假阳性,并且你的麦克风设置好了,你应该没有问题,告诉婴儿哭声和周围背景噪音的区别,而不用经历麻烦FFT。

我建议你看一下噪声门的源代码,它可以完成你所追求的,具有可配置的攻击时间和阈值。

首先使用快速傅里叶变换将信号转换为频域。 然后检查典型“哭频”中的信号是否明显高于其他振幅。

speex编解码器的预处理器支持噪声与信号检测,但我不知道你是否可以使用XNA。

或者,如果你真的想要某种响度来计算你感兴趣的频率(例如50-20000Hz)的幅度平方和,以及过去30秒内的平均值是否显着高于平均值最后10分钟或超过一定的绝对阈值发出警报。

大声点什么? 信号的平均幅度将告诉你哪一个平均响亮,但这是一种愚蠢,蛮力的方式。 它虽然可能对你有用。

说到这一点,我需要能够确定婴儿哭闹的时间与房间内的环境噪音。

好的,所以,我只是在这里抛出想法; 我绝不是音频处理方面的专家。

如果您知道您的输入,即婴儿哭(相对较大的高音)与环境噪音(相对安静),您应该能够根据音高(频率)和幅度(响度)分析信号。 当然,如果在他录制期间有人将一些锅碗瓢盆放到厨房地板上,那将很难辨别。

作为第一遍,我将简单地遍历信号,始终保持音高和幅度的标准偏差,然后在这些偏差超过您必须定义的某个阈值时设置标志。 当他们回来时你可以安全地认为你抓住了婴儿的哭声。

再一次,在这里给你一个想法。 您将不得不看到它在实践中如何与实际数据一起工作。

我同意@Ed Swangren的说法,很多资源的数据样本需要花很多时间才能完成。 对我来说,听起来好像是限制或希望消除误报。 我对婴儿的经历是,他们比环境更响亮。 因此,跟踪正常环境的平均测量值(频率/安培/ ??),然后分类变化与哭泣婴儿的特征相匹配的程度,这种特征从孩子到孩子都在变化,所以你可能想要一个系统“学习”。 祝你好运。

更新:你可能会发现这个库很有用http://naudio.codeplex.com/