如何计算预加重效应的部分(1%、10%)应用的双二阶系数

信息处理 双二阶
2022-02-20 13:30:54

我正在使用sox来模拟​​ RIAA 对音频文件的预加重和去加重效果。对于预加重,我这样称呼它:

sox --plot octave in.wav out_biquad.wav biquad 1 -1.700724 0.7029382 0.2380952 -0.1718791 -0.0442981

双二阶系数取自http://jiiteepee.tripod.com/de-pre-emphasis.html如果我只想部分应用预加重,我想知道是否有任何简单的方法来计算双二阶系数 - 在 0%(无预加重)到 100%(完全预加重)的范围内。

0% 的情况似乎很简单,系数1 0 0 1 0 0就可以了。但我不确定如何计算 zero_filter + float_fraction * full_filter 组合的二阶系数。

2个回答

所以,sox 定义了它的biquad操作参数如下:

biquad b0 b1 b2 a0 a1 a2

应用具有给定系数的双二阶 IIR 滤波器。其中 b* 和 a* 分别是分子和分母系数。

请参阅http://en.wikipedia.org/wiki/Digital_biquad_filter(其中 a0 = 1)。

此效果支持 −−plot 全局选项。

双二阶滤波器只是 IIR 滤波器的一个特例,它是一个线性系统!

这意味着您可以只拥有两个信号流,一个已过滤,一个未过滤,然后将它们相加,由两个常数和的系数缩放。

您唯一需要关心的是延迟,这对于 IIR 的计算有点棘手;现在,幸运的是,RIAA 双二阶保证该滤波器的相位误差在任何给定频率下都低于 30%,因此您可能可以用单样本延迟输入信号求和。

单个样本延迟是具有系数的 FIR 滤波器

b0 = 0, b1 = 1

并且任何 FIR 也都可以理解为 IIR,除了aN==0之外a0=1,由于 IIR 是线性的,因此您可以通过将它们与上述系数相乘并添加1-coefficienta0和来直接修改双二阶的系数b1

我的评论太少了,所以我试着给你至少部分答案。

您不能使用与 a 的相等乘数来更改那些 b 系数。由于这些最终系数来自转换,因此您在该过程中可能会丢失一些比率。在下面基于 MZT 的示例中,您可以从方程式中获得最终系数

b1 = -(pole1 + pole2)
b2 = pole1 * pole2

因此,您无法从 b1 或 b2 恢复原始比率 --> 还请记住,当交换 a 和 b 以从去加重滤波器(反之亦然)获得预加重滤波器时,您需要使用那些a0 和 b0 = 1.0 的系数(即未标准化为在 1kHz 时为 0dB)。

所以,我建议你在转换之前操纵系数。您将在此处的帖子中找到该过滤器所需的系数。

这是一个基于 MZT 传输的示例(您可以通过我的帖子找到缺失的信息)。

pole1 = 0.99289462847423215
pole2 = 0.73908439754585875
zero1 = 0.93117565229670540
zero2 = 0.0;

要在 20Hz-20kHz 范围内获得平坦响应,请将pole1 的值减小到大约 0.93289462847523175,将pole2 的值减小到 0.0。在这个例子中 zero1 和 zero2 保持不变。注意:这些不是确切的值,特别是对于我或 Orban 帖子中的那些系数,但你明白了。

朱哈