上课做的MATLAB滤波器仿真

今天上数字信号处理的实验。。。做滤波器仿真,放上来玩玩:

Code:
  1. %模拟巴特沃斯低通滤波器设计
  2. clear;closeall
  3. fp=500;fs=750;Ap=3;As=15;%输入滤波器指标
  4. [N,fc]=buttord(fp,fs,Ap,As,'s')%计算阶数N和3dB截止频率fc
  5. [B,A]=butter(N,fc,'s');%设计低通巴特沃斯模拟滤波器
  6. [hf,f]=freqs(B,A,1024);%计算模拟滤波器频率响应,freqs为工具函数
  7. subplot(1,3,1);
  8. plot(f,20*log10(abs(hf)/abs(hf(1))))
  9. title('模拟巴特沃斯滤波器');
  10. grid;
  11. xlabel('f/Hz');
  12. ylabel('幅度(dB)');
  13. axis([0,4000,-40,5]);
  14. %以上为模拟滤波器特性
  15. %转换为数字滤波器
  16. %脉冲冲击响应变换法
  17. Fs0=[2000];%采样频率
  18. Fs=Fs0(1)%T=0.001s及T=0.002s
  19. [d,c]=impinvar(B,A,Fs)%用impinvar函数实现离散化
  20. wd=[0:512]*pi/512%设定数字归一化频率
  21. hw1=freqz(d,c,wd)%计算数字滤波器频响函数
  22. subplot(1,3,2);
  23. plot(wd/pi,abs(hw1)/abs(hw1(1)));holdon;%画出数字滤波器幅频特性
  24. title('脉冲冲击响应变换法');
  25. grid;xlabel('f/Hz');
  26. text(0.5,0.74,'T=0.0005s');
  27. %双极性变换法
  28. Fs=Fs0(1)%T=0.001s及T=0.002s
  29. [f,e]=bilinear(B,A,Fs)%用bilinear函数实现离散化
  30. wd=[0:512]*pi/512%设定数字归一化频率
  31. hw2=freqz(f,e,wd)%计算数字滤波器频响函数
  32. subplot(1,3,3);
  33. plot(wd/pi,abs(hw2)/abs(hw2(1)));holdon;%画出数字滤波器幅频特性
  34. title('双极性变换法');
  35. grid;xlabel('f/Hz');
  36. text(0.5,0.74,'T=0.0005s');

结果如下:

大致这里有几个函数需要注意一下用法:

%巴特沃斯

[B,A]=butter(N,fc,'s');% BUTTER Butterworth digital and analog filter design.

%其中三个参数为,N为滤波器结束,fc为截止频率,s为拉普拉斯算子

%脉冲冲击响应变换法

[d,c]=impinvar(B,A,Fs);%IMPINVAR Impulse invariance method for analog to digital filter conversion.

%这里的B为方程的上半部分,A为方程的下半部分,FS为采样频率

%双极性变换法

[f,e]=bilinear(B,A,Fs);%BILINEAR Bilinear transformation with optional frequency prewarping.

%这里的B为方程的上半部分,A为方程的下半部分,FS为采样频率

OK,就能按照巴特沃斯滤波器的方式去设计简单的数字滤波器了,MATLAB可以直接生成JAVA&C/C++代码,实现还是挺简单的

你可能感兴趣的:(matlab)