Matlab提供的bilinear(num, den, Fs)函数可用来实现双线性变换, 其调用形式为
[numd, dend] = bilinear(num, den, Fs);
式中num和den分别表示模拟滤波器系统函数H(s)的分子多项式系数和分母多项式系数, Fs = 1 / T. 输出变量numd和dend分别表示数字滤波器H(z)的分子多项式系数和分母多项式系数.
[程序设计代码]
% 使用CB I型模拟滤波器设计模板和双线性变换法, 设计数字低通滤波器
% 技术指标
Wp = 0.1 * pi;
Ws = 0.4 * pi;
Ap = 1;
As = 25;
% 取 T = 2
T = 2;
% 通过转换得到模拟滤波器的指标
wp = 2 / T * tan(Wp / 2);
ws = 2 / T * tan(Ws / 2);
[N, wc] = cheb1ord(wp, ws, Ap, As, 's');
[num, den] = cheby1(N, Ap, wc, 's');
% 进行双线性变换
[numd, dend] = bilinear(num, den, 1 / T);
% 在[0, 0.5 * pi]区间上选取2000个采样点
W = linspace(0, 0.5 * pi, 2000);
% 求离散系统(所设计数字滤波器)的频率响应
H = freqz(numd, dend, W);
% 绘制系统增益响应曲线
plot(W / pi, 20 * log10(abs(H)));
% 检查所设计滤波器的关键指标是否满足要求
W = [Wp, Ws];
H = freqz(numd, dend, W);
fprintf('Ap = %.4f\n', -20 * log10(abs(H(1))));
fprintf('As = %.4f\n', -20 * log10(abs(H(2