我一直在设计和使用 IIR 滤波器来处理音频,但我想设计一些 FIR 滤波器来进行延迟均衡。我使用以下方法做了一些初步工作:
我从所需的“群延迟 EQ”曲线开始。这从零开始,然后在更高(音频)频率处具有增加的延迟。
我使用群延迟的定义通过积分来计算相应的相位滞后。这仍然在音频对数频率网格上。
在下一步中,我将相位插值到将用于离散变换处理的等线性间距频率网格上。这一步我使用了 32768 个样本。
然后我生成这个相位角的复数的实部和虚部,响应的幅度等于 1.0。我确保 H(k) = H*(Nk)。
我采用实部和虚部的逆 DFT 将响应转换到时域。尽管输出产生实部和虚部,但虚部基本上为零。冲动存在于短暂的正负时间(在数据集的开始和结束),但仅跨越整个数据集的约 20%。
我将虚部值全部设置为零。我操纵时域响应的实部(脉冲),将其“向右”移动,以将处于较小负时间(“结束”)的脉冲部分移动到正时间。然后我将一个矩形窗口应用于数据,将窗口外的所有内容设置为零。据我了解,剩余的非零值是 FIR 滤波器系数。
为了找出滤波器响应的样子,我对移位的加窗脉冲执行前向 DFT,以将数据带回频域。然后我计算并绘制滤波器幅度 (SPL)、相位,最后是群延迟。
上述过程似乎给了我想要实现的 FIR 滤波器响应。当我将更少或更多抽头设置为零时,我可以看到频域中的权衡。所以我的方法似乎奏效了。现在开始执行和问题:
因为我是 FIR 滤波的新手,所以我对上面计算的数据采样率和系数数量以及我想要实现 FIR 滤波器时这些因素的影响感到困惑。我可以编写自己的代码,也可以使用一些现有的代码或包来执行过滤器和音频数据流之间的关联。
问题:
A.我在逆 DFT(上面的第 5 步)中使用的 bin 数量将如何影响生成的滤波器?使用更多的 bin 是否有助于适应更清晰的特征,反之亦然?在设计过滤器时通常会优化 bin 的数量以在实现过滤器时保持较低的计算开销?
B.假设采样率为 48kHz,我执行了上述所有步骤。采样率发挥作用的唯一一次是当我为 iDFT 和 DFT 计算计算每个 bin(例如 df)的频率时。给定我最后一组非零滤波器系数(在上面的步骤 6 中获得),滤波器是否简单地(天真地)计算为y(n) = SUM_over_m[h(m)*x(n-m)] 其中“x”是我的音频数据流中以相同 48kHz 采样率的样本?这似乎太容易/简单了......(我知道实际的 FIR 滤波器实现不会以这种方式进行计算,而是会使用 FFT 等)
真正让我困惑的是:可以将任意数量的系数设置为零以近似滤波器,但您可以改变 iDFT/DFT 操作中的 bin 数量(更改分辨率),然后将生成的滤波器截断为相同数量的水龙头。即使它们的数量相同,系数也会不同,并且系数值是“编码”滤波器设计中使用的采样率和选择的分辨率的唯一东西,这是否正确?
请帮助我更清楚地理解这些概念。谢谢!