fir数字滤波器设计及软件实现 联系客服

发布时间 : 星期日 文章fir数字滤波器设计及软件实现更新完毕开始阅读631063bde3bd960590c69ec3d5bbfd0a7856d5dd

如对您有帮助,请购买打赏,谢谢您!

实验二 FIR数字滤波器设计与软件实现

1.实验目的

(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。

(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。 (3)掌握FIR滤波器的快速卷积实现原理。

(4)学会调用MATLAB函数设计与实现FIR滤波器。 2. 两种设计FIR滤波器的方法比较

窗函数法简单方便,易于实现。但存在以下缺点:滤波器边界频率不易精确控制。窗函数法总使通带和阻带波纹幅度相等,不能分别控制通带和阻带波纹幅度。所设计的滤波器在阻带边界频率附近的衰减最小,距阻带边界频率越远,衰减越大。,所以如果在阻带边界频率附近的衰减刚好达到设计指标要求,则阻带中其他频段的衰减就有很大富余量,存在较大的资源浪费。

等波纹最佳逼近法是一种优化设计方法,克服了窗函数法的缺点,使最大误差最小化,并在整个逼近频段上均匀分布。用等波纹最佳逼近法设计的FIR数字滤波器的幅频响应在通带和阻带都是等波纹的,而且可以分别控制通带和阻带波纹幅度。与窗函数法相比,由于这种设计法使最大误差均匀分布,所以设计的滤波器性能价格比最高。阶数相同时,这种设计方法使滤波器的最大逼近误差最小,即通带最大衰减最小,阻带最小衰减最大。指标相同时,这种设计法使滤波器阶数最低。 3. 滤波器参数及实验程序清单

(1) 滤波器参数选取

根据加噪信号频谱图和实验要求,可选择一低通滤波器进行滤波,确定滤波器指标参数:通带截止频率fp?130Hz,阻带截至频率fs?150Hz,换算成数字频率,通带截止频率

?p?2?fpT?0.26?,通带最大衰减为?p?0.1dB,阻带截至频率

?s?2?fsT?0.3? (2) 实验程序清单

,阻带最小衰减为?s?60dB。

图1 程序流程图

信号产生函数xtg程序清单 function xt=xtg

%产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000Hz %载波频率fc=Fs/10=100Hz,调制正弦波频率f0=fc/10=10Hz. N=1600;

Fs=1000;T=1/Fs;Tp=N*T; t=0:T:(N-1)*T;

fc=Fs/10;f0=fc/10; %载波频率fc=Fs/10,单频调制信号频率为f0=Fc/10; mt=cos(2*pi*f0*t); %产生单频正弦波调制信号mt,频率为f0 ct=cos(2*pi*fc*t); %产生载波正弦波信号ct,频率为fc xt=mt.*ct; %相乘产生单频调制信号xt nt=2*rand(1,N)-1; %产生随机噪声nt

%=======设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高通噪声======= fp=150; fs=200;Rp=0.1;As=70; % 滤波器指标

如对您有帮助,请购买打赏,谢谢您!

fb=[fp,fs];m=[0,1]; % 计算remezord函数所需参数f,m,dev dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)];

[n,fo,mo,W]=remezord(fb,m,dev,Fs); % 确定remez函数所需参数

hn=remez(n,fo,mo,W); % 调用remez函数进行设计,用于滤除噪声nt中的低频成分 yt=filter(hn,1,10*nt); %滤除随机噪声中低频成分,生成高通噪声yt

%================================================================ xt=xt+yt; %噪声加信号 fst=fft(xt,N); k=0:N-1; f=k/Tp; figure(1);

subplot(2,1,1);plot(t,xt); grid;

xlabel('t/s'); ylabel('x(t)');

axis([0,Tp/4,min(xt),max(xt)]); title('信号加噪声波形'); subplot(2,1,2);

plot(f,abs(fst)/max(abs(fst))); grid;

title('信号加噪声的频谱'); axis([0,Fs/2,0,1.2]); xlabel('f/Hz');

ylabel('幅度');

FIR数字滤波器设计及软件实现程序清单 clear all;close all

xt=xtg; %调用xtg产生信号xt, xt长度N=1600,并显示xt及其频谱 fp=130;fs=150;Rp=0.1;As=60;Fs=1000; % 输入给定指标 %用窗函数法设计滤波器

wc=(fp+fs)/Fs; %理想低通滤波器截止频率(关于pi归一化) B=2*pi*(fs-fp)/Fs; Nb=ceil(11*pi/B);

hn=fir1(Nb-1,wc,blackman(Nb));

y1t=fftfilt(hn,xt,1600); %调用函数fftfilt对xt滤波 figure(2);

t=0:0.001:1.599; %绘制滤波后的信号时域波形图 subplot(2,1,1); plot(t,y1t); grid;

xlabel('t/s');ylabel('y_1(t)'); title('滤波后的y_1(t)的波形'); axis([0 0.5 -1 1]); subplot(2,1,2);

[h w]=freqz(hn); %绘制低通滤波器的损耗函数曲线

如对您有帮助,请购买打赏,谢谢您!

plot(w/pi,20*log10(abs(h))); grid;

xlabel('ω/π');ylabel('幅度(dB)');

title('窗函数法低通滤波器的损耗函数曲线'); axis([0 1 -120 5]);

%用等波纹最佳逼近法设计滤波器 fb=[fp,fs];m=[1,0]; %确定remezord函数所需参数f,m,dev dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];

[Ne,fo,mo,W]=remezord(fb,m,dev,Fs); %确定remez函数所需参数 hn=remez(Ne,fo,mo,W); %调用remez函数进行设计 y2t=fftfilt(hn,xt,1600); %调用函数fftfilt对xt滤波 figure(3);

t=0:0.001:1.599; %绘制滤波后的信号时域波形图 subplot(2,1,1); plot(t,y2t); grid;

xlabel('t/s');ylabel('y_2(t)'); title('滤波后的y_2(t)的波形'); axis([0 0.5 -1 1]); subplot(2,1,2);

[h w]=freqz(hn); %绘制低通滤波器的损耗函数曲线 plot(w/pi,20*log10(abs(h))); grid;

xlabel('ω/π');ylabel('幅度(dB)');

title('等波纹逼近法低通滤波器的损耗函数曲线'); axis([0 1 -80 5]); 4. 实验结果

在matlab中键入以上程序,得到的仿真结果如下

图2 具有加性噪声的信号x(t)及其频谱

图3 窗函数法设计的滤波器损耗函数曲线及其滤波后的信号y1(t) 图4 等波纹逼近法设计的滤波器损耗函数曲线及其滤波后的信号y2(t)

由上述实验结果可见用窗函数法设计滤波器,滤波器长度 Nb=184。滤波器损耗函数和滤波器输出y1(t)如图3所示。

用等波纹最佳逼近法设计滤波器,滤波器长度 Ne=83。滤波器损耗函数和滤波器输出

y2(t)如图4所示。

两种方法设计的滤波器都能有效地从噪声中提取信号,但等波纹最佳逼近法设计的滤波器阶数低得多,当然滤波实现的运算量以及时延也小得多,从图3和4可以直观地看出时延差别。 5. 思考题

(1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相