简单的音频滤波器组

时间:2011-05-05 17:00:04

标签: audio signal-processing

我是音频滤镜的新手所以请原谅我,如果我说错了。

我喜欢编写一个代码,可以将存储在PCM样本中的音频分成两个或三个频段,并进行一些操作(如修改音频电平)或对它们进行分析,然后从输出中重建音频样本。

就我在互联网上阅读此任务而言,我可以使用FFT-IFFT并对复杂形式进行操作或使用基于时域的滤波器组,例如MP2音频编码格式使用的滤波器组。也许过滤器库是一个更好的选择,至少我读到某个地方它可以在实时流媒体环境中更多的CPU使用友好。然而,我很难理解滤波器组背后的数学东西。我试图找到关于这个主题的一些源代码(最好用Java或C / C ++),到目前为止还没有成功。

有人可以向我提供提示或链接,让我更接近示例过滤器库吗?

3 个答案:

答案 0 :(得分:7)

使用FFT将音频信号分成几个频段是过度的。

您需要的是一个或两个Linkwitz-Riley过滤器。这些滤波器将信号分成高频和低频部分。

这个过滤器的一个很好的属性是,如果你添加低频和高频部分,你几乎可以得到原始信号。会有一点点相移,但耳朵听不到这一点。

如果您需要两个以上的乐队,您可以链接过滤器。例如,如果你想在100和2000Hz分离信号,那么伪代码就像这样:

low  = linkwitz-riley-low (100, input-samples)
temp = linkwitz-riley-high (100, input-samples)

mids = linkwitz-riley-low (2000, temp)
highs = linkwitz-riley-high (2000, temp);

依旧......

分割信号后,您可以放大三个输出频段:低频,中频和高频,然后将它们加在一起以获得处理后的信号。

过滤器部分本身可以使用IIR过滤器实现。谷歌搜索“Linkwitz-Riley数字IIR”应该会有很多好的点击。

http://en.wikipedia.org/wiki/Linkwitz-Riley_filter

答案 1 :(得分:4)

你应该查找小波,尤其是Daubechies小波。他们会让你做到这一点,他们是FIR过滤器,他们真的很短。

<强>更新 没有解释的贬低并不酷。另外,我是对的。小波是滤波器组,它们的工作就是准确地完成问题中描述的内容。恕我直言,就是这样。我自己做了很多次。

答案 2 :(得分:3)

有很多过滤器源代码可供here

找到