可以将简单的 IIR 双二阶滤波器用作广播 FM 收音机的音频去加重滤波器吗?如果是这样,在给定典型音频采样率的情况下,如何将滤波器要求(在美国为 50 uS 时间常数?)转换为常见(例如 RBJ 的)双二阶食谱算法之一的参数?低搁架滤波器的公式是否合适?
用于广播 FM 去加重的 Biquad 食谱公式?
信息处理
过滤器设计
双二阶
调频
2022-02-08 18:38:35
1个回答
您还可以通过使用其他一些 TF 来实现一个二阶 IIR 滤波器,该滤波器具有一阶滤波器的响应,但在 RBJ 的食谱中使用了一个。这是使用 MZT (C++) 的一种方法。
double Fs = 44100; // higher sample rate results better filter accuracy
double T1 = 0.000075; // time constant
double p1 = -exp(-1.0/(Fs*T1));
double z1 = 1 + z1;
a0 = 1.0;
a1 = p1;
a2 = 0;
b0 = 1.0;
b1 = z1;
b2 = 0;
% swap between a1, b1 to select pre- or de-emphasis
上述计算中的系数增加了 +13.63dB 增益,因此您需要在使用前进行归一化。
与 Octave 代码相同:
% PACKAGES
pkg load control
pkg load signal
clear all;
clc;
fs = 44100;
samplingtime = 1/fs;
% analog prototype
A2 = [1];
B2 = [0.000075 1];
Ds = tf(B2, A2); % swap between A2 and B2 to select pre- or de-emphasis
Ds = Ds/dcgain(Ds);
% MZT
T1 = 0.000075; % 75us
z1 = -exp(-1.0/(fs*T1));
p1 = 1+z1;
a0 = 1.0;
a1 = p1;
a2 = 0;
b0 = 1.0;
b1 = z1;
b2 = 0;
% swap between a1, b1 to select pre- or de-emphasis
Bmzt = [b0 a1 b2]
Amzt = [a0 b1 a2]
DzMZT = tf(Amzt, Bmzt, samplingtime);
DzMZT = DzMZT/dcgain(DzMZT);
%% Plot
wmin = 2 * pi * 20.0; % 20Hz
wmax = 2 * pi * ((fs/2.0) - (fs/2 - 20000)); 20kHz
figure(1);
bode(Ds, 'b', DzMZT, 'c', {wmin, wmax});
legend('Analog prototype', 'MZT 2nd order','location', 'northwest');
grid on;
很少有其他方法可以像这里提到的那样计算系数。
如果您不想编码,那么这里是最常见 Fs 的 (75us) IIR 系数:
44100
den = [ 1 -0.2430506562509079 -0.3653116688328392 ]
num = [ 0.226236781592716 0.1524695626369773 0.01293133068655965 ]
48000
den = [ 1 -0.2625656192085276 -0.3736509425970024 ]
num = [ 0.2102915623850396 0.1415200473180778 0.01197182849135262 ]
88200
den = [ 1 -0.3702185951814965 -0.419953874650389 ]
num = [ 0.1217100727211314 0.08132561501764404 0.006791842429339071 ]
96000
den = [ 1 -0.3813262768034237 -0.424764645791489 ]
num = [ 0.1125121591800709 0.07513002079134688 0.006266897433669414 ]
176400
den = [ 1 -0.4405600251706213 -0.4505357896180226 ]
num = [ 0.06328932872397297 0.04212236025403318 0.003492496233349943 ]
192000
den = [ 1 -0.4464885169088165 -0.4531262255096845 ]
num = [ 0.05834721577148291 0.03882109525679095 0.003216946553225094 ]
352800
den = [ 1 -0.4775710488916642 -0.4667412351991018 ]
num = [ 0.03239176683609103 0.02151798489625147 0.001777964176891494 ]
384000
den = [ 1 -0.4806342452619782 -0.4680860610215655 ]
num = [ 0.02982988806358219 0.01981315821469544 0.00163664743817871 ]
幅度误差小于 0.1 dB (20Hz-20kHz)
其它你可能感兴趣的问题