【问题标题】:How to implement an Equalizer如何实现均衡器
【发布时间】:2012-12-25 12:04:02
【问题描述】:

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

equalizer.eqAudio(audiosamples, band, gain)

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

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

我的问题是:

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

谢谢!

【问题讨论】:

    标签: java signal-processing fft equalizer


    【解决方案1】:

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

    通常推荐的参考是Cookbook Formulae for Audio EQ Biquad Filter Coefficients

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

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

    Understanding Digital Signal Processing 很好地介绍了 DSP。有关于 FIR 和 IIR 滤波器的章节。

    Intoduction To Digital Filters with Audio Applications,作者 Julius O. Smith III。

    Graphic Equalizer Design Using Higher-Order Recursive Filters 由 Martin Holters 和 Udo Zolzer 撰写,是一篇简短的论文,详细介绍了一种 EQ 滤波器设计方法。

    【讨论】:

      【解决方案2】:

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

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

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

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

      问候

      【讨论】:

        猜你喜欢
        • 2017-09-05
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        相关资源
        最近更新 更多