数字信号处理实验二频率采样型滤波器实验报告于斌电信硕3121305080152015/11/08一.实验目的1.学习使用频率采样型结构实现FIR滤波器,初步熟悉FIR滤波器的线性相位特点。2.直观体会频率采样型滤波器所具有的“滤波器组”特性,即在并联结构的每条支路上可以分别得到输入信号的各次谐波。3.学习使用周期冲激串检测所实现滤波器的频域响应。二.实验内容三、实验记录及分析基于Gui的人机化界面:1)结果如下图:05101520253035-0.500.511.522.533.54s(n)ns(n)分析:输入信号为)t1002(cos)2t502(cos21ππππ,图中采样了两个周期共32个点,最大值为4,周期N=16,时域采样结果正确。2)对采样信号的第二个周期(n=N,N+1...L-1)进行离散傅里叶变换,画出幅频特性和相频特性图,观察并分析其特点。结果如图:051015024681012141618Amplitudek|S(k)|051015-0.8-0.6-0.4-0.200.20.40.60.8Anglekangle(S(k))/pi分析:仅在直流分量、一次、二次谐波处有谱线,后面的谱线是由于共轭对称产生的,由于是对第二个周期加窗得到的频率特性,故幅值应乘以sinc函数带来的增益,主瓣附近的频谱结构为2/)2/sin(2/sin)2/sin()(WRwNwNNwwNw,而主瓣宽度为4π/N,故增益为N=16。对直流分量(k=0),幅值为16;对一次谐波(k=1),余弦信号正负各分1/2,故幅值为16212=16;对二次谐波(k=2),幅值为816211。3)结果如图:051015-0.100.10.20.3h(n)nh(n)00.511.5200.511.5Amplitudew/pi|H(w)|00.511.52-1-0.500.51Anglew/piangle(H(w))/pi分析:对H(n)求IDFT得到h(n),然后在h(n)后补足够多的零后做FFT即得到近似的单位圆上的频响H(w),在采样点处H(w)=H(k),由图可看出该滤波器为线性相位低通滤波器,而图中相频曲线为锯齿因为matlab进行了卷绕。4)编程实现图1所示的频率采样型滤波器结构,其中r=0.999,H(k)取第3步中的值。为了简化编程,梳状滤波器可以调用CombFilter.m,谐振器可以调用Resonator2.m,使用helpCombFilter和helpResonator2查看如何配置参数。将第1步生成的采样信号通过该滤波器,画出输出信号第二个周期的时域波形和频谱,并与第2步的频谱进行对比,观察并分析二者的区别。结果如图:1520253035-0.500.511.522.533.54Originalsignal(black)/Afterfiltering(white)ns(n)051015024681012141618Afterfiltering:Amplitudek|Y(k)|051015-1-0.8-0.6-0.4-0.200.20.40.60.81Afterfiltering:Anglekangle(H(k))/pi分析:其中原始信号为黑色,通过滤波器后为白色,可以看到滤波后发生了相位的偏移,时域波形幅度有些许衰减,频域看直流分量和一次谐波基本重叠,没有完全重叠是因为梳状滤波器取得r值不为1,这是为了工程上的稳定性考虑,而二次谐波分量幅值减半,这是因为Y(k)=X(k)*H(k),H(2)的幅值为0.5,故滤波后幅值为8。5)分别画出图1中前4路谐振器的输出信号第二个周期的时域波形,观察并分析输出信号的特点。结果如图:152025303500.51AfterfilteringNo.0signalns0(n)1520253035-2-1012AfterfilteringNo.1signalns1(n)1520253035-0.500.5AfterfilteringNo.2signalns2(n)1520253035-1-0.500.51x10-3AfterfilteringNo.3signalns3(n)分析:信号通过第一路谐振器,k=0,即仅有直流分量,幅度不变;信号通过第二路谐振器,k=1,仅通过一次谐波分量,幅度不变;信号通过第三路谐振器,k=2,仅通过第二次谐波分量,又H(2)处幅值0.5,故信号幅值减半;信号通过第四路谐振器,图中仍有少量信号残留,而理想是没有信号通过,这与谐振器设计不够理想有关。6)将输入信号换成周期为N的冲激串,画出输出信号第二个周期的幅频特性,并与第3步的滤波器幅频特性进行对比,观察并分析二者的关系。0510152000.20.40.60.811.21.4Afterfiltering:Amplitudek|Y(k)|05101520-1-0.8-0.6-0.4-0.200.20.40.60.81Afterfiltering:Anglekangle(H(k))/pi分析:平滑曲线为系统的幅频特性可以看出由于输入的信号为冲击串,其通过一个系统后输出信号应为系统的单位脉冲响应信号,但这里的系统因为r的取值不是1而与实际滤波器的幅频特性有了一定程度的偏差,当r越接近1时偏差越小。三、思考题1)在第2步的幅频特性中,各次谐波的幅度与相应的时域信号幅度有什么关系?答:分析中已经有讨论:由于是对第二个周期加窗得到的频率特性,故幅值应乘以sinc函数带来的增益,主瓣附近的频谱结构为2/)2/sin(2/sin)2/sin()(WRwNwNNwwNw,而主瓣宽度为4π/N,故增益为N=16。对直流分量(k=0),幅值为16;对一次谐波(k=1),余弦信号正负各分1/2,故幅值为16212=16;对二次谐波(k=2),幅值为816211。2)实验中为什么要观察第二个周期,如果直接观察第一个周期会怎么样?答:这是由于梳状滤波器的特性决定的H(z)=1-Nz,故h(n)=δ(n)-δ(n-N),又由于信号是因果的,所以至少要在第二个周期开始观察才能得到正确结果。3)如果取r=0.95,观察会出现什么情况。形成的系统特性将相比理想系统特性有更大的误差,输出信号会有一定程度上的失真。附:matlab原程序:functionvarargout=exe(varargin)%EXEM-fileforexe.fig%EXE,byitself,createsanewEXEorraisestheexisting%singleton*.%%H=EXEreturnsthehandletoanewEXEorthehandleto%theexistingsingleton*.%%EXE('CALLBACK',hObject,eventData,handles,...)callsthelocal%functionnamedCALLBACKinEXE.Mwiththegiveninputarguments.%%EXE('Property','Value',...)createsanewEXEorraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforeexe_OpeningFunctiongetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.Allinputsarepassedtoexe_OpeningFcnviavarargin.%%*SeeGUIOptionsonGUIDE'sToolsmenu.ChooseGUIallowsonlyone%instancetorun(singleton).%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Copyright2002-2003TheMathWorks,Inc.%Edittheabovetexttomodifytheresponsetohelpexe%LastModifiedbyGUIDEv2.526-Oct-201520:03:14%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@exe_OpeningFcn,...'gui_OutputFcn',@exe_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{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT%---Executesjustbeforeexeismadevisible.functionexe_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstoexe(seeVARARGIN)%Choosedefaultcommandlineoutputforexehandles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);%UIWAITmakesexewaitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=exe_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)s=