汉宁窗的matlab实现Word文件下载.docx
《汉宁窗的matlab实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《汉宁窗的matlab实现Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
![汉宁窗的matlab实现Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/279856c8-f03e-45f7-8d7a-25a0fbc56f47/279856c8-f03e-45f7-8d7a-25a0fbc56f471.gif)
日仲)与④伸)不
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
汉明
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
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.
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);
%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;
functionedt_wp_Callback(hObject,eventdata,handles)
%hObjecthandletoedt_wp(seeGCBO)
%Hints:
get(hObject,'
String'
)returnscontentsofedt_wpastext
%str2double(get(hObject,'
))returnscontentsofedt_wpasadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedt_wp_CreateFcn(hObject,eventdata,handles)
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&
isequal(get(hObject,'
BackgroundColor'
),
get(0,'
defaultUicontrolBackgroundColor'
))
set(hObject,'
'
white'
);
functionedt_ws_Callback(hObject,eventdata,handles)
%hObjecthandletoedt_ws(seeGCBO)
)returnscontentsofedt_wsastext
))returnscontentsofedt_wsasadouble
functionedt_ws_CreateFcn(hObject,eventdata,handles)
%---Executesonbuttonpressinbtn_creat.
functionbtn_creat_Callback(hObject,eventdata,handles)globalxn;
%hObjecthandletobtn_creat(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)
H=findobj('
Tag'
edt_wp'
aaa=get(H,H=findobj('
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:
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
yn=conv(xn,h);
string'
wp=str2num(aaa)*pi;
ws=str2num(aaa)*pi;
%色对幅值响应%相对幅值响应
%相位响应
axes(handles.axes1);
plot(h);
grid;
title('
实际单位冲击响应’);
axes(handles.axes2);
plot(w/pi,db);
汉宁窗滤波器的幅频特性'
axes(handles.axes3);
plot(w/pi,pha);
汉宁窗滤波器的相频特性’);
axes(handles.axes4);
plot(xn);
输入信号’);
axes(handles.axes5);
plot(yn);
输出信号’);
%---Executesonbuttonpressinbtn_zero.
functionbtn_zero_Callback(hObject,eventdata,handles)
%hObjecthandletobtn_zero(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)axes(handles.axes1);
plot(0);
axes(handles.axes2);
%---Executesonbuttonpressinbtn_quit.
functionbtn_quit_Callback(hObject,eventdata,handles)
%hObjecthandletobtn_quit(seeGCBO)
%handlesstructurewithhandlesanduserdata(seeGUIDATA)close(gcf);
四、标准函数调用:
用wn=(hanning(N))'
替换wn=0.5*(1-cos(2*pi*n/(N-1)))
即可实现汉宁窗函数的调用。
五、分析和总结:
所编程序运行结果与matlab内置汉宁窗滤波器设计函数所得结果相比,带宽基本一致,误差相对较小。
matlab的使
通过本次课程设计,使我更加深切的了解了
用,以及简单的窗函数的设计方法。