您的当前位置:首页正文

基于MATLAB的FIR滤波器的设计及应用(信号去噪)

来源:九壹网
※※

※※※※※※※※

2008级数字信号处理 ※

※※

课程设计

※ ※ ※

数字信号处理课程设计报告书

基于MATLAB的FIR滤波器的设计及

课题名称 姓 名 学 号 院、系、部 专 业 指导教师

应用(信号去噪)

孙磊 20086373 电气系 电子信息 刘鑫淼

2011年 7月1日

基于MATLAB的FIR滤波器的设计及应

用(信号去噪)

20086373 孙磊

摘 要

数字滤波器是一种用来过滤时间离散信号的数字系统,目前数字滤波器的设计有许多现成的高级语言设计程序, 但它们的设计效率较低, 不具有可视图形, 不便于修改参数等缺点, 而MATLAB 语言正好能弥补以上缺点。本文就如何使用MATLAB 语言来设计和实现FIR 数字滤波器进行了探究。

本文主要是通过使用blackman窗设计一个FIR滤波器以对信号进行滤波去噪处理。本设计首先自己编一段信号,依据对该信号的频谱分析,给定相关指标。以MATLAB软件为平台,采用blackman窗设计满足指标的FIR滤波器,以该音乐信号进行滤波去噪处理。通过对比滤波前后的波形图,深入了解滤波器的基本方法。

一、设计目的

1.学会MATLAB的使用,掌握MATLAB的程序设计方法;

2.掌握数字信号处理的基本概念、基本理论和基本方法; 3. 在Matlab环境下产生噪声信号

4.掌握MATLAB设计FIR数字滤波器的窗函数设计方法; 5.学会用MATLAB对信号进行分析和处理。

二、设计要求

1.噪声信号的频谱分析

2.设计数字滤波器和画出频率响应

利用窗函数的方法和最佳逼近法设计FIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。

3.用滤波器对噪声信号进行滤波

4.比较几种滤波器去滤波前后噪声信号的波形及频谱

三、设计原理及思想

如果所希望的滤波器的理想的频率响应函数为应为

Hdej,则其对应的单位脉冲响

2

hdn12Hdejejd (4.1)

hdn窗函数设计法的基本原理是用有限长单位脉冲响应序列hn逼近于

hdn。由

往往是无限长序列,而且是非因果的,所以用窗函数n将

hdn截断,

并进行加权处理,得到:

hnhdnn (4.2)

hn就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函

jHe数为

Hehnejn0N1jn (4.3)

式中,N为所选窗函数n的长度。

我们知道,用窗函数法设计的滤波器性能取决于窗函数n的类型及窗口长度N的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见表4.1。

表1 各种窗函数的基本参数

窗函数 矩形窗 三角形窗 汉宁窗 哈明窗 不莱克曼窗 凯塞窗(α=7.865) 旁瓣峰值幅度/dB 过渡带宽 阻带最小衰减/dB -13 -25 -31 -41 -57 -57 4π/N 8π/N 8π/N 8π/N 12π/N 10π/N -12 -25 -44 -53 -74 -80 hnhdn•n这样选定窗函数类型和长度N之后,求出单位脉冲响应,

jjHeHe并按照式(4.3)求出。是否满足要求,要进行演算。一般在hn尾jHe部加零使长度满足2的整数次幂,以便用FFT计算。如果要观察细节,

 3

jHe补零点数增多即可。如果不满足要求,则要重新选择窗函数类型和长度

N ,再次验算,直至满足要求。

如果要求线性相位特性,则hn还必须满足

hnhN1n

根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。要根据所设计的滤波特性正确选择其中一类,例如,要设计线性相位低通特性,可以选择hnhN1n这一类,而不能选择hnhN1n这一类。

四、主程序框图

开始 读入窗口长度N 计算hd(n) 调用窗函数子程序求w(n) 计算h(n)= hd(n) w(n) 调用子程序(函数)计算H(k)=DFT[h(n)] 调用绘图子程序(函数)绘制H(k)幅度相位曲线 结束 图6-1 主程序框图

4

五、程序设计

function xt=xtg; N=1000;

Fs=1000;T=1/Fs;Tp=N*T; t=0:T:(N-1)*T;fc=Fs/10;f0=fc/10; mt=cos(2*pi*f0*t); ct=cos(2*pi*fc*t);

xt=mt.*ct; % 相成产生单频调幅信号 nt=2*rand(1,N)-1; % 产生随机噪声 subplot(4,4,1);plot(t,xt);title('未加噪声的信号') fp=150;fs=200;Rp=0.1;As=70; fb=[fp,fs];m=[0,1];

dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)]; [n,fo,mo,W]=remezord(fb,m,dev,Fs); hn=remez(n,fo,mo,W);

yt=filter(hn,1,10*nt); %滤除随机噪声中低频成分,生成高通噪声yt xt=xt+yt; %噪声加信号 fst=fft(xt,N);k=0:N-1;f=k/Tp;

subplot(4,4,2);plot(t,xt);grid;xlabel('t/s');ylabel('x(t)'); axis([0,Tp/5,min(xt),max(xt)]);

title('(a) 信号加噪声波形'); % 去噪声之前的波形及频谱 subplot(4,4,3);plot(f,abs(fst)/max(abs(fst)));grid;title('(b)信号加噪声的频谱'); axis([0,Fs/2,0,1.2]); xlabel('f/Hz');ylabel('幅度'); N=1000; Fs=1000;

