MATLABGUI设计FIR滤波器窗函数docx.docx

上传人:b****8 文档编号:10398222 上传时间:2023-02-10 格式:DOCX 页数:23 大小:24.68KB
下载 相关 举报
MATLABGUI设计FIR滤波器窗函数docx.docx_第1页
第1页 / 共23页
MATLABGUI设计FIR滤波器窗函数docx.docx_第2页
第2页 / 共23页
MATLABGUI设计FIR滤波器窗函数docx.docx_第3页
第3页 / 共23页
MATLABGUI设计FIR滤波器窗函数docx.docx_第4页
第4页 / 共23页
MATLABGUI设计FIR滤波器窗函数docx.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

MATLABGUI设计FIR滤波器窗函数docx.docx

《MATLABGUI设计FIR滤波器窗函数docx.docx》由会员分享,可在线阅读,更多相关《MATLABGUI设计FIR滤波器窗函数docx.docx(23页珍藏版)》请在冰豆网上搜索。

MATLABGUI设计FIR滤波器窗函数docx.docx

MATLABGUI设计FIR滤波器窗函数docx

 

1数字滤波器的概述................................................................................................错误!

未定义书签。

FIR数字滤波器设计原理

错误!

未定义书签。

FIR数字滤波器的特性

错误!

未定义书签。

窗函数的介绍

错误!

未定义书签。

2FIR数字滤波器设计及实现

错误!

未定义书签。

低通滤波器的设计

错误!

未定义书签。

高通滤波器的设计

错误!

未定义书签。

带通滤波器的设计

错误!

未定义书签。

带阻滤波器的设计

错误!

未定义书签。

3基于MATLABGUI的FIR滤波器的仿真

错误!

未定义书签。

FIR数字滤波器设计所实现的任务

错误!

未定义书签。

FIR数字滤波器界面设计

错误!

未定义书签。

FIR数字滤波器函数的编写

错误!

未定义书签。

菜单FilterType的回调函数

错误!

未定义书签。

显示类型DispType的函数

错误!

未定义书签。

阶数N和最小阶数

N按钮的函数

错误!

未定义书签。

文本编辑框的回调函数

错误!

未定义书签。

滤波器波形按钮的回调函数

错误!

未定义书签。

文本框Rp和Rs的函数

错误!

未定义书签。

产生信号按钮的回调函数

错误!

未定义书签。

滤波后的信号按钮的回调函数

错误!

未定义书签。

按钮Quit的回调函数

错误!

未定义书签。

总程序的编写错误!

未定义书签。

4实验结果与显示

错误!

未定义书签。

5结束语错误!

未定义书签。

6感谢错误!

未定义书签。

7参考文献错误!

未定义书签。

附录错误!

未定义书签。

 

基于MATLAB的FIR数字滤波器的设计与仿真

 

李宏华

湛江师范学院信息科学与技术学院,湛江524048

 

摘要:

本文从FIR数字滤波器的设计原理和特性入手,实现了用MATLAB设计FIR数字滤波器的功能,

重点阐述了通过MATLABGUI实现了FIR数字滤波器的仿真。

详细介绍了MATLABGUI界面的构建与回

调函数的程序编写与调试。

关键词:

MATLAB;GUI;FIR滤波器

 

TheDesignandSimulationofFIRDigitalFilterbaseonATLAB

 

LIHonghua

InformationScience&TechnologySchool,ZhanjiangNormalUniversity,zhanjiang,524048China

 

Abstract:

ThispaperstartswiththedesignprinciplesandcharacteristicsoftheFIRdigitalfilter,Achievethe

taskofusingMATLABsoftwaretodesigntheFIRdigitalfilter,inparticularintroductiontocompletethesimulationoftheFIRdigitalfilterbaseonMATLABGUIsoftware.Comprehensiveintroducetothebuilding

ofGUIinterfaceandtheprogramcompiledwithdebuggingofthecallbackfunction.

Keyword:

MATLAB;GUI;FIRFilter

 

1数字滤波器的概述

FIR数字滤波器设计原理

[1]中介绍了数字滤波器冲激响应的时域特征,可将数字滤波器分为2种,即无限长冲激响应滤波器(IIR)和有限长冲激响应滤波器(FIR)。

