数字信号课程设计报_第1页
数字信号课程设计报_第2页
数字信号课程设计报_第3页
数字信号课程设计报_第4页
数字信号课程设计报_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要随着信息技术的不断发展,数字信号处理已成为一个极其重要的学科和技术领域,在通信、语音、图像、遥感、生物工程等众多领域得到了广泛的应用。数字信号处理的核心容主要是信号的获取、传输和处理、识别与综合等。信号是信息的载体,系统是信息处理的手段。因此,为了更好的研究信号和系统的基本理论与方法,使同学们更好地理解和掌握数字信号处理的理论知识,在实验过程中,借助MATLAB这个平台来进行辅助设计。MATLAB是用于算法开发、数据可视化、数据分析以与数值计算的高级技术计算语言和交互式环境。作为强大的科学计算平台,它几乎满足所有的计算要求。随着对仿真和程序设计通用性与可视化需求的日益增加,MATLAB着重

2、改善了图形用户界面的制作,极满足了用户的需求。 MATLAB的GUID是专门用于图形用户界面的快速开发环境,本设计利用MATLAB的GUIDE工具箱制作了一套辅助“数字信号处理”课程教学的实验软件包。该实验软件包是由一系列形象的图形用户界面组成,每个界面以坐标窗口、弹出框、按键、动态文本框等为基本部分,构建了较为完善和友好的人机交互方式,使用便捷。关键词 数字信号处理;GUI;教学实验;离散傅里叶变换;数字滤波器 目 录摘要1第1章31.1设计容与要求31.2 MATLAB GUI的简介与特点4第2章基本理论42.1 离散时间信号和离散时间系统42.2 离散傅里叶变换与其快速算法52.3 数字

3、滤波器的原理和设计62.4 双音多频信号检测和语音滤波7第3章系统GUI界面设计与实现83.1 概述83.1.1创建GUI83.1.2写回调函数CallBack103.1.3句柄图形之间的层次关系113.1.4获取与设置对象属性113.2 用户登录界面的设计与实现113.3 离散时间信号与离散时间系统的GUI界面的设计与实现133.3.1 离散时间信号的设计与实现143.3.2 线性卷积的设计与实现163.3.3 离散时间系统的设计与实现173.3.4 离散时间信号傅里叶变换与系统频率响应的设计与实现193.3.5 信号取样的设计与实现213.3.6 Z的正反变换与系统函数的设计与实现233.

4、4 离散傅里叶变换与其快速算法的GUI界面的设计与实现243.4.1 离散傅里叶级数(DFS)的设计与实现243.4.2 离散傅里叶变换(DFT)的设计与实现263.4.3 循环卷积的设计与实现283.4.4 快速傅里叶变换(FFT)303.4.5信号谱分析的设计与实现313.5 数字滤波器的GUI界面的设计与实现323.5.1 巴特沃斯低通滤波器的设计与实现333.5.2 切比雪夫I型低通滤波器的设计与实现343.5.3 窗函数法设计FIR低通滤波器的设计与分析353.5.4 频率取样法设计FIR低通滤波器的设计与实现403.6 双音多频信号检测与语音滤波实验的GUI界面的设计与实现413.