rp=0.1;rs=60; %rp通带最大衰减,rs阻带最小衰减 fp1=120;fs1=150; %fp1通带截止频率,fs1阻带截止频率 wp1=0.24*pi;ws1=0.3*pi; %指标参数赋值 B1=2*pi*(fs1-fp1)/Fs; %过渡带宽度

N0=ceil(11*pi/B1); %计算阶数N0,ceil(x)为大于等于x的最小整数 wc1=(wp1+ws1)/(2*pi); %设计理想低通截止频率 hn1=fir1(N0-1,wc1,blackman(N0)); %低通滤波器的产生 subplot(4,4,9);plot(hn1);title('hn1波形');grid on;

5

%设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高通噪声

[H1,W]=freqz(hn1,1000);

subplot(4,4,10);plot(W/pi,20*log10(abs(H1)));title('频率响应H1');grid on; Hw=abs(fft(hn1,1024)); yn1=fftfilt(hn1,xt,N);

subplot(4,4,5);plot(yn1);title('窗函数法滤波后的噪声信号波形'); fst1=fft(yn1,N);k=0:N-1;f=k/Tp;

subplot(4,4,6);plot(f,abs(fst1)/max(abs(fst1)));grid; title('窗函数法信号去噪声的频谱'); m1=abs(H1); subplot(4,4,11);

plot(W/pi,20*log10(m1/max(m1)));grid on; xlabel('\\omega/\\pi');ylabel('幅度(dB)'); axis([0,1,-80,5]);title('损耗函数1'); %等波纹最佳逼近法设计fir滤波器 Fs=1000; f=[120,150]; m=[1,0];

dat1=(10^(rp/20)-1)/(10^(rp/20)+1); dat2=10^(-rs/20);

rip=[dat1,dat2]; [N1,f0,m0,w]=remezord(f,m,rip,Fs); hn2=remez(N1,f0,m0,w);

subplot(4,4,13);plot(hn2);title('hn2波形'); [H2,W]=freqz(hn2);

subplot(4,4,14);plot(W/pi,20*log10(abs(H2)));title('频率响应H2');grid on; Hw=abs(fft(hn2,1024)); yn2=fftfilt(hn2,xt,N);

subplot(4,4,7);plot(yn2);title('最佳逼近法滤波后噪声信号波形'); fst2=fft(yn2,N);k=0:N-1;f=k/Tp;

subplot(4,4,8);plot(f,abs(fst2)/max(abs(fst2)));grid; title('最佳逼近法滤波后噪声信号频谱'); [H2,W]=freqz(hn2,1000); m2=abs(H2); subplot(4,4,15);

plot(W/pi,20*log10(m2/max(m2)));grid on;

6

xlabel('\\omega/\\pi');ylabel('幅度(dB)'); axis([0,1,-80,5]);title('损耗函数2');

六、仿真结果及分析

在将加噪信号滤波之后,我们将滤波前后信号的波形相互比较。在同一张大图里分别绘制原信号波形a,加噪信号波形b,窗函数法滤波去噪信号波形d,最佳逼近法滤波后去噪信号波形e,以便比较和分析。如下图所示:

原信号与滤波去噪信号的时域图基本相似,只有边缘部分有点差异;通过观察可以看到,加噪信号的时域图中大部分都被加入的噪声给遮盖了,在将三个信号的时域波形比较之后,发现等波纹最佳逼近法的去噪效果更好一些。

此图为窗函数法和等波纹最佳逼近法低通滤波器的波形及频率响应和损耗函数

七、设计总结

FIR滤波器的设计方法主要分为两类:第一类是基于逼近理想滤波器器特性

7

的方法包括窗函数法、频率采样法、和等波纹最佳逼近法;第二类是最优设计法。本文设计主要采用的是第一类设计方法,是利用布莱克曼窗函数法设计FIR滤波器对一段信号进行滤波去噪,通过这一过程,对滤波前后波形进行对比分析得到结论。此课程设计比较简单,主要是将书本中的知识运用到现实中,并且根据自己对设计题目的理解,运用软件编写出程序实现这一设计,也是我们对数字信号处理的原理进行验证的一个过程。

本文通过MATLAB语言对加噪信号进行频谱分析,并用窗函数法对加噪信号进行了滤波,不仅对MATLAB工具箱有了更深层次的了解和掌握,而且在fir滤波器设计中可以进行对种方法的比较,已确定每种方法的优劣性,在实际操作中有很大的意义,同时MATLAB 信号处理工具箱为滤波器设计及分析提供了非常优秀的辅助设计工具,在设计数字滤波器时,善于应用MATLAB进行辅助设计,能够大大提高设计效率。所以MATLAB是一款非常强大的工具,学习好和欧普可对,各种数字信号的处理有着至关重要的帮助。

在这次课程设计过程中,感触很深,由于对MATLAB信号处理的函数不熟悉,导致自己走了很多的弯路,通过本次课程设计,使自己对MATLAB 设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。

八、参考文献

[1] 董长虹等. MATLAB信号处理与应用.北京:国防工业出版社,2005

[2] [美] M.H.海因斯 著张建华等 译.数字信号处理.北京:科学出版社,2002 [3] 张葛祥,李 娜. MATLAB仿真技术与应用.北京:清华大学出版社,2003 [4] 楼顺天,李博菡.基于MATLAB的系统分析与设计.西安:西安电子科技大学出版社,1998

8

因篇幅问题不能全部显示,请点此查看更多更全内容

Top