Tag: 互相关

使用卷积在连续的声音流中查找参考音频样本

在我之前关于在更大的音频样本中找到参考音频样本的问题中,有人建议我应该使用卷积。 使用DSPUtil ,我能够做到这一点。 我玩了一下,尝试了不同的音频样本组合,看看结果是什么。 为了可视化数据,我只是将原始音频作为数字转储到Excel并使用这些数字创建了一个图表。 一个高峰是可见的,但我真的不知道这对我有什么帮助。 我有这些问题: 我不知道,如何从峰值位置推断原始音频样本中匹配的起始位置。 我不知道,我应该如何应用连续的音频流,所以一旦参考音频采样发生,我就能做出反应。 我不明白,为什么图片2和图片4(见下文)差别如此之大,尽管两者都代表了与自身卷积的音频样本…… 任何帮助都非常感谢。 以下图片是使用Excel进行分析的结果: 一个较长的音频样本,附近有参考音频(哔哔声): http : //img801.imageshack.us/img801/976/values1.png 哔哔声与自己融为一体: http : //img96.imageshack.us/img96/6720/values2i.png 没有哔哔声的较长音频样本与哔哔声融为一体: http : //img845.imageshack.us/img845/1091/values3.png 第3点的较长音频样本与其自身融合: http : //img38.imageshack.us/img38/1272/values4.png 更新和解决方案: 感谢Han的广泛帮助,我实现了我的目标。 在我没有FFT的情况下完成了自己的慢速实现之后,我发现alglib提供了快速实现。 我的问题有一个基本假设:其中一个音频样本完全包含在另一个中。 因此,以下代码返回两个音频样本中较大者中的样本中的偏移量以及该偏移量处的归一化互相关值。 1表示完全相关,0表示根本不相关,-1表示完全负相关: private void CalcCrossCorrelation(IEnumerable data1, IEnumerable data2, out int offset, out double maximumNormalizedCrossCorrelation) { var data1Array = data1.ToArray(); var data2Array = data2.ToArray(); […]