如何实现均衡器

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

equalizer.eqAudio(audiosamples, band, gain) 

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

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

我的问题是:

  • 好吧,我是以正确的方式吗?
  • 由于FFT给出了有关频率的数据,我应该将一大块样本传递给FFT算法。 这个块一定要多大?
  • 是否有一本关于DSP编程的好书可以解释均衡器?

谢谢!

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

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

关于均衡器function的实现,将每个通道乘以所需增益。 如果光谱具有镜像部分,也可以反映增益。 如果不这样做,以下IFFT的结果将不是实值信号。 乘法后,应用IFFT。

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

问候

我不认为有必要使用FFT进行音频均衡。 我将使用IIR或FIR滤波器实现均衡器。

通常推荐的参考是用于音频EQ双二阶滤波器系数的Cookbook公式 。

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

是否有一本关于DSP编程的好书可以解释均衡器?

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

通过Julius O. Smith III对具有音频应用的数字滤波器的引入可能是另一个有用的参考。 它的数学密集程度更高。

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