FIR具有突出的优点:

系统总是稳定的、易于实现线性相位、允许设计多通带(或多阻带)滤波器。

但与IIR相比,在满足同样的阻带衰减的情况下需要较高的阶数。

FIR的冲激响应h(k)是有限长的M阶FIR系统函数可表示为

M

h(k)zk

H(z)

k

0

M

滤波器的输出:

y(k)h(k)x(k)h(i)x(ki)

i0

它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,[2]中给出的设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。

在这里我们利用窗函数法设计FIR滤波器。

给定所要求的滤波器的频率响应Hd(ejw),

 

要求设计一个FIR滤波器的频率响应H(ejw)来逼近Hd(ejw).设计是在时域进行的,首先由傅立叶变换导出无限长的序列hd(n),然后用窗函数截断hd(n),即:

h(n)=hd(n)w(n)。

FIR数字滤波器的特性

FIR滤波器有以下特点:

(1)系统的单位冲激响应h(n)在有限个n值处不为零;

(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统);

(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽

样结构)也包含有反馈的递归部分。

因为FIR数字滤波器的单位冲激响应是有限长的,所以它永远都是稳定的。

[3]说明了

达到具有线性相位这一要求,仅需要对FIR数字滤波器的冲激响应h(n)施加一定的约

 

束。

令z

ejw,就可由H(z)得到FIR数字滤波器的频率响应:

N

1

H(ej

)H(z)|

j

h(n)ejn

H()ej()

(1-2-1)

ze

n

0

式中H(

)是H(ej)的幅频特性,

()是H(ej

)的相频特性

()

arctan(Im(H(ej

)))

(1-2-2)

RE(H(ej

))

[4]中讨论了由于h(n)的长度N取奇数或偶数时对H(w)的特性有影响,FIR滤波器的幅频特性可以分为以下4种情况:

(1)第Ⅰ种类型:

h(n)为偶对称,且N为奇数

 

N1

根据式:

H()

n0

 

h(n)cos[(N1n)]可以得到滤波器的幅频函数为:

2

(N1)/2

H()

a(n)cos(n)

(1-2-3)

n0

其中a(0)

h(N1),a(n)

2h(N

n),n1,2,⋯,N1。

幅度函数H()对0,,2

2

2

2

呈偶对称。

(2)第Ⅱ种类型:

h(n)为偶对称,且N为偶数

 

N1

根据式:

H()

n0

 

h(n)cos[(N1n)]可得滤波器的幅频函数为:

2

N/2

1)

H()

b(n)cos(n

(1-2-4)

n1

2

 

其中:

b(n)

N

n),n

N

幅度函数H(

)对于

0或2呈偶对称。

