您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 我让他数字信号课程设计
数字信号处理课程设计设计并实现FIR数字滤波器的窗口设计算法一、课程设计目的:综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。二、课程设计要求:输入数字滤波器指标,包括滤波器类型(低通、带通、带阻或高通等),通带截止频率,通带最大波动,阻带开始频率,阻带衰减,设计得到FIR滤波器,并画出设计得到的滤波器的增益曲线图(要有坐标标度)。为了使编制的程序操作方便,设计处理系统的用户界面:在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择输入信号并显示相应的输出信号等。三、课程设计相关软件Matlab语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,Matlab功能强大,简单易学、编程效率高,深受广大科技工作者的欢迎。特别是Matlab还具有信号分析工具箱,不需要具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。因此,选择用Matlab进行编程设计。GUI(GraphicalUserInterfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。GUI界面是用户与计算机程序的接触点或交互方式,是用户与计算机进行信息交流的方式。计算机在屏幕显示图形和文本,若有扬声器还可产生声音。用户通过输入设备,如:键盘、鼠标、跟踪球、绘制板或麦克风,与计算机通讯。用户界面设定了如何观看和如何感知计算机、操作系统和应用程序。通常,多是根据目的结构和用户界面功能的有效性来选择计算机或程序。图形用户界面或GUI是包含图形对象,如:窗口、图标、菜单和文本的用户界面。以某种方式选择或激活这些对象,通常引起动作或发生变化。最常见的激活方法是用鼠标或其他点击设备去控制屏幕上的鼠标指针的运动。按下鼠标按钮,标志着对象的选择或其他动作。GUI可以在Matlab中生成非常有效的工具和应用程序,或是建立演示工作的交互式界面。生成用户图形界面以下优点:1.对于一个需要多次使用的实用函数、菜单、按钮或文本框具有很重要的意义:编写函数来开发应用程序供别人使用;用GUI做的用户界面简洁,性能良好。2.要使用GUI环境设计一个界面的基本问题是:一是要熟悉各个控件对象及其属性,控件对象是事件响应的图形界面对象;当某一事件发生时,应用程序会作出响应并执行某些预定的功能子程序。控件的操作的结果是可见的,有的可以改变应用程序的初始状态,观察不同的初始条件下的图形,对象的变化。二是每个图形对象都有唯一的句柄,只有获得了图形对象的句柄,才可以对图形对象进行控制,设置或修改对象的属性,了解了图形的句柄是为后面回调函数的调用做好准备。三是使用回调函数来实现图形界面的功能,这是最重要的一步。四、课程设计内容1、FIR数字滤波器设计程序设计原理1)窗函数设计线形相位FIR滤波器步骤1.确定数字滤波器的性能要求:临界频率{ωk},滤波器单位脉冲响应长度N;2.根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应Hd(ejω)的幅频特性和相频特性;3.求理想单位脉冲响应hd(n),在实际计算中,可对Hd(ejω)按M(M远大于N)点等距离采样,并对其求IDFT得hM(n),用hM(n)代替hd(n);4.选择适当的窗函数w(n),根据h(n)=hd(n)w(n)求所需设计的FIR滤波器单位脉冲响应;5.求H(ejω),分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述设计过程,以得到满意的结果。窗函数的傅式变换W(ejω)的主瓣决定了H(ejω)过渡带宽。W(ejω)的旁瓣大小和多少决定了H(ejω)在通带和阻带范围内波动幅度,常用的几种窗函数有:矩形窗w(n)=RN(n);Hanning窗;Hamming窗;Blackmen窗;Kaiser窗。式中Io(x)为零阶贝塞尔函数。本设计中分别设计了6种窗口的低通和带通滤波器,分别通过GUI界面实现操作。2、gui界面的设计GUI开发环境(GUIDevelopmentEnvironment,GUIDE)MATLAB提供了一套可视化的创建图形窗口的工具,使用用户界面开发环境可方便的创建GUI应用程序,它可以根据用户设计的GUI布局,自动生成M文件的框架,用户使用这一框架编制自己的应用程序。MATLAB提供了一套可视化的创建图形用户接口(GUI)的工具,包括:*布局编辑器(LayoutEdtor)-------在图形窗口中加入及安排对象。布局编辑器是可以启动用户界面的控制面板,上述工具都必须从布局编辑器中访问,用guide命令可以启动,或在启动平台窗口中选择GUIDE来启动布局编辑器。*几何排列工具(AlignmentTool)-----调整各对象相互之间的几何关系和位置*属性编辑器(PropertyInspector)-----查询并设置属性值*对象浏览器ObjectBrowser)-----用于获得当前MATLAB图形用户界面程序中所有的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器。*菜单编辑器(MenuEditor)-----建立窗口菜单条的菜单和任何构成布局的弹出菜单在MATLAB中,GUI的设计是以M文件的编程形式实现的,GUI的布局代码存储在M文件和MAT文件中,而在MATLAB6中有了很大的改变,MATLAB6将GUI的布局代码存储在FIG文件中,同时还产生一个M文件用于存储调用函数,在M文件中不再包含GUI的布局代码,在开发应用程序时代码量大大减少。1.布局编辑器(Layouteditor):用于从控件选择板上选择控件对象并放置到布局区去,布局区被激活后就成为图形窗口。在命令窗口输入GUIDE命令或点击工具栏中的guide图标都可以打开空白的布局编辑器,在命令窗口输入GUIDEfilename可打开一个已存在的名为filename图形用户界面。(1)将控件对象放置到布局区a.用鼠标选择并放置控件到布局区内;b.移动控件到适当的位置;c.改变控件的大小;d.选中多个对象的方法;(2)激活图形窗口选Tools菜单中的ActivateFigure项或点击工具条上的ActivareFigure按钮,在激活图形窗口的同时将存储M文件和FIG文件,如所建立的布局还没有进行存储,用户界面开发环境将打开一个SaveAs对话框,按输入的文件的名字,存储一对同名的M文件和带有.fig扩展名的FIG文件。(3)运行GUI程序在matlab命令窗口中输入guide命令,弹出如下界面:可以创建新界面或者打开已经存在的gui图形。初次使用,选择“createnewgui”项,默认空白界面,确认后即可得到空白gui模板。进入模板后即可首先进行可视化设计。界面如下图示:通过MATLAB中的GUIDE工具创建出图形用户界面,设置自动生成M-file代码,其设计出的界面效果图如下所示:本辅助设计程序主要是设计线性相位有限长单位冲激响应(FIR)数字滤波器的。设计原理是窗函数法,也称为傅立叶级数法。上面只是设计了一个gui界面而已,还没有具体的实用价值,其要实现相关的功能,必须依靠后台编程,因此,为了得到其价值,我们必须对回调函数进行设计。在界面保存之后,系统将自动生成部分代码,以便操用户更好的完成相关操作。实现过程原理输入滤波器的通带截止频率Ws,阻带开始频率Wp,通带最大波动Ap,阻带衰减As,选择滤波器类型,求出并返回N值及系统系数。对于Kaiser窗,还需要有beta值,其值越大,则其频谱旁瓣降低,主瓣增宽。矩形窗由函数boxcar得到,巴特列特窗由函数bartlett得到,汉宁窗由函数hanning得到,海明窗由函数hamming得到,布拉克曼窗由函数blackman得到,凯泽窗由函数kaiser得到,数字滤波器频率响应由freqz得到。若阻带衰减在小于21则选矩形窗较好;若阻带衰减在21~25之间则选巴特列特窗较好;若阻带衰减在25~44则选汉宁窗较好;若阻带衰减在45~53之间则选海明窗较好;若阻带衰减在54~74之间则选布拉克曼窗较好;若阻带衰减在74~80则选凯泽窗较好;用凯泽窗时,beta=7.865。3、设计的程序调试及结果分析1.具体调试过程在“各参数的输入”栏5个编辑框的回调函数的定义中相应加入如下代码(即定义变量):handles.Wp=str2double(get(hObject,'String'));guidata(hObject,handles);%如果输入不符合数据规范标准则出现提示ifhandles.Wp=0|handles.Wp=1msgbox('通带截止频率必须是0到1之间的数','输入错误','error','modal');endhandles.Ws=str2double(get(hObject,'String'));guidata(hObject,handles);%如果输入不符合数据规范标准则出现提示ifhandles.Ws=0|handles.Ws=1msgbox('通带截止频率必须是0到1之间的数','输入错误','error','modal');endhandles.Ap=str2double(get(hObject,'String'));guidata(hObject,handles);handles.As=str2double(get(hObject,'String'));guidata(hObject,handles);handles.beta=str2double(get(hObject,'String'));guidata(hObject,handles);2.窗函数类型的选择:ifhandles.As21msgbox('建议使用矩形窗');endifhandles.As=21&handles.As25msgbox('建议使用巴特列特窗');endifhandles.As=25&handles.As44msgbox('建议使用汉宁窗');endifhandles.As=44&handles.As53msgbox('建议使用海明窗');endifhandles.As=53&handles.As74msgbox('建议使用布拉克曼窗');endifhandles.As=74&handles.As80msgbox('建议使用凯泽窗');end3.计算FIR滤波器的阶数N和系数以及绘图程序ifhandles.lvb1==0&handles.lvb2==0&handles.lvb3==0&handles.lvb4==0warndlg('请选择滤波器类型');%判断是否已经选择了滤波器的类型elseWp=handles.Wp*pi;Ws=handles.Ws*pi;tr_width=Ws-Wp;%过渡带宽p=[0.92.13.13.35.55];%过渡带宽系数ifhandles.As21N0=ceil(2*pi*p(1)/tr_width);N=N0+mod(N0+1,2);%确保其长度N为奇数set(handles.n,'string',N);%将计算的阶数N发送到界面显示w1=boxcar(N);%矩形窗ifhandles.lvb1==1;wn=Wp/pi;b=fir1(N-1,wn,w1)%其函数默认得到的滤波器是低通滤波器endifhandles.lvb2==1;wn=Ws/pi;b=fir1(N-1,wn,'high',w1)%实现高通滤波器endifhandles.lvb3==1;wn=[handles.Wphandles.Ws];b=fir1(N-1,wn,'bandpass',w1)%实现带通滤波器endifhandles.lvb4==1;wn=[handles.Wphandles.Ws];b=f
本文标题:我让他数字信号课程设计
链接地址:https://www.777doc.com/doc-6131965 .html