1、 实验目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法
(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法 (3)掌握FIR滤波器的快速卷积实现原理
(4)学会调用MATLAB函数设计与实现FIR滤波器
2、 实验步骤及内容
(1) 认真复习第七章中用窗函数法和等波纹最佳逼近方法设计FIR数字滤波
器的原理;
(2) 调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其
频谱,如图10.5.1所示。
(a)信号加噪声波形10x(t)0-1000.020.040.060.080.1t/s0.120.140.160.180.2(b)信号加噪声的频谱1幅度0.50050100150200250f/Hz300350400450500
(3) 请设计低通滤波器,从高频噪声中提取xt中的单频抑制载波调幅信号,
要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。观察xt的频谱,确定滤波器指标参数。
(4) 根据滤波器指标选择合适的窗函数,计算窗函数的长度N,调用MATLAB
函数firl设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。
(5) 重复(3),滤波器指标不变,但改用等纹波最佳逼近法设计FIR滤波器,
调用MATLAB函数remezord和remez设计FIR数字滤波器。比较两种设计方法设计的滤波器阶数。
3、 程序清单
clc; clear; NN=1000; fs1=1000; T=1/fs1;
t=0:T:(NN-1)*T; Tp=NN*T; k=0:NN-1; f=k/Tp;
%rs等于60dB,因此采用布克莱曼窗 fp=120; fs=150;
%转换为数字频率 wp=2*pi*fp/fs1; ws=2*pi*fs/fs1;
bt=ws-wp; %计算过渡带宽度
N0=ceil(11*pi/bt);%计算滤波器阶数
N1=N0+mod(N0+1,2);%确保好h(n)长度N1是奇数
wc=(wp+ws)/2/pi;%计算理想高通滤波器通带截止频率
hn=fir1(N1-1,wc,blackman(N1));%调用firl计算高通FIR数字滤波器的h(n)
figure;
[H,W]=freqz(hn,1,512,2); plot(W,20*log10(abs(H)));
y1=filter(hn,1,xtg);%调用fftfilt用重叠相加法计算卷积
y1_fft=fft(y1,NN);
figure;
subplot(2,1,1); plot(t,y1)
axis([0,0.5*Tp,min(y1),max(y1)]); subplot(2,1,2);
stem(f,abs(y1_fft)/max(abs(y1_fft)),'.'); axis([0,fs1/5,0,1.2]); grid;
functionxt=xtg
%实验五信号x(t)产生函数,并显示信号的时域波形和幅频特性曲线 %xt=xtg产生一个长度为N,有加性高频噪声的単频调幅信号xt,N=1000 %采样频率Fs=1000Hz
%载波频率fc=Fs/10=100Hz,调制正弦波频率f0=fc/10=10Hz
N=1000;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);%产生载波正弦波信号mt,频率为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; subplot(2,1,1);plot(t,xt);grid; xlabel('t/s');ylabel('x(t)');
axis([0,Tp/5,min(xt),max(xt)]); title('(a)信号加噪声波形')
subplot(2,1,2);plot(f,abs(fst)/max(abs(fst))); grid;title('(b)信号加噪声的频谱') axis([0,Fs/2,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
4、仿真波形
(a)信号加噪声波形10x(t)0-1000.020.040.060.080.1t/s0.120.140.160.180.2(b)信号加噪声的频谱1幅度0.50050100150200250f/Hz300350400450500
10.50-0.5-100.050.10.150.20.250.30.350.40.450.510.80.60.40.20020406080100120140160180200
因篇幅问题不能全部显示,请点此查看更多更全内容