11

我知道有很多关于均衡器的问题,但我没有得到我想要的东西。我想要做的是一个均衡器,用于以如下方式修改音频样本:

equalizer.eqAudio(audiosamples, band, gain)

我不确定这是否是我想要的确切接口,因为在实现它们方面我对 DSP 知之甚少(我使用了过滤器、限制器、压缩器,但没有制作它们)。

所以谷歌搜索我读到我必须对样本进行 FFT,所以我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行 FFT 的倒数,所以我再次得到音频样本的结果. 我寻找了这个 FFT 的实现并找到了 JTransform for Java。这个库有一个 FFT 相关算法的实现,称为离散余弦变换 (DCT)。

我的问题是:

  • 好吧,我走对了吗?
  • 由于 FFT 为我提供了有关频率的数据,因此我应该向 FFT 算法传递大量样本。这个块必须有多大?
  • 有没有解释均衡器的 DSP 编程的好书?

谢谢!

4

2 回答 2

18

FFT 不是我音频均衡的首选。我会默认使用 IIR 或 FIR 滤波器构建 EQ。FFT 在特殊情况下可能有用。

一个普遍推荐的参考是Audio EQ Biquad Filter Coefficients Cookbook Formulas

用于编程双二阶滤波器的 Java 教程。http://arachnoid.com/BiQuadDesigner/index.html

有没有解释均衡器的 DSP 编程的好书?

了解数字信号处理是对 DSP 的一个很好的介绍。有关于 FIR 和 IIR 滤波器的章节。

Julius O. Smith III的音频应用数字滤波器简介。

Martin Holters 和 Udo Zolzer 撰写的使用高阶递归滤波器的图形均衡器设计是一篇简短的论文,详细介绍了一种 EQ 滤波器设计方法。

于 2013-01-11T01:28:58.713 回答
16

获得均衡器的方法有很多种,正如 Shannon 所解释的,IIR/FIR 滤波器方法就是其中之一。但是,如果您的目标是快速启动并运行均衡器,那么采用 FFT 方式可能对您来说更容易,因为存在大量参考实现。

至于您的 FFT 大小问题,这取决于您希望均衡器具有什么频率分辨率。如果您选择 16 的大小,您将在频域中获得 9 个(8 个复数 + 1 个实数)通道,从 0 到 fs/2 等距。第一个以 0Hz 为中心,第 9 个以 fs/2 Hz 为中心。请注意,一些实现返回 16 个通道,其中高部分是低部分的镜像和复杂共轭版本。

至于均衡器功能的实现,请将每个通道与所需增益相乘。如果光谱有镜像部分,那么也要镜像增益。如果不这样做,接下来的 IFFT 的结果将不是实值信号。乘法后,应用 IFFT。

关于 FFT 和基于滤波器的均衡器之间的区别,请记住,FFT 只是一种快速计算一组 FIR 滤波器的方法,其中正弦作为脉冲、临界采样(使用滤波器长度进行下采样)和均匀间隔的中心频率。

问候

于 2013-01-11T18:33:11.060 回答