基于matlab的fir滤波器的设计课程设计.docx
- 文档编号:720981
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:18
- 大小:162.90KB
基于matlab的fir滤波器的设计课程设计.docx
《基于matlab的fir滤波器的设计课程设计.docx》由会员分享,可在线阅读,更多相关《基于matlab的fir滤波器的设计课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
基于matlab的fir滤波器的设计课程设计
课程设计报告
题目基于MATLAB的FIR滤波器的设计
学院信息工程学院
专业电子信息工程
摘要
数字滤波技术是数字信号处理的一个重要组成部分,滤波器的设计是信号处理的核心问题之一。
根据FIR滤波器的原理,提出了FIR滤波器的窗函数设计法,并对常用的几种窗函数进行了比较。
给出了在MATLAB环境下,用窗函数法设计FIR滤波器的过程和设计实例。
仿真结果表明,设计的FIR滤波器的各项性能指标均达到了指定要求,设计过程简便易行。
该方法为快速、高效地设计FIR滤波器提供了一个可靠而有效的途径。
FIR数字滤波器以其良好的线性特性被广泛使用于现代电子通信系统中,是数字信号处理的重要内容之一。
在实际信号处理中,往往要求系统兼具实时性和灵活性,而已有的一些软件或硬件实现方案(如DSP)则难以同时达到这两方面的要求。
使用具有并行处理特性的FPGA来实现FIR滤波器,既有很强的实时性,又兼顾了灵活性,为数字信号处理提供了一种很好的解决方案。
FIR滤波器系数计算较为繁琐,在设计时借助Matlab工具箱,选择合适的窗函数,可以方便地计算滤波器系数,并分析其幅频、相频特性。
设计目的
(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。
(2)熟悉线性相位FIR数字滤波器的特性。
(3)了解各种窗函数对滤波特性的影响。
FIR滤波器的简介和原理
FIR数字滤波器的特点(和IIR数字滤波器比较):
优点:
(1)很容易获得严格的线性相位,的信号产生相位失真,这一特点在宽频带信号处理、阵列信号处理、数据传输等系统中非常重要;
(2)可得到多带幅频特性;
(3)极点全部在原点(永远稳定),无稳定性问题;
(4)任何一个非因果的有限长序列,总可以通过一定的延时,转变为因果序列,所以因果性总是满足;
(5)无反馈运算,运算误差小。
缺点:
(1)因为无极点,要获得好的过渡带特性,需以较高的阶数为代价;
(2)无法利用模拟滤波器的设计结果,一般无分析设计公式,要借助计算机辅助设计程序完成。
FIR滤波器具有严格的相位特性,返对于诧音信号处理和数据传输是很重要的前FIR滤波器的设计方法主要有三种:
窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计法。
本设计中的窗函数法比较简单,可使用现成的窗函数公式,在技术指标要丌高的时候是比较灵活方便的。
如果FIR滤波器的h(n)为实数,而且满足以下任意条件,滤波器就具有准确的线性相位,
第一种:
偶对称,h(n)=h(N-1-n),φ(ω)=-(N-1)ω/2
第二种:
奇对称,h(n)=-h(N-1-n),φ(ω)=-(N-1)ω/2+pi/2对称中心在n=(N-1)/2处,
根据以上对称条件,可以将FIR滤波器分为4种:
h(n),evenlysymmetric,oddN
h(n),evenlysymmetric,evenN,3
h(n),oddlysymmetric,oddN,
h(n),oddlysymmetric,evenN,
典型的窗函数
(1)矩形窗(RectangleWindow)
其频率响应和幅度响应分别为:
,
(2)三角形窗(BartlettWindow)
其频率响应为:
(3)汉宁(Hanning)窗,又称升余弦窗
其频率响应和幅度响应分别为:
(4)海明(Hamming)窗,又称改进的升余弦窗
其幅度响应为:
(6)凯泽(Kaiser)窗
其中:
β是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,β越大,过渡带越宽,阻带越小衰减也越大。
I0(·)是第一类修正零阶贝塞尔函数。
5种窗函数性能比较
窗类型
旁瓣峰值
主瓣峰值
最小阻带衰减
矩形窗
13dB
4π/M
21dB
三角窗
25dB
8π/M
25dB
汉宁窗
31dB
8π/M
44dB
海明窗
41dB
8π/M
53dB
凯泽窗
57dB
12π/M
74dB
用窗函数设计FIR滤波器的基本方法
设计思想:
从时域从发,设计
逼近理想
。
设理想滤波器
的单位脉冲响应为
。
以低通线性相位FIR数字滤波器为例。
一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断
,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。
按照线性相位滤波器的要求,h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即
用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。
为了消除吉布斯效应,一般采用其他类型的窗函数。
使用窗函数法设计时要满足以下两个条件:
(1)窗谱主瓣尽可能地窄,以获得较陡的过渡带;
(2)尽量减少窗谱的最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,减小峰肩和纹波,进而增加阻带的衰减。
设计步骤
a.录制一段自己的语音信号,并对录制的信号进行采样。
b.画出采样后语音信号的时域波形和频谱图。
c.噪声的添加。
d.给出滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应。
e.设计滤波器并对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
f.回放语音信号。
g..设计一个GUI界面(选做)。
(a)语音信号的采集
利用Windows下的录音机,录制一段自己的话音,时间在2s内。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
代码:
[y,fs,bits]=wavread('zyb.wav',[102463500]);
sound(y,fs,bits);
(b)语音信号的频谱分析
首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。
代码:
Y=fft(y,4096);
figure
(1);
plot(y);title('语音信号的时域波形');
figure
(2);
plot(abs(Y));title('语音信号的频谱特性');
(c)利用特定的函数产生噪声。
代码:
t=0:
0.2:
10;
y1=awgn(y,10,'measured');
Y1=fft(y1,4096);
figure(3);
plot(y1);title('加噪语音信号的时域波形');
figure(4);
plot(abs(Y1));title('加噪语音信号的频谱特性');
(d)设计数字滤波器和画出其频率响应
给出各滤波器的性能指标:
(1)低通滤波器性能指标fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB。
(2)高通滤波器性能指标fc=4800Hz,fb=5000HzAs=100dB,Ap=1dB。
(3)带通滤波器性能指标fb1=1200Hz,fb2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB。
利用窗函数法和双线性变换法设计其上的低通滤波器。
在Matlab中,利用函数fir1设计FIR滤波器,并利用Matlab中的函数freqz画出各滤波器的频率响应。
(e)用滤波器对信号进行滤波
利用设计出的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波。
(f)比较滤波前后语音信号的波形及频谱
在一个窗口同时画出滤波前后的波形及频谱。
(g)回放语音信号
在Matlab中,函数sound可以对声音进行回放。
(h)设计系统界面(选作)
为了使编制的程序操作方便,设计GUI的用户界面。
设计流程图
程序代码:
fs=20000;
%********对外部声音的读取和处理**********************************************
[y,fs,bits]=wavread('张源斌.wav',[204860000]);
sound(y,fs,bits);
Y=fft(y,4096);
figure
(1);
plot(y);title('语音信号的时域波形');
figure
(2);
plot(abs(Y));title('语音信号的频谱特性');
%*************添加噪声******************************************************
n=length(y);
t=0:
1/fs:
(n-1)/fs;
Au=0.04
Noise=[Au*sin(2*pi*5000*t)]';
y1=y+Noise;
Y=fft(y1,4096);
sound(y1,fs,bits);
figure(3);
plot(y1);title('加噪语音信号的时域波形');
figure(4);
plot(abs(Y));title('加噪语音信号的频谱特性');
%********FIR滤波器设计******************************************************
fs=20000;rp=1;rs=100;
fcuts=[10001200];
d1=(10^(rp/20)-1)/(10^(rp/20)+1);
d2=10^(-rs/20);
mags=[10];
devs=[d1d2];
[n,wn,beta,ftype]=kaiserord(fcuts,mags,devs,fs);
b=fir1(n,wn,ftype,kaiser(n+1,beta),'noscale');
figure(5);
freqz(b,1,512);
grid;
xlabel('频率/Hz');
ylabel('频率响应幅度');
grid;
%********对原信号进行滤波***************************************************
f1=filter(b,1,y1);
sound(f1,20000);%播放滤波后的信号
%********比较波形滤波前后时域的图形******************************************
figure(6)
subplot(2,1,1)
plot(y1)%画出滤波前的时域图
title('滤波前的时域波形');
xlabel('times');
ylabel('幅度');
grid;
subplot(2,1,2)
plot(f1);%画出滤波后的时域图
title('滤波后的时域波形');
xlabel('times');
ylabel('幅度');
grid;
%********比较波形滤波前后频域的图形******************************************
F0=fft(f1,1024);
f=fs*(0:
511)/1024;
figure(7)
y2=fft(y1,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));%画出滤波前的频谱图
title('滤波前的频谱');axis([0400001.5]);
xlabel('频率/Hz');
ylabel('幅度');
grid;
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));%画出滤波后的频谱图
title('滤波后的频谱');axis([0400001.5]);
xlabel('频率/Hz');
ylabel('幅度');
grid;
运行结果图
GUI设计
screen=get(0,'screensize');
W=screen(3);H=screen(4);figure('color',[0.85,0.75,0.35],'position',[0.5*H,0.5*H,0.5*W,0.5*H],...
'name','张源斌图形演示界面','Numbertitle','off','Menubar','none');
hplot=uimenu(gcf,'Label','&Plot');
uimenu(hplot,'Label','语音信号采集','call',['[y,fs,Nbits]=wavread(''张源斌'');',...
'plot(y);','title(''语音信号的时域波形'');']);
uimenu(hplot,'Label','加噪语音信号的时域波形','call',['fs=20000;','[x1,fs,nbits]=wavread(''张源斌'');',...'t=length(x1)/20000;','f=fs*(0:
1023)/2048;','Au=0.05;','d=[Au*cos(2*pi*3800*t)];','x2=x1+d;',...
'plot(x2);','title(''加噪语音信号的时域波形'');']);
uimenu(hplot,'Label','加噪语音信号的频谱特性','Call',['[y,fs,Nbits]=wavread(''张源斌'');',...
'Y=fft(y,4096);','plot(abs(Y));','title(''加噪语音信号的频谱特性'');']);
uimenu(hplot,'Label','加噪语音信号的频谱特性','call',['fs=20000;','[x1,fs,nbits]=wavread(''张源斌'');',...'t=length(x1)/20000;','f=fs*(0:
1023)/2048;','Au=0.05;','d=[Au*cos(2*pi*3800*t)];','x2=x1+d;',...
'X=fft(x2,4096);','plot(abs(X));','title(''加噪语音信号的频谱特性'');']);
uimenu(hplot,'Label','滤波前后信号波形和频谱','Call',['x1=wavread(''wang'');','t=length(x1)/20000;',...'f=fs*(0:
1023)/2048;','Au=0.05;','d=[Au*cos(2*pi*3800*t)];','x2=x1+d;','fp=1000;','fc=1200;',...
'As=100;','Ap=1;','fs=8000;','wc=2*pi*fc/fs;','wp=2*pi*fp/fs;','beta=0.112*(As-8.7);',...
'wdel=wc-wp;','N=ceil((As-8)/2.285/wdel);',...
'wn=kaiser(N+1,beta);','ws=(wp+wc)/2/pi;','b=fir1(N,ws,wn);','freqz(b,1);','x=fftfilt(b,x2);',...
'X=fft(x,8192);','plot(x);','title(''滤波后信号波形'');']);
hoption=uimenu(gcf,'Label','&Option');
hfigcor=uimenu(hoption,'Label','&FigureColor','separator','on');
uimenu(hfigcor,'Label','&Red','Accelerator','r','Call','set(gcf,''Color'',''r'');');
uimenu(hfigcor,'Label','&Black','Accelerator','k','Call','set(gcf,''Color'',''k'');');
uimenu(hfigcor,'Label','&Blue','Accelerator','b','Call','set(gcf,''Color'',''b'');');
uimenu(hfigcor,'Label','&Yellow','Accelerator','y','Call','set(gcf,''Color'',''y'');');
uimenu(gcf,'Label','&Quit','Call','Close(gcf)');
设计心得
在课程设计期间由于做测试复习,在第一周自己并没有在课程设计上下很大的功夫,只是在做课程的时间在网上找找资料,并做一些MATLAB操作,并没有深入研究。
第二周测试结束后,自己把所有的经历都放在课程设计上了,由于数字信号处理这门课的知识自己很长时间没有复习,基本忘得差不多了,再加上自己没有学过MATLAB,因此做起来很是吃力,还好有许多学过MATLAB的同学以及指导老师给自己相当大的帮助,从开始的声音信号采集,并分析时域和频域特性。
到为声音信号添加噪声,再到滤波器的设计以及滤波后的时域和频域分析,几乎都是自己一步一步的做出来的,对程序有了很多的理解,也对MATLAB的基本操作掌握了一些,掌握了各种窗函数的一些用法,这让自己感到十分欣慰,因为自己有多掌握了许多有用的知识,同时自己也发现了自己在学习上的许多缺点及错误方法,这在以后自己要逐渐改正。
现在自己已经是一名大三的学生了,即将升入大四,做这样的课程设计对自己有很大的帮助,无论将来自己是就业还是考研,加强动手能力是十分有必要的。
参考文献
1.程佩青《数字信号处理教程》北京清华大学出版社2007年2月.
2.赵知劲、刘顺兰《数字信号处理实验》.浙江大学出版社.
3.S.K.Mitra.DigitalSignalProcessing:
AComputer-BasedApproach.
NewYork,NewYork:
McGraw-Hill,thirded,2006.
4.肖伟、刘忠等《MATLAB程序设计和使用》清华大学出版社、北京交通大学出版社.
5.胡良剑、孙晓君《MATLAB数学实验》.高等教育出版社.
6.杨述斌、李永全《数字信号处理实践教程》华中科技大学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab fir 滤波器 设计 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)