gpt4 book ai didi

signal-processing - 音频信号处理中的反卷积峰值分离

转载 作者:行者123 更新时间:2023-12-01 02:41:23 26 4
gpt4 key购买 nike

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

  1. 在 PCM 上执行专门的 FFT(它在时域和频域上都提供高分辨率)
  2. FFT bins 的 Filterbank 计算以模拟人类听觉系统(心理声学模型)
  3. 通过峰值检测进行模式识别,为某些机器学习内容提供输入数据(目前正在规划中)

在目前的进展中,我使用简单的方法“选择局部最大值”来检测峰值。粗略地说,如果 f(x-1) < f(x) > f(x+1),则检测为峰值,其中 f(x) 的频率响应,x 是频率索引。

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

separation1
(来源:chromatography-online.org)

separation2

我认为使用“反卷积”的方法最适合这种情况。但我不知道如何去卷积我的光谱,用去卷积分离峰。据我所知,反卷积不会直接给我上面图片中看到的多个峰分量。我应该使用什么过滤功能?由于我缺乏数学技能,我需要伪代码级别的帮助。很高兴看到任何其他建议:)

最佳答案

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

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

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

对于某些 x_j,您拥有的是 F(x_j)。你想要的是每个 i(x_i, m_i),它最小化最小二乘距离:

(x_i, m_i) = argMin(Sum_j {(F(x_j) - Sum_i { 1 / sigma_i / sqrt(2Pi) * exp(-(x - m_i)^2 / sigma_i^2) })^2 })

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

干杯

关于signal-processing - 音频信号处理中的反卷积峰值分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com