首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Matlab的FIR滤波器设计与实现(2)

基于Matlab的FIR滤波器设计与实现(2)

方法一:窗函数法

程序如下:
[n,wn,bta,ftype]=kaiserord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用kaiserord函数估计出滤波器阶数n和beta参数
h1=fir1(n,wn,ftype,kaiser(n+1,bta),'noscale');
[hh1,w1]=freqz(h1,1,256);
figure(1)
subplot(2,1,1)
plot(w1/pi,20*log10(abs(hh1)))
grid
xlabel('归一化频率w');ylabel('幅度/db');
subplot(2,1,2)
plot(w1/pi,angle(hh1))
grid
xlabel('归一化频率w');ylabel('相位/rad');


波形如下:



滤波器系数为:
h1 =


  Columns 1 through 8


    0.0041    0.0055   -0.0091   -0.0018   -0.0056   -0.0000    0.0391   -0.0152


  Columns 9 through 16


   -0.0381    0.0077   -0.0293    0.0940    0.0907   -0.2630   -0.0517    0.3500


  Columns 17 through 24


   -0.0517   -0.2630    0.0907    0.0940   -0.0293    0.0077   -0.0381   -0.0152


  Columns 25 through 31


    0.0391   -0.0000   -0.0056   -0.0018   -0.0091    0.0055    0.0041


如果直接用freqz(h1,1,256),得幅频特性和相频特性曲线:


方法二:等波纹法设计
程序如下:
[n,fpts,mag,wt]=remezord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用remezord函数估算出remez函数要用到的阶n、归一化频带边缘矢量fpts、频带内幅值响应矢量mag及加权矢量w,使remez函数设计出的滤波器满足f、a及dev指定的性能要求。
h2=remez(n,fpts,mag,wt);%设计出等波纹滤波器
[hh2,w2]=freqz(h2,1,256);
figure(2)
subplot(2,1,1)
plot(w2/pi,20*log10(abs(hh2)))
grid
xlabel('归一化频率w');ylabel('幅度/db');
subplot(2,1,2)
plot(w2/pi,angle(hh2))
grid
xlabel('归一化频率w');ylabel('相位/rad');
h2



波形如下:
继承事业,薪火相传
返回列表