logo资料库

matlab的FIR滤波器设计.doc

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
一、摘要 前面一篇文章介绍了通过 FDATool 工具箱实现滤波器的设计,见“基于 Matlab 中 FDATool 工具箱的滤波器设计及相关文件的生成”,这里通过几个例 子说明采用 Matlab 语言设计 FIR 滤波器的过程。 二、实验平台 Matlab7.1 三、实验原理 以低通滤波器为例,其常用的设计指标有:  通带边缘频率 fp(数字频率为Ωp)  阻带边缘频率 fst (数字频率为Ωst)  通带内最大纹波衰减δp=-20log10(1-αp),单位为 dB  阻带最小衰减αs=-20log10(αs),单位为 dB  阻带起伏αs  通带峰值起伏αp 其中,以1、2、3、4条最为常用。5、6条在程序中估算滤波器阶数等参数 时会用到。 数字频率 = 模拟频率/采样频率 四、实例分析 例1 用凯塞窗设计一 FIR 低通滤波器,通带边界频率Ωp=0.3pi, 阻带边界频率 Ωs=0.5pi,阻带衰减δs 不小于50dB。 方法一:手动计算滤波器阶数 N 和β值,之后在通过程序设计出滤波器。 第一步:通过过渡带宽度和阻带衰减,计算滤波器的阶数 B 和β值。 第二步:通过程序设计滤波器。 程序如下: b = fir1(29,0.4,kaiser(30,4.55));
[h1,w1]=freqz(b,1); plot(w1/pi,20*log10(abs(h1))); axis([0,1,-80,10]); grid; xlabel('归一化频率/p') ; ylabel('幅度/dB') ; 波形如下: 方法二: 采用[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得 到凯塞窗滤波器。 这里的函数 kaiserord(f,a,dev)或者 kaiserord(f,a,dev,fs): f 为对应的频率,fs 为采样频率;当 f 用数字频率表示时,fs 则不需要写。 a=[1 0]为由 f 指定的各个频带上的幅值向量,一般只有0和1表示;a 和 f 长度关系为(2*a 的长度)- 2=(f 的长度)
devs=[0.05 10^(-2.5)]用于指定各个频带输出滤波器的频率响应与其 期望幅值之间的最大输出误差或偏差,长度与 a 相等,计算公式: 阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。 fs 缺省为2Hz。 程序如下: fcuts = [0.3 0.5]; %归一化频率 omega/pi,这里指通带截止频率、阻带起 始频率 mags = [1 0]; devs = [0.05 10^(-2.5)]; [n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs); %计算出凯塞窗 N, beta 的值 hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); freqz(hh); 波形如下:
实际中,一般调用 MATLAB 信号处理工具箱函数 remezord 来计算等波纹 滤波器阶数 N 和加权函数 W(ω),调用函数 remez 可进行等波纹滤波器的设计, 直接求出滤波器系数。函数 remezord 中的数组 fedge 为通带和阻带边界频率, 数组 mval 是两个边界处的幅值,而数组 dev 是通带和阻带的波动,fs 是采样 频率单位为 Hz。 例2 利用雷米兹交替算法设计等波纹滤波器,设计一个线性相位低 通 FIR 数字滤波器,其指标为:通带边界频率 fc=800Hz,阻带 边界 fr=1000Hz,通带波动 阻带最小衰减 At=40dB,采样频率 fs=4000Hz。 解:在 MATLAB 中可以用 remezord 和 remez 两个函数设计 程序如下: fedge=[800 1000]; mval=[1 0]; dev=[0.0559 0.01]; fs=4000; [N,fpts,mag,wt]=remezord(fedge,mval,dev,fs); b=remez(N,fpts,mag,wt); [h,w]=freqz(b,1,256);
plot(w*2000/pi,20*log10(abs(h))); grid; xlabel('频率/Hz') ; ylabel('幅度/dB'); 波形如下: 例3 利用 MATLAB 编程设计一个数字带通滤波器,指标要求如下: 通带边缘频率:Ωp1=0.45pi,Ωp2=0.65pi,通带峰值起伏: δ1<=1[dB]。阻带边缘频率:Ωs1=0.3pi,Ωs2=0.8pi,最小 阻带衰减:δ2>=40[dB] 。
方法一:窗函数法 程序如下: [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.0517 0.0077 0.3500 -0.0293 0.0940 0.0907 -0.2630 Columns 17 through 24 -0.0517 -0.2630 -0.0381 -0.0152 0.0907 0.0940 -0.0293 0.0077
Columns 25 through 31 0.0391 0.0041 -0.0000 -0.0056 -0.0018 -0.0091 0.0055 如果直接用 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)
分享到:
收藏