如何实现均衡器

Adr*_*rez 8 java signal-processing fft equalizer

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

equalizer.eqAudio(audiosamples, band, gain)
Run Code Online (Sandbox Code Playgroud)

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

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

我的问题是:

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

谢谢!

Sha*_*ews 14

我不认为有必要使用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滤波器设计方法.


Kla*_*CPH 12

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

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

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

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

问候