数字滤波器设计与仿真程序

更新时间:2023-10-26 06:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB 的数字滤波器设计与仿真 任淑萍,王欣峰

最优化设计方法:利用 rmezord 函数设计一个最小阶次的低通滤波器, 其通带截止频率为 500Hz,阻带截止频率为 600 Hz,采样频率为 2 000 Hz,最小阻带衰减为 40 db,通带纹波小于 3 db,其 MATLAB实现程序如下:

>> clear all; rp=3; rs=40; fs=2000; f=[500 600]; >> a=[1 0];

>> dev=[(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; >> [n,fo,ao,w]=remezord(f,a,dev,fs); >> b=remez(n,fo,ao,w); >> freqz(b,1,1024,fs);

clear all; rp=3; rs=40; fs=2000; f=[500 600]; a=[1 0];

dev=[(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; [n,fo,ao,w]=remezord(f,a,dev,fs); b=remez(n,fo,ao,w); t=(0:100)/fs;

x=sin(2*pi*t*300)+sin(2*pi*t*800); x1=filter(b,1,x); figure;

subplot(211);plot(t,x);grid; subplot(212);plot(t,x1);grid;

FIR 数字滤波器的 Matlab 实现 许书云

2.2 FIR低通滤波器的设计

以设计一个FIR低通滤波器,实现100 Hz正弦波信 号的滤波为例,设计过程如下。

首先,根据设计要求和FDATOOL工具箱的工作界

面,确定FIR数字滤波器的设计指标,其中设置采样频 率和选择窗函数最为关键。

根据采样定理,当采样频率大于信号中最高频率

的2倍时,则采样之后的数字信号完整地保留了原始

信号中的信息,一般实际应用中保证采样频率为信最高频率的5~10倍,在此例中,F pass

= 100 Hz,F stop

= 800 Hz,

因此,采样频率选定为F s

= 10 kHz。

为了获得较高的信噪比减少频谱能量泄漏,使设

计的滤波器满足工程需要,常选用不同的窗函数来改 善滤波器的幅频特性。由于频谱能量泄漏与窗函数频 谱的两侧旁瓣有关,旁瓣幅度越小且幅度下降速度越 快,过渡带越窄,阻带衰减越大则能量越集中在主瓣, 滤波器的性能越好。在实际应用时要综合考虑以上的 指标选择窗函数。

设计FIR滤波器常用的窗函数有:矩形窗函数、三

角窗函数、汉宁窗函数、海明窗函数、凯泽(Kaiser)窗 函数。具体指标如表1所示

[8]。

基于 MATLAB 的 FIR 数字滤波器的窗函数法设计与仿真 * 徐 欢

>> clear all; wls=0.2*pi; wlp=0.35*pi; whp=0.65*pi;

wc=[wlp/pi,whp/pi]; B=wlp-wls; N=ceil(8/0.15); n=0:N-1;

window=hanning(N); [h1,w]=freqz(window,1); subplot(2,2,1); stem(window); axis([0 60 0 1.2]); grid;

xlabel('n');

title('Hanning 窗函数');

subplot(2,2,2);plot(w/pi,20*log(abs(h1)/abs(h1(1)))); axis([0 1 -350 0]); grid;

xlabel('w/pi'); ylabel('幅度(db)');

title('Hanning 窗函数频谱'); hn=fir1(N-1,wc,hanning(N)); [h2,w]=freqz(hn,1,512); subplot(2,2,3);stem(n,hn); axis([0 60 -0.25 0.25]); grid;

xlabel('n'); ylabel('h(n)');

title('Hanning 窗函数的单位脉冲响应'); subplot(2,2,4);

plot(w/pi,20*log(abs(h2)/abs(h2(1))));grid; grid;

xlabel('w/pi'); ylabel('幅度(db)');

>> title('Hanning 窗设计带通滤波器的幅频响应');

基于 MATLAB 的 FIR 数字滤波器设计高 峰 徐献灵

>> wp=0.3*pi;ws=0.45*pi;

>> wdelta=ws-wp;N=ceil(8*pi/wdelta); >> Nw=N;

>> wc=(wp+ws)/2; >> win=hamming(Nw); >> b=fir1(N-1,wc/pi,win); >> freqz(b,1,512);

3. 2 使用等波纹最佳一致逼近法设计 FIR 滤波器MATLAB 信号处理工具箱提供了 remez 函数实现 FIR 滤波器的等波纹最佳一致逼近设计,其调用格式如下: b = remez( N,f,n,w’,ftype’)

>> clear all; fc=1/3;fs=6/15; Rp=3; As=60; Fs=2; f=[fc,fs]; m=[1,0];

dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1) 10^(-As/20)]; [N,fo,mo,W]=remezord(f,m,dev,Fs); hn=remez(N,fo,mo,W); hw=fft(hn,512); w=(0:511)*2/512;

plot(w,20*log10(abs(hw))); grid;

axis([0,max(w)/2,-90,5]);

>> As=70; ws=0.2*pi; wp=0.3*pi;

tr_width=wp-ws;

M=ceil((As-7.95)*2*pi/(14.36*tr_width)+1)+1; disp(['滤波器的长度为',num2str(M)]); beta=0.1102*(As-8.7); n=[0:1:M-1];

disp(['线性相位斜率为',num2str(beta)]); w_kai=(kaiser(M,beta)); wc=(ws+wp)/2;

hd=ideal_lp(w,M)-ideal_lp(wc,M); h=hd*w_kai;

[db,mag,pha,grd,w]=freqz_m(h,[1]); delta_w=2*pi/1000;

Rp=-(min(db(wp/delta_w+1:1:501))); disp(['实际通带波纹为',num2str(Rp)]); As=-round(max(db(1:1:ws/delta_w+1))); disp(['最小阻带衰减为',num2str(As)]); subplot(1,1,1);

subplot(2,2,1);title('理想脉冲响应'); axis([0 M-1 -0.4 0.8]); ylabel('hd(n)');

subplot(2,2,2);stem(n,w_kai);title('凯泽窗'); axis([0 M-1 0 1.1]); ylabel('wd(n)');

subplot(2,2,3);stem(n,h);title('实际脉冲响应'); axis([0 M-1 -0.4 0.8]); xlabel('n'); ylabel('h(n)');

subplot(2,2,4);plot(w/pi,db);title('幅度响应/dB'); axis([0 1 -100 10]);grid;

xlabel('以pi为单位的频率'); ylabel('分贝数/dB');

本文来源:https://www.bwwdw.com/article/uvs2.html

Top