2h(

1,2,⋯,

2

2

果数字滤波器在

处不为零,如本文设计的高通滤波器和带阻滤波器则不能用这

一类型。

(3)第Ⅲ种类型:

h(n)为奇对称,且N为奇数

N

1

根据式:

H(

h(n)sin(N1

n)可得滤波器的幅频函数为:

n

0

2

(N1)/2

H()

c(n)sin(n)

(1-2-5)

n1

其中c(n)2hN

n,n

1,2,⋯,N-1。

数字滤波器在

=0,

,2处不为零如低通

2

2

滤波器、高通滤波器、带阻滤波器,则不适合用这类滤波器来设计。

(4)第Ⅳ种类型:

h(n)为奇对称,且N为偶数

 

N

1

(N1

根据式:

H(

h(n)sin

n)可得滤波器的幅频函数可表示为:

n

0

2

N/2

1)

(1-2-6)

H()d(n)sin

(n

n1

2

其中:

d(n)

2h

N

n,n

1,2,⋯,N。

幅度函数H()对于

呈偶对称。

如果数

2

2

字滤波器在

0,2

处不为零如低通滤波器、带阻滤波器,则不适合用这类数字滤波

器来设计。

窗函数的介绍

设计滤波器尽量要求窗函数满足以下两项要求:

(1)窗谱主瓣尽可能地窄,以获取较陡的过渡带。

(2)尽量减少窗谱的最大旁瓣的相对幅度。

也就是能量尽量集中于主瓣,这样使尖峰和波纹减小,就可增大阻带的衰减。

但是这两项要求是不能同时满足的。

当选用主瓣宽度较窄时,虽然得到陡峭的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时,虽能得到平坦的幅度响应和较小的阻带波纹,但过渡带加宽,即主瓣会加宽。

因此,实际所选用的窗函数往往是它们的折中。

设计FIR滤波器常用的窗函数有:

矩形窗、三角窗、汉宁窗、海明窗、布拉克曼窗、凯塞窗等。

以下是几种窗函数的性能比较:

窗函数

旁瓣峰值衰

等效凯塞尔

主瓣过渡带

精确过渡带

最小阻带衰

减(dB)

窗(

宽(

宽(

减(Db)

 

矩形窗

-13

0

4

/N

/N

-21

三角窗

-25

8

/N

/N

-25

汉宁窗

-31

8

/N

/N

-44

海明窗

-41

8

/N

/N

-53

布莱克曼窗

-57

12

/N

11

/N

-74

凯赛尔窗

-57

10

/N

10

/N

-80

想详细了解以上几个窗函数请查阅参考文献

[4]或者用命令wvtool(windows(N))查看。

2FIR数字滤波器设计及实现

低通滤波器的设计

低通滤波器允许信号中的低频或直流分量通过,抑制高频分量或干扰和噪声。

程序如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fp1=10;fs1=15;fs=100;boxcarwindow

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fp1=10;%低通通带模拟截止频率

fs1=15;%低通阻带模拟截止频率

fs=100;%采集频率

wp1=2*pi*fp1/fs;%模拟转变为数字域的截止频率

ws1=2*pi*fs1/fs;

delta_w=ws1-wp1;%过渡带宽

N=ceil*pi/delta_w)+1;%最小阶数N

window=boxcar(N)';

%N=ceil*pi/delta_w)+1;%最小阶数N

%window=bartlett(N)';%注意要改一下过渡带宽的系数

%N=ceil*pi/delta_w)+1;%最小阶数N

%window=hanning(N)';

%N=ceil*pi/delta_w)+1;%最小阶数N

%window=hamming(N)';

%N=ceil(11*pi/delta_w)+1;%最小阶数N

%window=blackman(N)';

%N=ceil(10*pi/delta_w)+1;%最小阶数N

%window=kaiser(N+1)';

Wn=(fp1+fs1)/fs;

%理想LPF的截止频率

[b,a]=fir1(N-1,Wn,window);

[H,w]=freqz(b,1,512);

db=20*log10(abs(H));

%dbimagine

t=(0:

200)/fs;

Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%输入信号

 

FilterSignal=filter(b,1,Signal);

subplot(2,2,1);

plot(w*fs/(2*pi),db);xlabel('频率');ylabel('db');title('滤波器的相对振幅');gridon;subplot(2,2,2);

plot(w*fs/(2*pi),angle(H));xlabel('频率');ylabel('angle(H)');title('滤波器相位响应');grid

 

on;

subplot(2,2,3);

plot(t,Signal);xlabel('t');ylabel('Signal');title('滤波前的信号波形');gridon;

subplot(2,2,4);

plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形');

gridon;

高通滤波器的设计

高通滤波器允许信号中的高频分量通过,抑制低频或直流分量。

程序如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%fs1=10,fp1=15;fs=100(wp1=;ws1=

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fs1=10;%高通阻带模拟截止频率

fp1=15;%高通通带模拟截止频率

fs=100;%采用频率

wp1=2*pi*fp1/fs;%模拟转变为数字域的截止频率

ws1=2*pi*fs1/fs;

delta_w=wp1-ws1;%过渡带宽

N=ceil*pi/delta_w)+1;N=N+rem(N,2);

window=boxcar(N+1)';

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=bartlett(N+1)';

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=hanning(N+1)';

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=hamming(N+1)';

%N=ceil(11*pi/delta_w)+1;N=N+rem(N,2);

%window=blackman(N+1)';

%N=ceil(10*pi/delta_w)+1;N=N+rem(N,2);

%window=kaiser(N+1)';

 

Wn=(fp1+fs1)/fs;

%理想LPF的截止频率

[b,a]=fir1(N,Wn,'high',window);

[H,w]=freqz(b,1,512);

db=20*log10(abs(H));

%dbimagine

t=(0:

200)/fs;

Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%输入信号

 

FilterSignal=filter(b,1,Signal);

subplot(2,2,1);

plot(w*fs/(2*pi),db);xlabel('频率');ylabel('db');title('滤波器的相对振幅');gridon;subplot(2,2,2);

plot(w*fs/(2*pi),angle(H));xlabel('频率');ylabel('angle(H)');title('滤波器相位响应');gridon;

subplot(2,2,3);

 

plot(t,Signal);xlabel('t');ylabel('Signal');title('滤波前的信号波形');gridon;

subplot(2,2,4);

plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形');

gridon;

带通滤波器的设计

带通滤波器允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声。

程序如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%fp1=20;fp2=30;fs1=10;fs4=40;fs=100

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%[n,Wn,beta,ftype]=kaiserord([7131723],[010],[],100);

fp1=20;%带通通带模拟截止频率

fp2=30;%带通通带模拟截止频率

fs1=10;

fs2=40;

fs=100;

wp1=2*pi*fp1/fs;%数字域的截止频率

wp2=2*pi*fp2/fs;

ws1=2*pi*fs1/fs;

ws2=2*pi*fs2/fs;

deltaw1=wp1-ws1;%Transitionbandwidth

deltaw2=ws2-wp2;

delta_w=min(deltaw1,deltaw2);

N=ceil*pi/delta_w)+1;

window=boxcar(N+1);

%N=ceil*pi/delta_w)+1;

