在音频信号处理中使用去卷积进行峰值分离

时间:2013-07-24 19:30:10

标签: signal-processing convolution audio-processing

我正在尝试开发一种算法来分离音乐文件中的乐器音符。使用C#,C ++ DLL。我花了很长时间才实现它。所以我到目前为止所做的是:

  1. 在PCM上执行专门的FFT(它在时域和频域都提供高分辨率)
  2. FFT bin上的滤波器组计算模拟人类听觉系统(心理声学模型)
  3. 带有峰值检测的模式识别,为某些机器学习内容(当前计划级别)提供输入数据
  4. 在目前的进展中,我用简单的方法“拾取局部最大值”来检测峰值。粗略地,如果f(x-1)

    但我在这里遇到了一些问题。如果在频域中存在两个或更多信号,则该方法仅检测一个峰值并且隐藏所有其他峰值。我在网上搜索了几天。有一种叫做“峰值纯度”,“峰值分离”的东西。为了进行峰分离,有几种方法。它们实际上很好地分离了峰值。这是我用Google搜索的几张图片。

    separation1 http://www.chromatography-online.org/quant/qca_files/image057.gif

    separation2

    我认为使用'deconvolution'的方法对于这种情况最好。但我不知道如何去卷积我的光谱,用去卷积分离峰。据我所知,反卷积不会给我多个峰值成分,如上图所示。我应该使用哪些过滤功能?由于我缺乏数学技能,我需要伪代码级帮助。很高兴看到任何其他建议:)

1 个答案:

答案 0 :(得分:2)

为了检测峰值,您可以依靠贝叶斯方法。

每个峰值P_i都可以使用高斯函数建模,其特征在于其均值m_i及其偏差sigma_i

F(x) ~ Sum_i {  1 / sigma_i / sqrt(2Pi) * exp(-(x - m_i)^2 / sigma_i^2) }

对于某些F(x_j),您拥有的是x_j。你想要的是每个(x_i, m_i)的{​​{1}},它可以最小化最小平方距离:

i

这种方程可以用非线性最小二乘解算器求解。

干杯