汉宁窗的matlab实现.docx
- 文档编号:885706
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:13
- 大小:398.51KB
汉宁窗的matlab实现.docx
《汉宁窗的matlab实现.docx》由会员分享,可在线阅读,更多相关《汉宁窗的matlab实现.docx(13页珍藏版)》请在冰点文库上搜索。
汉宁窗的matlab实现
数字信号处理
课程设计
题目:
用汉宁窗设计FIR数字
低通滤波器对给定数据进行滤波
院系:
专业:
通信工程
班级:
学号:
—
姓名:
指导教师:
职称:
1.1FIR滤波器:
有限长单位脉冲响应数字滤波器(FiniteImpulseResponse
DigitalFilter,缩写FIRDF):
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,最大优点是可以实现线性相性滤波,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
FIR滤波器的设计方法主要分为两类:
第一类是基于逼近理想滤波器器特性的方法包括窗函数法、频率采样法、和等波纹最佳逼近法;第二类是最优设计法。
设FIRDF的单位脉冲响应h(n)的长度为N,则其频率响应函数为
N二
H(ej)二為h(n)eTn(1-1)
一般将H(ej)表示成如下形式:
H(ej)二Hg()e门)(1-2)
式中,Hgj)是••的实函数(可以去负值)。
与前面的表示形式,即H(ejK))=Hg伸)e曲®相比,Hg(co)与国不同。
日仲)与④伸)不
HgCJ为幅频特性函数,称*•)为相频特性函数。
第一类线性相位FIRDF的相位特性函数是■的严格线性函
数:
■■--'■■(1-3)
第二类线性相位FIRDF的相位特性函数如下:
-…0-■(1-4)
式中,•是常数,厲是起始相位。
入在信号处理中很有实用价值(如希伯尔特变换器),这是FIRDF除了线性相位滤波外,还具有真正交变换作用。
1.2窗函数设计法:
窗函数设计法的基本思想是用FIRDF逼近希望的滤波特性。
设希望逼近的滤波器的频率响应为Hde「,其单位脉冲响应用
hdn表示。
为了设计简单方便,通常选择Hdej■-为具有片段常数
特性的理想滤波器。
因此hdn是无限长非因果序列,不能直接作为FIRDF的单位脉冲响应。
窗函数设计法就是截取hdn为有限长
的一段因果序列,并用合适的窗口函数进行加权作为FIRDF的单
位脉冲响应hn。
常见的窗函数,可以分为以下主要类型,
(1)幂窗--米用时间变量某种幂次的函数,如矩形、二角形、梯形或其它时间(t)的高次幕;
(2)三角函数窗--应用三角函数,即正弦或余弦函数等组合成复合函数,例如汉宁窗、海明窗等;
(3)指数窗--采用指数时间函数,例如高斯窗等⑸
其性能如表1-1所示:
名称
滤波器
过渡带宽
最小阻
带衰减
名称
滤波器
过渡带宽
最小阻
带衰减
矩形
1.8n/M
21dB
PARZENWIN
6.6n/M
56db
巴特利特
6.1n/M
25dB
FLATTOPWIN
19.6n/M
108db
汉宁
6.2n/M
44dB
GAUSSWIN
5.8n/M
60db
汉明
6.6n/M
51dB
BARTHANNWIN
3.6n/M
40db
布莱克曼
11n/M
74dB
BLACKMANHARR
S6.1n/M
109db
BOHMANWII
J5.8n/M
51.5db
CHEBWIN
15.2n/M
113db
NUTTALLWIN
15.4n/M
108db
TUKEYWIN
2.4n/M
22db
表1-1常见窗函数性能表
用窗口设计法基本步骤如下:
(1)构造希望逼近的频率响应函数Hde「。
以低通线性相位
FIRDF设计为例,一般选择Hder'为线性理想低通滤波器,即
(2)求出hdn。
对Hde「进行IFT得到
(3)加窗得到FIRDF的单位脉冲响应hn,
(1-7)
式中,wn称为窗口函数,其长度为N。
如果要求第一类线性相
位FIRDF,贝卩要求hn关于N—1/2点偶对称。
而hdn关于n=.点
偶对称,所,N-1/2,同时要求wn关于N-1/2点偶对称
1.3汉宁窗:
汉宁窗(HanningWindow)又称升余弦窗,汉宁窗可以看
作是3个矩形时间窗的频谱之和,或者说是3个sint型函数之
和,而括号中的两项相对于第一个谱窗向左、右各移动了n/T,从而使旁瓣互相抵消,消去高频干扰和漏能。
可以看出,汉宁窗主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观
点出发,汉宁窗优于矩形窗.但汉宁窗主瓣加宽,相当于分析
带宽加宽,频率分辨力下降。
根据傅里叶变换的线性性质和调制定理得到
当N••1时,N-1"N,则
Whng「为汉宁窗的幅度响应函数。
二、设计流程图:
本课程设计主要是对一段数据,加入噪声后,用汉宁窗函数
法设计出的FIR滤波器对加入噪声后的数据信号进行滤波去噪处理,并且分析对比前后时域和频域波形的程序设计。
程序的设计
流程图如下图2-1所示:
开始
图2-1程序设计流程图
三、matlab设计函数及结果:
用汉宁窗设计的FIR数字低通滤波器的程序(含界面):
functionvarargout=hanning(varargin)
%HANNINGM-fileforhanning.fig
%HANNING,byitself,createsanewHANNINGorraisestheexisting
%singleton*.
%
%H=HANNINGreturnsthehandletoanewHANNINGorthehandleto
%theexistingsingleton*.
%
%HANNING('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinHANNING.Mwiththegiveninputarguments.
%
%HANNING('Property','Value',...)createsanewHANNINGorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforehanning_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtohanning_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelphanning%LastModifiedbyGUIDEv2.529-Jun-201111:
03:
04%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct(
'gui_Name',
mfilename,...
'gui_Singleton'
gui_Singleton,...
'gui_OpeningFcn'
@hanning_OpeningFcn,
'gui_OutputFcn'
@hanning_OutputFcn,
'gui_LayoutFcn'
[],...
'gui_Callback'
[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});endifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforehanningismadevisible.
functionhanning_OpeningFcn(hObject,eventdata,handles,varargin)
globalxn;globalhj1;globalhj2;
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstohanning(seeVARARGIN)
hj1=load('E:
\a.txt');
xn=hj1;
%Choosedefaultcommandlineoutputforhanninghandles.output=hObject;
%Updatehandlesstructureguidata(hObject,handles);
%UIWAITmakeshanningwaitforuserresponse(seeUIRESUME)
%uiwait(handles.hanning_gui);
%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=hanning_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;
functionedt_wp_Callback(hObject,eventdata,handles)
%hObjecthandletoedt_wp(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsofedt_wpastext
%str2double(get(hObject,'String'))returnscontentsofedt_wpasadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedt_wp_CreateFcn(hObject,eventdata,handles)
%hObjecthandletoedt_wp(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&&isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionedt_ws_Callback(hObject,eventdata,handles)
%hObjecthandletoedt_ws(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsofedt_wsastext
%str2double(get(hObject,'String'))returnscontentsofedt_wsasadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedt_ws_CreateFcn(hObject,eventdata,handles)
%hObjecthandletoedt_ws(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&&isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%---Executesonbuttonpressinbtn_creat.
functionbtn_creat_Callback(hObject,eventdata,handles)globalxn;globalhj1;globalhj2;
%hObjecthandletobtn_creat(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)
H=findobj('Tag','edt_wp');aaa=get(H,H=findobj('Tag','edt_ws');aaa=get(H,deltaw=ws-wp;
N0=ceil(6.2*pi/deltaw);
N=N0+mod(N0+1,2);
n=0:
N-1;
wn=0.5*(1-cos(2*pi*n/(N-1)));
wc=(ws+wp)/2;
nn=(N-1)/2;
hd=sin(wc*(n-nn)+eps)./(pi*(n-nn)+eps);h=hd.*wn;
[H,w]=freqz(h,1,1000,'whole');
H=(H(1:
1:
501))';
w=(w(1:
1:
501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));pha=angle(H);
yn=conv(xn,h);
'string');wp=str2num(aaa)*pi;
'string');ws=str2num(aaa)*pi;
%色对幅值响应%相对幅值响应
%相位响应
axes(handles.axes1);plot(h);
grid;title('实际单位冲击响应’);axes(handles.axes2);plot(w/pi,db);;
grid;title('汉宁窗滤波器的幅频特性');
axes(handles.axes3);plot(w/pi,pha);
grid;title('汉宁窗滤波器的相频特性’);
axes(handles.axes4);plot(xn);
grid;title('输入信号’);
axes(handles.axes5);plot(yn);
grid;title('输出信号’);
%---Executesonbuttonpressinbtn_zero.
functionbtn_zero_Callback(hObject,eventdata,handles)
%hObjecthandletobtn_zero(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)axes(handles.axes1);plot(0);
axes(handles.axes2);plot(0);
axes(handles.axes3);plot(0);
axes(handles.axes4);plot(0);
axes(handles.axes5);plot(0);
%---Executesonbuttonpressinbtn_quit.
functionbtn_quit_Callback(hObject,eventdata,handles)
%hObjecthandletobtn_quit(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)close(gcf);
四、标准函数调用:
用wn=(hanning(N))'替换wn=0.5*(1-cos(2*pi*n/(N-1)))
即可实现汉宁窗函数的调用。
五、分析和总结:
所编程序运行结果与matlab内置汉宁窗滤波器设计函数所得结果相比,带宽基本一致,误差相对较小。
matlab的使
通过本次课程设计,使我更加深切的了解了
用,以及简单的窗函数的设计方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉宁窗 matlab 实现