已知一个模拟滤波器系统,要将此模拟滤波器系统转换成为数字滤波器,方法会有很多种,在Matlab中也有专门的函数(impinvar)来实现此功能,如果我们要自己编写算法来做这个过程的话可以考虑使用脉冲响应不变法来实现跟impinvar函数相同的效果。
1】对模拟滤波器进行拉普拉斯逆变换
理论依据是:对传输系统的单位冲击响应求拉普拉斯变换得到的结果就是传输系统的传输函数,因此对传输函数进行拉普拉斯逆变换就是传输系统的单位冲击响应。
2】对单位冲击响应进行采样*时间间隔T,得到等价的脉冲响应序列
理论依据&目的:使用 数字滤波器的响应序列 模仿 模拟滤波器的脉冲响应
3】对得到的数字滤波器脉冲响应序列进行Z变换,得到数字滤波器
理论依据:Z变换就是离散时间信号的拉普拉斯变换,相应目的见第一条
参考网络上脉冲时不变响应法设计IIR滤波器的matlab程序如下:
clear all; clc; close all;
bs=[1,1];as=[1,5,6]; % 系统分子分母系数向量
Fs=10; T=1/Fs; % 采样频率和采样间隔
[Ra,pa,ha]=residue(bs, as); % 将模拟滤波器系数向量变为模拟极点和留数
pd=exp(pa*T); % 将模拟极点变为数字(z平面)极点pd
[bd,ad]=residuez(T*Ra, pd, ha); % 用原留数Ra和数字极点pd求得数字滤波器系数
t=0:0.1:3; % 时间序列
ha=impulse(bs,as,t); % 计算模拟系统的脉冲响应
hd=impz(bd,ad,31); % 数字系统的脉冲响应
% 调用impinvar函数计算数字滤波器系数
[Bd,Ad]=impinvar(bs,as,Fs);
fprintf('bd=%5.4f %5.4f ad=%5.4f %5.4f %5.4f\n\n',bd,ad);
fprintf('Bd=%5.4f %5.4f Ad=%5.4f %5.4f %5.4f\n',Bd,Ad);
% 作图
plot(t,ha*T,'r','linewidth',3); hold on; grid on