5、6.1 双音多频(DTMF)信号检测的设计与实现413.6.2语音滤波实验的设计与实现46第4章设计总结和心得47 4.1 设计总结.48 4.2设计心得.49第1章 1.1设计容与要求本设计任务是利用MATLAB的图形用户界面设计向导GUIDE工具箱建立一个与本科数字信号处理理论教学相配套的实验教学仿真平台。具体要求如下:1、构建总体结构框架:通过查阅相关资料、熟悉教材(主要针对天任,江太辉等编著的数字信号处理(第3版)的容与结构、研究本课程对实验的要求,构建一个总体的与教材配套的结构框架;2、构建实验界面:要求用MATLAB的GUI中的坐标窗口、弹出框、按键、动态文本框等搭建一系列的仿真友

6、好界面,使得即便不懂MATLAB语言编程的同学,也可以非常方便地使用和理解;3、实现具体界面的功能:要求用MATLAB编程语言来实现每一个具体界面的具体实验功能,以达到对相关容的仿真。1.2 MATLAB GUI的简介与特点MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以与数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATALB 可以创建图形用户界面GUI ( GraphicalUser Interface) ,它是用户和计算机之间交流的工具。MATLAB 将所有GUl 支持的用户控件都集成在这个MA

7、TLAB将所有图形用户界面(Graphical User Interface,简称GUI)支持的用户控件都集成在GUIDE工具箱中,并提供界面外观、属性和行为响应方式的设置方法。图形用户界面(GUI)是指由窗口、菜单、对话框等各种图形对象组成的用户界面。在MATLAB中,基本的图形用户界面对象包含:下拉与弹出式菜单对象,多种界面元素如按钮(PUSH BUTTON)、选项钮(RADIO BUTTON)、可编辑文本框(EDIT BOX)、静态文本框(STATIC TEXT)、检查框(CHECK BOXES)、坐标(AXES)等。根据这些图形对象,可以设计出界面友好、操作方便的图形用户界面9。在设计

8、一个图形用户界面时,只需在GUI设计窗口左边的控件工具栏中选择一个所需要的对象,以拖拽的方式在对象设计区生成该对象,其对象的创建方式方便、简单。创建了所需要的对象之后,可以在该控件的从callback函数中编写M程序,以实现对象的功能。第2章 基本理论2.1 离散时间信号和离散时间系统离散时间信号和离散时间系统的知识首先包括序列的表示法和基本类型,线性非移变系统以与系统的稳定性和因果性问题,卷积;其次包括离散时间信号的傅里叶变换(DTFT)和系统的频率响应的概念,与离散时间信号的取样等基本知识;最后,包括z变换的定义和收敛域、Z的正反变换的定理和性质。在离散时间系统中,信号是用离散时间的数字序

9、列表示的。离散时间信号有一些典型常用的基本序列,即单位取样序列、单位阶跃序列、矩形序列、实指数序列、复指数序列、正弦型序列。下面分别介绍这些典型序列的基本形式。1、 单位取样序列(2-1)注意与之见的区别,是一个确定的物理量,而不是确定的物理量,而是一种数学抽象。2、 单位阶跃序列(2-2)与连续阶跃信号不同,在=0时,单位阶跃序列是有定义的。3、 矩形序列 (2-3)N表示矩形序列的长度。4、 实指数序列实指数序列有单边和双边实指数序列之分,大多数情况下,所要研究的都是单边实指数序列,因此这里只介绍单边实指数序列,单边实指数序列可表示为: (2-4)5、 复指数序列 (2-5)式中,通常称为

10、阻尼系数,称为数字域频率(单位为弧度)。6、 正弦型序列 (2-6)式中,A为幅度,称为数字域频率,为初相(单位为弧度)。信号处理的目的之一就是要把信号变换成人们需要的某种形式。各种离散时间系统就是把输入序列变换成所需要的输出序列的系统。如果一个系统满足叠加原理,且该系统的响应与输入信号施加于系统的时刻无关,则该系统是线性非移变系统(LSIS)。线性非移变系统有一个重要的特性,它的输入序列与输出序列之间存在着线性卷积关系。若和分别为系统的输入和输出,为该系统的单位取样响应,对于线性非移变系统而言,有如下线性卷积关系: (2-7)其中*表示卷积。与连续时间信号的傅里叶变换定义相类似,离散时间信号

11、x(n)的傅里叶变换定义为: (2-8)系统的单位取样响应h(n)的DTFT为系统的频率响应,即 (2-9)离散时间信号常常是由连续时间信号经周期取样得到的。连续信号经过取样(理想取样)后输出为: (2-10)系统频域分析方法还有Z变换,Z变换是离散时间信号的一种重要的变换。Z变换的定义为: (2-11)2.2 离散傅里叶变换与其快速算法这里所要介绍的离散傅里叶变换(DFT)时域和频域都是离散的,而离散傅里叶变换的快速算法即快速傅里叶变换(FFT)在处理有限长序列时起着极其重要的作用。这部分所包含的知识有:周期序列的傅里叶级数与其性质;有限长序列的傅里叶变换表示离散傅里叶变换,与离散傅里叶变换

12、的性质,循环卷积等;快速傅里叶变换,与由FFT进行信号谱分析等。一个周期为N的周期序列可以表示为, (2-12)周期序列的离散傅里叶级数(DFS)变换对如下: (2-13)(2-14)一个周期序列虽然是无限长的,但是只要知道它的一个周期就可知道它的整个序列。这正是周期序列与有限长序列之间的联系。有限长序列的傅里叶变换称为离散傅里叶变换(DFT),DFT的表达式为: (2-15)有限长序列的DFT即仍是有限长序列。在MATLAB,我们可以直接调用函数fft( )和ifft( )来计算序列的FFT和IFFT。下图2-1列出了当N=8时的时间抽选的FFT流程图,频率抽选的FFT流程图与时间抽选的FF

13、T流程图相差不多,故不再画出。图2-1 时间抽选的FFT流程图(N=8)2.3 数字滤波器的原理和设计本科中我们学习了两类重要的数字滤波器:IIR数字滤波器和FIR滤波器。这两类数字滤波器的设计方法是完全不同的。设计IIR滤波器时,通常是先设计一个模拟滤波器,再用冲激响应不变法或双线性变换法将所设计的模拟滤波器转换成数字滤波器。模拟滤波器器的设计主要有巴特沃斯滤波器、切比雪夫I型和II型滤波器等。巴特沃斯滤波器的特点是其幅度响应在通带具有最平坦的特性,且通带和阻带幅度特性是单调变化的。切比雪夫I型滤波器在通带的幅度响应时单调减的,而在阻带的幅度响应时等波纹的。FIR滤波器则不可通过模拟滤波器来

14、设计,因此FIR滤波器没有现成的设计公式,FIR数字滤波器的设计方法主要有窗函数法和频率取样法等。在使用窗函数法设计FIR滤波器时,常用的窗有矩形窗(Boxcar)、巴特利特(Bartlett)窗(三角窗)、汉宁(Hanning)窗(升余弦窗)、哈明(Hamming)窗、布莱克曼(Blackman)窗、凯泽(Kaiser)窗等6种。2.4 双音多频信号检测和语音滤波双音多频 (Dual Tone Multi Frequency)信号应用在许多场合,最常见的是的拨音。机盘上每一个对应一个DTMF音,它包含两个不同频率的正弦信号的叠加,检测DTMF音就是要检测这两个正弦信号的频率,从而判断出按键。

15、表2-1 双音多频信号的各个与频率的对应表1209Hz1336Hz1477Hz697Hz123770Hz456852Hz789941Hz*0#的双音多频信号的两个频率的对应情况如表所示。比如按键1对应的DTMF音包含频率分别为和的两个正弦信号之和,检测到信号由这两个频率组成,就知道为1。本系统模拟了机的键盘,按机键盘的顺序列出了1到#,并且可以从左边的坐标中可以看出各个按键的DTMF音信号,详细的实现过程见3.6.1节。语音滤波实验, 配合操作系统支持的语音媒体播放器可以很方便地将经过数字处理后的语音效果直观地体现出来, 这对于学生深刻理解数字信号处理中抽象数学运算的现实物理意义,很有帮助。对

16、于单声道的语音数据在MATLAB中是一维数组,在MATLAB中有2个处理.wav格式语音的函数, 一个是将语音流文件转换为数组格式数据的函数wavread, 另一个是将数组格式数据转换为语音流文件的函数wavwrite8. 第3章系统GUI界面设计与实现3.1总体框架图3-1 系统结构框图完成该教学实验系统,总体的制作步骤如下:(1)分析系统所要现的主要功能,明确设计任务,构思出一个总体的结构框架。(2) 确定该系统包含的数字信号处理教学容,在稿纸上设计各个界面布局。(3) 根据手绘的界面草图,利用MATLAB的GUIDE工具箱搭建GUI静态界面。(4) 编写m程序实现界面功能,即编写界面上各

17、个控件的回调函数,以达到对相关容的仿真。(5) 系统总体的调试和完善。3.1.1创建GUI创建Matlab GUI界面通常有两种方式:第一种,在 .m文件中动态添加,即自己编写程序,设置参数;第二种,使用GUIDE帮助创建GUI;在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可进入 GUIDE。新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图中,可以使用如下工具:Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu

18、Editor:菜单编辑器。2、新建一个布局(窗口),可以在新窗口中添加如下控件1静态文本(Static Text)       2编辑框(Edit Text)控件3列表框(Listbox)控件          4滚动条(Slider)控件5按钮(Push Button)控件       6开关按钮(Toggle Button)控件7单选按钮(Radio Button)控件 &

19、#160;   8按钮组(Button Group)控件9检查框(Check Box)控件       10列表框(Listbox)控件11弹出式菜单(Popup Menu)控件    12坐标轴(Axes)控件13面板(Panel)控件每一个控件都有自己的属性常规属性。1.控件风格和外观(1)BackgroundColor:设置控件背景颜色,使用R G B或颜色定义。(2)CData:在控件上显示的真彩色图像,使用矩阵表示。(3)ForegroundColor:文本颜色。(4)Str

20、ing属性:控件上的文本,以与列表框和弹出菜单的选项。(5)Visible:控件是否可见。2.对象的常规信息(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可。(2)Style:控件对象类型。(3)Tag:控件表示(用户定义)。(4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。(5)UserData:用户指定数据。(6)Position:控件对象的尺寸和位置。(7)Units:设置控件的位置与大小的单位。(8)有关字体的属性,如 FontAngle, FontName等。 3.控件回调函数的执行(1)Bus

21、yAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。(2)ButtonDownFcn属性:按钮按下时的处理函数。(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。(4)CreateFcn:在对象产生过程中执行的回调函数。(5)DeleteFcn:删除对象过程中执行的回调函数。(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。 4.控件当前状态信息(1)ListboxT

22、op:在列表框中显示的最顶层的字符串的索引。(2)Max:最大值。(3)Min:最小值。(4)Value:控件的当前值。可以使用属性编辑器来设置属性3.1.2写回调函数 CallBack每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成相应的函数体,函数名,名称一般是控件 Tag+ Call类型名参数有三个( hObject, eventdata, handles),其中hObject为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄,CreateFcn 是在控件对象创建的时候发生(一

23、般为初始化样式,颜色,初始值等),DeleteFcn 实在空间对象被清除的时候发生,ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件Callback,CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。3.1.3 句柄图形之间的层次关系可以创建图形句柄的常见函数:1figure函数:创建一个新的图形对象。2newplot函数:做好开始画新图形对象的准备。3axes函数:创建坐标轴图形对象。4line函数:画线。5patch函数:填充多边形。6surface函数:绘制三维曲面。7image函数

24、:显示图片对象。8uicontrol函数:生成用户控制图形对象。9uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。几个实用的小函数:uigetfile 选择文件对话框uiputfile 保存文件对话框uisetcolor 设置颜色对话框fontsetcolor 设置字体对话框msgbox    消息框warndlg    警告框3.1.4 获取与设置对象属性常用函数:gcf函数:获得当前图形窗口的句柄gca函数:获得当前坐标轴的句柄gco函数:获得当前对象的句柄gcbo函数:获得当前正在执行调用的对象的句柄gcbf函数:

25、获取包括正在执行调用的对象的图形句柄delete函数:删除句柄所对应的图形对象findobj函数:查找具有某种属性的图形对象设置方法:(1)get函数返回某些对象属性的当前值。例如:pget(obj,'Position');    (2)函数set改变句柄图形对象属性,例如:set(obj,'Position',vect);3.2用户登录界面的设计与实现 登录界面的设计过程是:首先打开MALAB软件中的工具箱GUIDE左下角有个点击鼠标右键选择然后把鼠标点到 MALAB出选择GUIDE然后进行静态界面的设计。登陆静态界面设计:在GU

26、I设计窗口左侧的工具栏中直接拖拽3个静态文本框(static text)、两个可编辑文本框(edit text)、一个按钮到对象设计区,调整好位置,在静态文本框与按钮的string属性中修改相应的文字,这样用户登录静态界面就制作完成,当然为了美观,也可以先在美图秀秀里把静态文本框里的文字进行处理。接下来只需在“登录”按钮的回调(Callback)函数中编写相应的程序并把背景设置成如下图所示的背景图片,登录界面的制作就完成了。登陆的静态界面 点击后 输入用户名 登陆成功“登录”按钮的callback函数中的m语言代码如下:function pushbutton1_Callback(hObject

27、, eventdata, handles)users = get(handles.user,'string'); %用户名的获取codes = get(handles.code,'string');if strcmp(users,'卢惠婷')&&strcmp(codes,'1006052240')h = msgbox('登陆成功!');uiwait(h);close(gcf);xuanze(handles)else errordlg('用户名或密码错误!', '错误提示

28、9;);end“背景图片”的callback函数如下:function untitled_OpeningFcn(hObject, eventdata, handles, varargin)ha=axes('units','normalized','position',0 0 1 1);uistack(ha,'down')II=imread('24.jpg');image(II)colormap grayset(ha,'handlevisibility','off','visi

29、ble','off');登录成功后,用户可以进入各章的选择界面,如下图左所示,用户可以根据自己的需要选择点击相应的按钮,进入各章的界面。通过点击“退出实验系统”可以退出这个界面。这个界面主要是有按钮控件构成,其静态界面的设计步骤与登录界面的设计步骤相似。选择主界面 离散时间信号和时间系统的界面该界面上的各个功能仍主要是通过设置控件的回调函数callback属性实现的。以“离散时间信号的离散时间系统”的按钮为例,“离散时间信号和离散时间系统”的按钮对应的Tag属性为pushbutton3(tag的设置要与callback里的一致)。在GUIDE编辑界面中选中该控件,点击右

30、键选中View Callback->Callback菜单项就可以打开xuanze.m(这个文件是自动生成的)在function pushbutton3_Callback(hObject, eventdata, handles)下添加代码:close(gcf);lisan(handles)则点击“离散时间信号的离散时间系统”按钮可调用界面 “离散时间信号和离散时间系统”,如上图右所示。退出实验系统按钮的callback为:退出界面代码:close(gcf);denglu(handles)其他按钮的实现与“离散时间信号和离散时间系统”的按钮相似。3.3离散时间信号和离散时间系统的GUI界面的

31、设计与实现1、离散时间信号和离散时间系统静态界面的设置于前面相似,静态界面 点3.3.1 离散时间信号的设计与实现将Static Text、Edit Text、Push Button、Axes控件排好位置,调整大小,并修改各个控件的string属性,就可以制作好“离散时间信号”的静态界面,如下图所示:在静态界面设计好之后,编写各个按钮的callback函数,就可以实现界面的功能。各个callback函数为:1、 取样序列:yi=str2num(get(handles.edit1,'string');fu=str2num(get(handles.edit12,'strin

32、g');k=(yi-10):(yi+10);x1=(k-yi)=0;x2=x1*fu;subplot(3,3,1);stem(k,x2); title('取样序列的幅度');xlabel('x(n)');ylabel('幅值');2、 阶跃序列yi=str2num(get(handles.edit7,'string');fu=str2num(get(handles.edit13,'string');k=(yi-10):(yi+10);x1=k>=yi;x2=x1*fu;subplot(3,3,1);s

33、tem(k,x2); title('阶跃序列的幅度');xlabel('x(n)');ylabel('幅值');3、矩形序列fu=str2num(get(handles.edit8,'string');l=str2num(get(handles.edit14,'string');k=-10:l+4;x1=k>=0;x2=k>=l;x3=x1-x2;x4=x3*fu;subplot(3,3,1);stem(k,x4); title('矩形序列的幅度');xlabel('x(n)&#

34、39;);ylabel('幅值');4、复指数序列global f p%声明全局变量,f为复指数序列的阻尼系数,p为序列的数字域频率f=str2num(get(handles.edit9,'string'); %从按钮右边的edit文本框中获取用户输入的阻尼系数p=str2num(get(handles.edit18,'string');n = -10 :1: 10;x=exp(f*n+j*p*n); %对复指数序列x进行初始化subplot(3,3,1); stem(n,abs(x); title('复指数序列的幅值');xla

35、bel('x(n)');ylabel('x(n)') %画出复指数序列x的幅度subplot(3,3,4); stem(n,(180/pi)*angle(x);title('复指数序列的相位');xlabel('x(n)');ylabel('phax(n)'); %画出复指数序列x的相位set(handles.text3,'string','复指数序列定义为x(n)=exp(an+jwn)','这里a被称为阻尼系数,w为数字域频率,单位为弧度', '复指数序列

36、的幅度|x(n)|=exp(an),相角argx(n)=wn','注意:当w为的倍数时,输入时应写成pi,乘用*表示,除用/表示', 'HorizontalAlignment', 'left' ,'FontSize',12 )5、实指数序列k=-5:20;a=str2num(get(handles.edit10,'string');x1=a.k;subplot(3,3,1);stem(k,x1);title('实指数序列');xlabel('x(n)');ylabel(

37、9;幅值');6、正弦序列k=0:0.1:39;a=str2num(get(handles.edit11,'string');f=str2num(get(handles.edit16,'string');p=str2num(get(handles.edit17,'string');fk=a*sin(pi*2*k*f+p);subplot(3,3,1);stem(k,fk);title('正弦序列');xlabel('x(n)/pi');ylabel('幅值');各序列输入值运行后如下图所示:

38、取样序列: 阶跃序列: 矩形序列:实指数序列: 正弦型序列: 复指数序列:3.3.2 线性卷积的设计与实现“线性卷积”界面所用到的控件有:若干个静态文本框(static text)、三个可编辑文本框(edit text)、三个坐标(Axes)、三个按钮(push button)以与两个下拉式菜单(popupmenu).将这些所需要的控件从GUI设计窗口左侧的工具栏中直接拖拽到对象设计区,调整好位置并修改各个控件的string属性(即在string属性中添加所需要的文字),就可以设计出如下图的静态界面,其中注意在修改下拉式菜单(popupmenu)的string属性时每个选项的文字须占一行,两个

39、选项不能写在同一行中。在静态界面搭建好之后,编写各个控件的callback函数,就可以实现界面的功能。静态界面:因计算机只能处理有限长序列,因此在本系统中所给出的序列也是有限长的,并且序列的长度可由用户自定义输入。各个callback函数如下所示: 卷积:A=str2num(get(handles.edit3,'string');a=A;x=handles.y1;h=handles.y2;y1=conv(x,h);y=a*y1;ny=length(y1);n=0:ny-1;axes(handles.axes3);stem(n,y);矩形序列和实指数序列global NN=str

40、2num(get(handles.edit2,'string'); %从菜单左边的edit text控件中获取序列的长度val = get(hObject,'Value'); %获得句柄的value(值) 属性str = get(hObject, 'String'); %获得句柄的String(容)属性axes(handles.axes2);%设置当前图形绘制在坐标1(axes1)中switch valcase 1n=0: N-1;x1=n>=0;x2=n>=N;y2=x1-x2;axes(handles.axes2);stem(n,

41、 y2); %画出矩形序列y1,并且矩形的长度N是由用户规定的case 2n=0: N-1;y2=0.5.n;axes(handles.axes2);stem(n,y2); end退出close(gcf);lisan(handles)输入值后如下个图所示:矩形序列*矩形序列: 实指数序列*矩形序列:实指数序列*实指数:3.3.3 离散时间系统的设计与实现离散时间系统的静态界面如下图所示,与上一个界面相似,将界面上所用到的控件从GUI设计窗口左侧的工具栏中直接拖拽到对象设计区,并调整大小、位置与修改各个控件的string属性,就制作好了离散时间系统的静态界面。在静态界面设计好之后,编写各个按钮的

42、callback函数,就可以实现界面的功能。静态界面:各个callback函数如下:1、取样序列、矩形序列、实指数、正弦型序列val=get(hObject,'Value');str=get(hObject,'String');axes(handles.axes1);switch val case 1 n=-10:20; y1=zeros(1,10),1,zeros(1,20); stem(n,y1) %矩形序列 case 2n1=-10;n2=5;n3=20;n0=0; n=n1:n3; n4=0;y1=(n>=n0+n4)&(n<n2+n

43、4); stem(n,y1); %取样序列 case 3 n=-10:20; y1=power(0.5,n); %实指数序列 stem(n,y1) case 4 n=-10:1:20; y1=sin(0.5*pi*n) ;%正弦序列 stem(n,y1)end handles.y1=double(y1); guidata(hObject,handles);2、系统响应y(n)global b0 b1 a0 a1 a2b0=str2num(get(handles.b0,'string'); %从b0的edit text控件中获取b0的值b1=str2num(get(handles

44、.b1,'string');a0=str2num(get(handles.a0,'string');a1=str2num(get(handles.a1,'string');a2=str2num(get(handles.a2,'string');A=a0 a1 a2; %将序列x的系数向量赋给AB=b0 b1; n = -10 : 20; x=handles.y1 ; %将用户所选择的序列x(n)赋给xy=filter(B,A,x); %通过filter函数求系统的响应axes(handles.axes2);stem(n,y,

45、9;fill'); %将系统响应y(n)序列绘制在坐标2(axes2)中,线端是实心圆点3、系统的单位取样响应h(n)global b0 b1 a0 a1 a2A=a0 a1 a2;B=b0 b1;n = -10 : 20;x=n=0; %令序列x(n)为单位取样序列h=filter(B,A,x);%求系统单位取样响应axes(handles.axes2);stem(n,h,'fill');function pushbutton3_Callback(hObject, eventdata, handles)close(gcf);lisan(handles)% hObjec

46、t handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global b0 b1 a0 a1 a2b0=str2num(get(handles.b0,'string'); %从b0的edit text控件中获取b0的值b1=str2num(get(handles.b1,'string');a0=str2

47、num(get(handles.a0,'string');a1=str2num(get(handles.a1,'string');a2=str2num(get(handles.a2,'string');A=a0 a1 a2; %将序列x的系数向量赋给AB=b0 b1; n = -10 : 20; x=handles.y1 ; %将用户所选择的序列x(n)赋给xy=filter(B,A,x); %通过filter函数求系统的响应axes(handles.axes2);stem(n,y,'fill');%将系统响应y(n)序列绘制在坐

48、标2(axes2)中,线端是实心圆点系统响应 系统的单位取样响应3.3.4 离散时间信号傅里叶变换与系统频率响应的设计与实现“离散时间信号傅里叶变换与系统频率响应”的静态界面如下图所示,在静态界面设计好之后,编写各个按钮的callback函数,就可以实现界面的功能。静态界面:各个callback函数为:1、取样序列、矩形序列、实指数序列、正弦序列global x1 f pf=str2num(get(handles.edit6,'string');p=str2num(get(handles.edit7,'string');val = get(hObject,

49、9;Value'); %获得句柄的value(值) 属性str = get(hObject, 'String'); %获得句柄的String(容)属性switch valcase 1n = -10 : 10;x=n=p; %对取样序列x进行初始化x1=f.*x;case 2n=-10:10;x=n>=p-n>=p+5;x1=f.*x;case 3n=-10:10;x1=f.*2.(n+p);case 4n=-10:10;x1=f.*sin(2*pi*(n+p);endhandles.x1 = double(x1)'%将序列y1转换成double型的数

50、据guidata(hObject, handles);%保存句柄2、离散时间信号的傅里叶变换(DTFT)global Xn = -10 : 10;x = handles.x1; %将用户所选择的序列x(n)赋给xk=0:500;w=(pi/500)*k; X=x'*(exp(-j*pi/500).(n'*k);%求序列x(n)的离散傅里叶变换(DTFT)magX=abs(X); angX=angle(X);axes(handles.axes1);plot(w/pi,magX);title('幅度响应'); %将序列x(n)的DTFT的幅度绘制在坐标1(tu1)中

51、,离散时间信号的DTFT是一个复数,且是频率 的连续函数axes(handles.axes2); plot(w/pi,angX);title('相位响应');%将序列x(n)的DTFT的相位绘制在坐标2(tu2)中3、系统频率响应global a0 a1 b0a0=str2num(get(handles.edit1,'string'); %从a0的edit text控件中获取a0的值a1=str2num(get(handles.edit2,'string');a2=str2num(get(handles.edit3,'string'

52、;);b0=str2num(get(handles.edit4,'string');b1=str2num(get(handles.edit5,'string');b=b0 b1; %将序列x的系数向量赋给ba=a0,a1,a2;H,w=freqz(b,a,400); %利用函数freqz求系统的频率响应magH=abs(H);angH=angle(H);axes(handles.axes1);plot(w/pi,magH);title('幅度响应'); %将系统频率响应的幅度绘制在坐标1(tu1)中,系统频率响应是一个复数,且是频率 的连续函数a

53、xes(handles.axes2);plot(w/pi,angH);title('相位响应');输入之后如下图所示:离散时间信号的傅里叶变换(DTFT) 系统频率响应3.3.5 信号取样的设计与实现“信号取样”的静态界面的制作方法与前面的界面有一点不同的是:它置了一图片来演示整个信号取样流程,界面所需要的控件,如按钮、坐标框、下拉菜单等都是按照图片指定的位置布局的。图片制作完成后,只需将在GUI对象设计区所布置好的几个控件的string属性修改完,信号取样的静态界面基本就制作完成了。在静态界面设计好之后,编写各个按钮的callback函数,就可以实现界面的功能。“信号取样”的

54、静态界面如下图所示,界面上展示了信号取样的详细流程,可以让用户对信号取样的过程一目了然。各个callback函数为:1、取样信号、矩阵信号、实指数信号、正弦信号val = get(hObject,'Value'); str = get(hObject, 'String');axes(handles.axes1);switch val case 1t = -5:0.01: 10;y=t>=0; %产生单位阶跃信号x=sym('Heaviside(t)'); %将单位阶跃信号用sym声明,便于求其傅里叶变换plot(t,y);case 2t=-5:0.01:10;y=t>=0-t>=2;x=sym('Heaviside(t)');plot(t,y);case 3t=-5:0.01:10;y=3*2.t;x=sym('Heaviside(t)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论