%window=bartlett(N+1);

%N=ceil*pi/delta_w)+1;

%window=hanning(N+1);

%N=ceil*pi/delta_w)+1;

%window=hamming(N+1);

%N=ceil(11*pi/delta_w)+1;

%window=blackman(N+1);

%N=ceil(10*pi/delta_w)+1;

%window=kaiser(N+1);

b=fir1(N,[wp1/piwp2/pi],window);

[H,w]=freqz(b,1,512);

db=20*log(abs(H));

t=(0:

200)/fs;

Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%

FilterSignal=filter(b,1,Signal);

 

输入信号

subplot(2,2,1);

plot(w*fs/(2*pi),db);xlabel('频率');ylabel('db');title('滤波器的相对振幅');gridon;subplot(2,2,2);

 

plot(w*fs/(2*pi),angle(H));xlabel('频率');ylabel('angle(H)');title('滤波器相位响应');grid

on;

subplot(2,2,3);

plot(t,Signal);ylabel('Signal');title('滤波前的信号波形');gridon;subplot(2,2,4);

plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形');gridon;

带阻滤波器的设计

带阻滤波器抑制一定频段内的信号,允许该频段以外的信号通过。

程序如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%fp1=10;fp2=40;fs1=20;fs2=30;fs=100;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%[n,Wn,beta,ftype]=kaiserord([7131723],[010],[

],100);

fp1=10;%带通通带模拟截止频率

fp2=40;%带通通带模拟截止频率

fs1=20;

fs2=30;

fs=100;

wp1=2*pi*fp1/fs;

wp2=2*pi*fp2/fs;

ws1=2*pi*fs1/fs;%数字域的截止频率

ws2=2*pi*fs2/fs;

delta1=ws1-wp1;

delta2=wp2-ws2;

delta_w=min(delta1,delta2);%过渡带宽

N=ceil*pi/delta_w)+1;N=N+rem(N,2);

window=boxcar(N+1);

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=bartlett(N+1);

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=hanning(N+1);

%N=ceil*pi/delta_w)+1;N=N+rem(N,2);

%window=hamming(N+1);

%N=ceil(11*pi/delta_w)+1;N=N+rem(N,2);

%window=blackman(N+1);

%N=ceil(10*pi/delta_w)+1;N=N+rem(N,2);

%window=kaiser(N+1);

b=fir1(N,[ws1/piws2/pi],'stop',window);

[H,w]=freqz(b,1,512);

db=20*log(abs(H));

t=(0:

200)/fs;

Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%输入信号

FilterSignal=filter(b,1,Signal);

subplot(2,2,1);

plot(w*fs/(2*pi),db);xlabel('频率');ylabel('db');title('滤波器的相

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1