|
我在这里介绍的方法是根据从模拟滤波器经激冲不变法,转换成数字滤波器的方法。一般在数字滤波器的设计中,使用激冲不变法时是先已知模拟滤波器的传递函数的系数,也就是在S函数中的系数,经转变得到Z函数中的系数,即IIR数字滤波器的系数。
为了要进行这样的转换,又要证明这种方法的正确性,我在这帖中先设一个模拟低通滤波器,求出它的传递函数和激冲响应,用模拟滤波器的传递函数经激冲不变法给出数字滤波器的传递函数,即笫I组数字滤波器系数。其程序为:
[b,a]=butter(2,.2,'s'); % 使用Butterworth低通滤波器
sys=tf(b,a);
fprintf('b= %5.6f %5.6f %5.6f\n',b);
fprintf('a= %5.6f %5.6f %5.6f\n',a);
[y,t] = impulse(sys,[0:0.25:40]); % 把滤波器系数转变成激冲响应
t_increment=t(2)-t(1); % 求出采样周期
fs=1/t_increment; % 求出采样频率
plot(t,y,'r','linewidth',2); hold on; % 作出模拟滤波器激冲响应曲线
fprintf('\nFs= %5.6f\n\n',fs);
[bb,aa]=impinvar(b,a,fs); % 经激冲不变法求出数字滤波器系数
fprintf('bb= %5.6f %5.6f %5.6f\n',bb);
fprintf('aa= %5.6f %5.6f %5.6f\n',aa);
[y1,t1]=impz(bb,aa,length(t),fs);
plot(t1,fs*y1); hold off; % 作出数字滤波器激冲响应曲线
grid on;
legend('analog','digital');
用激冲不变法求出的笫I组数字滤波器的系数是
bb= 0.000000 0.002413 0.000000
aa= 1.000000 -1.929318 0.931731
同时我们可以看到经激冲不变法得到的数字滤波器,它的激冲响应和模拟滤波器完全一致。 |
-
激冲响应曲线
|