基于matlab的FIR数字滤波器设计(带通,窗函数法)

更新时间:2023-08-28 22:33:02 阅读量: 教育文库 文档下载

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

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

数字信号处理

课程设计报告

设计名称:基于matlab的FIR数字滤波器设计

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

一、课程设计的目的

1、通过课程设计把自己在大学中所学的知识应用到实践当中。

2、深入了解利用Matlab设计FIR数字滤波器的基本方法。

3、在课程设计的过程中掌握程序编译及软件设计的基本方法。

4、提高自己对于新知识的学习能力及进行实际操作的能力。

5、锻炼自己通过网络及各种资料解决实际问题的能力。

二、主要设计内容

利用窗函数法设计FIR滤波器,绘制出滤波器的特性图。利用所设计的滤波器对多个频带叠加的正弦信号进行处理,对比滤波前后的信号时域和频域图,验证滤波器的效果。

三、设计原理

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处

四、设计步骤

1.设计滤波器

2.所设计的滤波器对多个频带叠加的正弦信号进行处理

3.比较滤波前后信号的波形及频谱

五、用窗函数设FIR 滤波器的基本方法

基本思路:从时域出发设计 h(n)逼近理想 hd(n)。设理想滤波器的单位响应在时域表达为hd(n),则Hd(n) 一般是无限长的,且是非因果的,不能

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

直接作为FIR 滤波器的单位脉冲响应。要想得到一个因果的有限长的滤波器单位抽样响应 h(n),最直接的方法是先将hd(n)往右平移,再迕行截断,即截取为有限长因果序列:h(n)=hd(n)w(n),并用合适的窗函数迕行加权作为 FIR 滤波器的单位脉冲响应。按照线性相位滤波器的要求,线性相位FIR数字低通滤波器的单位抽样响应h(n)必须是偶对称的。对称中心必须等于滤波器的延时常数,即用矩形窗设计的FIR 低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,返个现象称为吉布斯(Gibbs)效应。为了消除吉布斯效应,一般采用其他类型的窗函数。MATLAB 设计 FIR 滤波器有多种方法和对应的函数。窗函数设计法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。

六、程序设计:

Rs=0.01;

fs=8000;%采样频率

fcuts=[1000 1300 2210 2410];

a=[0 1 0];

dev=Rs*ones(1,length(a));

[M,Wc,beta,ftype]=kaiserord(fcuts,a,dev,fs);

%M为能够满足设计要求的滤波器的最小阶数,Wc为滤波器的截止频率点 %第一个元素f为待设计滤波器的过渡带的起始点和结束点

%第二个元素a指定第一个元素频率段的理想幅度值

%第三个元素dev中的元素为各通带和阻带内允许的幅度最大误差

M=mod(M,2)+M;

window=Kaiser(M+1,beta);

b=fir1(M,Wc,ftype,window);

%输入的第一个参数是滤波器的阶数

%第二个参数是滤波器的截止频率

%第三个参数是滤波器的类型,stop为带阻滤波器

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

%第四个参数是采用的窗函数

[h,f]=freqz(b,1,512);%滤波器的幅频特性图

%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量

figure(1)

plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值

xlabel('频率/赫兹');

ylabel('增益/分贝');

title('滤波器的增益响应');

f1=500;f2=1500;f3=2000;f4=3000;%待滤波正弦信号频率

t=(0:200)/fs;%定义时间的步长

s=sin(2*f1*pi*t)+sin(2*f2*pi*t)+sin(2*f3*pi*t)+sin(2*f4*pi*t);%滤波前信号

sf=filter(b,1,s);%使用filter函数对信号进行滤波

figure(2)

subplot(211)

plot(t,s);%滤波前的信号图像

xlabel('时间/秒');

ylabel('幅度');

title('信号滤波前时域图');

subplot(212)

Fs=fft(s,512);

AFs=abs(Fs);

f=fs/512*(0:255);

plot(f,AFs(1:256));%滤波前的信号频域图

xlabel('频率/赫兹');

ylabel('幅度');

title('信号滤波前频域图');

figure(3)

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

subplot(211)

plot(t,sf)%滤波后的信号图像

xlabel('时间/秒');

ylabel('幅度');

title('信号滤波后时域图');

axis([0.005 0.025 -4 4]);

subplot(212)

Fsf=fft(sf,512);%滤波后的信号频域图

AFsf=abs(Fsf);%信号频域图的幅值

f=(0:255)*fs/512;%频率采样

plot(f,AFsf(1:256))%滤波后的信号频域图

xlabel('频率/赫兹');

ylabel('幅度');

title('信号滤波后频域图');

七、运行结果

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

利用matlab实现了窗函数法的FIR带通滤波器的设计,提供了可以运行的源程序及结果。

八、实验心得

1、对于MATLAB语句有了更加深刻的理解,也注意到了一些运算符号的使

用,例如数组的相乘需用(.*)来表示,而一般数字相乘应用*。还有当运用数组的法时,必须保持数组是等长的,否则,不能相加。

2.想要改变图形的尺寸,可调用AXIS函数。

3.在编程过程中应该注意一些细节问题,例如中英文符号的区别,往往一些错误都是由于粗心而导致的。

4.设计过程中,学习了许多数字信号处理课程中关于数字滤波器的设计的内容,再通过利用参考文献与网络,完成了用Matlab进行数字信号处理课程设计。

5.通过课程设计,加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并能很好地理解与掌握数字信号处理中的基本概念、基本原理、基本分析方法。同时掌握编程方法和解决实际问题的技巧。

6.与其他高级语言的程序设计相比,MATLAB环境下可以更方便、快捷地设计出具有严格线性相位的FIR滤波器,节省大量的编程时间,提高编程效率,且参数的修改也十分方便,还可以进一步进行优化设计。

7.随着版本的不断提高,MATLAB在数字滤波器技术发挥着更大的作用。同时,用MATLAB计算有关数字滤波器的设计参数,如H(z)、h(n)等,对于数字滤波器的硬件实现也提供了一条简单而准确的途径和依据。

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

Top