找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4869|回复: 0
打印 上一主题 下一主题
收起左侧

用频率采样法设计FIR数字滤波器

[复制链接]
跳转到指定楼层
楼主
ID:268646 发表于 2017-12-28 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1)     频率采样法
频率采样法是从频域出发,将给定的理想频率响应Hd(ejw)加以等间隔采样,得到
                              
然后以此Hd(k)作为实际FIR数字滤波器的频率特性的采样值H(k),即令
  
由H(k)通过IDFT可得有限长序列h(n)为
将上式代入到Z变换中可得
  
式中,   为内插函数,有
2)        频率采样法的优化设计
为了提高阻带的衰减,减小通带的波动,可以采用频率采样的优化设计法,即在间断点区间内插一个或几个过渡带采样点。
过渡带采样点的个数m与滤波器阻带最小衰减   的经验数据如下表所示,可以根据给定的阻带最小衰减   来选择过渡带采样点个数m。
增加过渡带采样点可以使通带和阻带内波纹幅度减小。当N确定时,m越大,过渡带越宽。如果给定过渡带宽度   ,滤波器长度N必须满足如下估算公式:
   
二、实验步骤与结果
1、  认真阅读并输入实验原理与方法中介绍的例子,观察输出数据和图形,理解每一条语句的含义。
T=0.38;
datB=pi/16;wc=pi/3;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);title('理想单位脉冲响应');
xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
2、用频率采样法设计一个FIR数字低通滤波器,3dB截止频率wp=0.4p,采样点数分别取N=21和N=16,分别显示理想、实际幅频特性和脉冲响应曲线,观察采样点数对滤波器特性的影响。
wc=0.4*pi;datB=4*pi/21;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);
title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);
title('理想单位脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);
title('实际幅频响应');
clear;
T=0.38;
wc=0.4*pi;
N=21;  
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);axis([0,N+2,-0.2,0.5]);
title('理想单位脉冲响应');xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
wc=0.4*pi;datB=4*pi/61;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);
title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);
title('理想单位脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);
title('实际幅频响应');
3、在第(2)题的要求下。再在过渡带中增加一个采样点T,取值0.38.要求显示幅频特性曲线,观察增加过渡带采样点后对滤波器特性的影响。
程序如下:
T=0.38;
wc=0.4*pi;
N=61;  
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);axis([0,N+2,-0.2,0.5]);
title('理想单位脉冲响应');xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
1)     频率采样法
频率采样法是从频域出发,将给定的理想频率响应Hd(ejw)加以等间隔采样,得到
                              
然后以此Hd(k)作为实际FIR数字滤波器的频率特性的采样值H(k),即令
  
由H(k)通过IDFT可得有限长序列h(n)为
将上式代入到Z变换中可得
  
式中,   为内插函数,有
2)        频率采样法的优化设计
为了提高阻带的衰减,减小通带的波动,可以采用频率采样的优化设计法,即在间断点区间内插一个或几个过渡带采样点。
过渡带采样点的个数m与滤波器阻带最小衰减   的经验数据如下表所示,可以根据给定的阻带最小衰减   来选择过渡带采样点个数m。
增加过渡带采样点可以使通带和阻带内波纹幅度减小。当N确定时,m越大,过渡带越宽。如果给定过渡带宽度   ,滤波器长度N必须满足如下估算公式:
   
二、实验步骤与结果
1、  认真阅读并输入实验原理与方法中介绍的例子,观察输出数据和图形,理解每一条语句的含义。
T=0.38;
datB=pi/16;wc=pi/3;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);title('理想单位脉冲响应');
xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
2、用频率采样法设计一个FIR数字低通滤波器,3dB截止频率wp=0.4p,采样点数分别取N=21和N=16,分别显示理想、实际幅频特性和脉冲响应曲线,观察采样点数对滤波器特性的影响。
wc=0.4*pi;datB=4*pi/21;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);
title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);
title('理想单位脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);
title('实际幅频响应');
clear;
T=0.38;
wc=0.4*pi;
N=21;  
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);axis([0,N+2,-0.2,0.5]);
title('理想单位脉冲响应');xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
wc=0.4*pi;datB=4*pi/61;
m=1;N=(m+1)*2*pi/datB+1;
N=N+mod((N+1),2);
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);
axis([0,2,-0.1,1.2]);
title('理想幅频响应');
subplot(2,2,2),plot(hn);
axis([0,65,-0.2,0.5]);
title('理想单位脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);
title('实际幅频响应');
3、在第(2)题的要求下。再在过渡带中增加一个采样点T,取值0.38.要求显示幅频特性曲线,观察增加过渡带采样点后对滤波器特性的影响。
程序如下:
T=0.38;
wc=0.4*pi;
N=61;  
Np=fix(wc/(2*pi/N));
Ns=N-2*Np-1;
Ak=[ones(1,Np+1),zeros(1,Ns),ones(1,Np)];
Ak(Np+2)=T;Ak(N-Np)=T;
thetak=-pi*(N-1)*(0:N-1)/N;
Hk=Ak.*exp(j*thetak);
hn=real(ifft(Hk));
Hw=fft(hn,1024);
wk=2*pi*[0:1023]/1024;
Hgw=Hw.*exp(j*wk*(N-1)/2);
wa=[0:N-1]/N*2;
subplot(2,2,1),plot(wa,Ak);axis([0,2,-0.1,1.2]);title('理想幅频响应');
subplot(2,2,2),plot(hn);axis([0,N+2,-0.2,0.5]);
title('理想单位脉冲响应');xlabel('n');ylabel('h(n)');
subplot(2,2,3),plot(wk/pi,abs(Hgw));
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
三、   实验分析总结
通过本次实验,我对对频率采样法设计FIR 数字滤波器的基本原理的理解,掌握了在频域优化设计FIR数字滤波器的方法,也了解MATLAB设计FIR数字滤波器的编程方法。对相位FIR滤波器的扶贫特性和相频特性更加熟悉,加深了我对窗函数法设计 FIR数字滤波器的基本原理的理解。了解 了MATLAB 有关窗函数法设计的子函数以及各种不同窗函数对滤波器性能的影响。
axis([0,2,-0.1,1.2]);title('实际幅频响应');
subplot(2,2,4),plot(wk/pi,20*log10(abs(Hgw)));
axis([0,1,-70,10]);title('实际损耗函数');
三、   实验分析总结
通过本次实验,我对对频率采样法设计FIR 数字滤波器的基本原理的理解,掌握了在频域优化设计FIR数字滤波器的方法,也了解MATLAB设计FIR数字滤波器的编程方法。对相位FIR滤波器的扶贫特性和相频特性更加熟悉,加深了我对窗函数法设计 FIR数字滤波器的基本原理的理解。了解 了MATLAB 有关窗函数法设计的子函数以及各种不同窗函数对滤波器性能的影响。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表