📄 bilinear0.m
字号:
function [bd,ad] = bilinear0(ba,aa,Fs)
%《数字信号处理教程——MATLAB释义与实现》
% 双线性系数变换子程序
% 电子工业出版社出版 陈怀琛编著 2004年9月
%
% [bd,ad] = bilinear0(ba,aa,Fs)
% -------------------------------------------------------
% 从s域到z域的双线性频带变换
% 实现:
% b(z) b(s)|
% ---- = ----| 1-z^(-1) Nz(z)
% a(z) a(s)|@s = 2Fs-------- = ------
% 1+z^(-1) Dz(z)
% ba,aa按s的正幂降序排列至常数项结束
% Nz,Dz按z的负幂降序排列,从常数项开始,双线性变换:Nz=2*Fs*[1,-1];Dz=[1,1];
% bd,ad按z的负幂降序排列,从常数项开始
%
% 从常数项开始,把ba,aa按s的负幂降序排列。即将ba,aa中的短者左边补零成同长
lba=length(ba);laa=length(aa);
ld=laa-lba;
if ld>=0 ba=[zeros(1,ld),ba]; % 若aa长度大于ba,給ba前补ld个零
else aa=[zeros(1,-ld),aa]; % 若ba长度大于aa,給aa前补ld个零
end
Nz = 2*Fs*[1,-1]; Dz=[1,1]; % 双线性变换分子分母系数向量
N = max(lba,laa)-1; % 模拟系统阶次N
bd = 0; ad = 0; % bd,ad系数向量初始化
for k = 0:N
pld = [1];pln = [1]; % 双线性变换分子分母系数乘积项初始化
for l = 0:k-1
pld = conv(pld,Dz); % 求双线性变换分母系数k次幂Dz^k
end
for l = 0:N-k-1
pln = conv(pln,Nz); % 求双线性变换分子系数(N-k)次幂Nz^(N-k)
end
bd = bd+ba(k+1)*conv(pln,pld); % 分子系数多项式向量求和
ad = ad+aa(k+1)*conv(pln,pld); % 分母系数多项式向量求和
end
ad1 = ad(1); ad = ad/ad1; bd = bd/ad1; % 用分母系数多项式首项使分子分母系数归一化
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -