数字信号课程设计报

上传人:沈*** 文档编号:41237678 上传时间:2021-11-19 格式:DOC 页数:50 大小:4.05MB
收藏 版权申诉 举报 下载
数字信号课程设计报_第1页
第1页 / 共50页
数字信号课程设计报_第2页
第2页 / 共50页
数字信号课程设计报_第3页
第3页 / 共50页
资源描述:

《数字信号课程设计报》由会员分享,可在线阅读,更多相关《数字信号课程设计报(50页珍藏版)》请在装配图网上搜索。

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

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

3、52.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的正反变换及系统

4、函数的设计与实现233.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 双音多频信号检测及语音滤波实验的GU

5、I界面的设计与实现413.6.1 双音多频(DTMF)信号检测的设计与实现41 3.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

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

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

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

10、(2-4)5、 复指数序列 (2-5)式中,通常称为阻尼系数,称为数字域频率(单位为弧度)。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时的时间抽选

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

14、阻带内的幅度响应时等波纹的。FIR滤波器则不可通过模拟滤波器来设计,因此FIR滤波器没有现成的设计公式,FIR数字滤波器的设计方法主要有窗函数法和频率取样法等。在使用窗函数法设计FIR滤波器时,常用的窗有矩形窗(Boxcar)、巴特利特(Bartlett)窗(三角窗)、汉宁(Hanning)窗(升余弦窗)、哈明(Hamming)窗、布莱克曼(Blackman)窗、凯泽(Kaiser)窗等6种。2.4 双音多频信号检测和语音滤波双音多频 (Dual Tone Multi Frequency)信号应用在许多场合,最常见的是电话号码的拨音。电话机号码盘上每一个号码对应一个DTMF音,它包含两个不同频

15、率的正弦信号的叠加,检测DTMF音就是要检测这两个正弦信号的频率,从而判断出按键号码。表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

17、) 根据手绘的界面草图,利用MATLAB的GUIDE工具箱搭建GUI静态界面。(4) 编写m程序实现界面功能,即编写界面上各个控件的回调函数,以达到对相关内容的仿真。(5) 系统总体的调试和完善。3.1.1创建GUI创建Matlab GUI界面通常有两种方式:第一种,在 .m文件中动态添加,即自己编写程序,设置参数;第二种,使用GUIDE帮助创建GUI;在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可进入 GUIDE。新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图中,可以使用如下工具:Layout Editor:布局编辑器;Alignment

18、Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。2、新建一个布局(窗口),可以在新窗口中添加如下控件1静态文本(Static Text) 2编辑框(Edit Text)控件3列表框(Listbox)控件 4滚动条(Slider)控件5按钮(Push Button)控件 6开关按钮(Toggle Button)控件7单选按钮(Radio Button)控件 8按钮组(Button Group)控件9检查框(Check Box)控件 10列表框(Listbox)控件11弹出式菜单(Popup M

19、enu)控件 12坐标轴(Axes)控件13面板(Panel)控件每一个控件都有自己的属性常规属性。1.控件风格和外观(1)BackgroundColor:设置控件背景颜色,使用R G B或颜色定义。(2)CData:在控件上显示的真彩色图像,使用矩阵表示。(3)ForegroundColor:文本颜色。(4)String属性:控件上的文本,以及列表框和弹出菜单的选项。(5)Visible:控件是否可见。2.对象的常规信息(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可。(2)Style:控件对象类型。(3)Tag:控件表示(用户定义)。(4)T

20、ooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。(5)UserData:用户指定数据。(6)Position:控件对象的尺寸和位置。(7)Units:设置控件的位置及大小的单位。(8)有关字体的属性,如 FontAngle, FontName等。 3.控件回调函数的执行(1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。(2)ButtonDownFcn属性:按钮按下时的处理函数。(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,

21、在该对象被选中和改变时,系统将自动地对字符串进行求值。(4)CreateFcn:在对象产生过程中执行的回调函数。(5)DeleteFcn:删除对象过程中执行的回调函数。(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。4.控件当前状态信息(1)ListboxTop:在列表框中显示的最顶层的字符串的索引。(2)Max:最大值。(3)Min:最小值。(4)Value:控件的当前值。可以使用属性编辑器来设置属性3.1.2写回调函数 CallBack 每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:然后就可以跳转到相应的 Editor中编辑代码,

22、GUIDE会自动生成相应的函数体,函数名,名称一般是控件 Tag+ Call类型名参数有三个( hObject, eventdata, handles),其中hObject为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄,CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等),DeleteFcn 实在空间对象被清除的时候发生,ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件Callback,CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖

23、动时发生等等。3.1.3 句柄图形之间的层次关系可以创建图形句柄的常见函数:1figure函数:创建一个新的图形对象。2newplot函数:做好开始画新图形对象的准备。3axes函数:创建坐标轴图形对象。4line函数:画线。5patch函数:填充多边形。6surface函数:绘制三维曲面。7image函数:显示图片对象。8uicontrol函数:生成用户控制图形对象。 9uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。几个实用的小函数:uigetfile 选择文件对话框uiputfile 保存文件对话框uisetcolor 设置颜色对话框fontsetcolor 设置字体对话框

24、msgbox 消息框 warndlg 警告框3.1.4 获取与设置对象属性常用函数:gcf函数:获得当前图形窗口的句柄gca函数:获得当前坐标轴的句柄gco函数:获得当前对象的句柄gcbo函数:获得当前正在执行调用的对象的句柄gcbf函数:获取包括正在执行调用的对象的图形句柄delete函数:删除句柄所对应的图形对象findobj函数:查找具有某种属性的图形对象设置方法:(1)get函数返回某些对象属性的当前值。例如:pget(obj,Position); (2)函数set改变句柄图形对象属性,例如:set(obj,Position,vect);3.2用户登录界面的设计与实现 登录界面的设计过

25、程是:首先打开MALAB软件中的工具箱GUIDE左下角有个点击鼠标右键选择然后把鼠标点到 MALAB出选择GUIDE然后进行静态界面的设计。登陆静态界面设计:在GUI设计窗口左侧的工具栏中直接拖拽3个静态文本框(static text)、两个可编辑文本框(edit text)、一个按钮到对象设计区,调整好位置,在静态文本框及按钮的string属性中修改相应的文字,这样用户登录静态界面就制作完成,当然为了美观,也可以先在美图秀秀里把静态文本框里的文字进行处理。接下来只需在“登录”按钮的回调(Callback)函数中编写相应的程序并把背景设置成如下图所示的背景图片,登录界面的制作就完成了。登陆的静

26、态界面 点击后 输入用户名 登陆成功 “登录”按钮的callback函数中的m语言代码如下:function pushbutton1_Callback(hObject, 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(用户名或密码错误!

27、, 错误提示);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,visible,off);登录成功后,用户可以进入各章的选择界面,如下图左所示,用户可以根据自己的需要选择点击相应的按钮,进入各章的界面。通过点击“退

28、出实验系统”可以退出这个界面。这个界面主要是有按钮控件构成,其静态界面的设计步骤与登录界面的设计步骤相似。选择主界面 离散时间信号和时间系统的界面 该界面上的各个链接功能仍主要是通过设置控件的回调函数callback属性实现的。以“离散时间信号的离散时间系统”的按钮为例,“离散时间信号和离散时间系统”的按钮对应的Tag属性为pushbutton3(tag的设置要与callback里的一致)。在GUIDE编辑界面中选中该控件,点击右键选中View Callback-Callback菜单项就可以打开xuanze.m(这个文件是自动生成的)在function pushbutton3_Callback

29、(hObject, eventdata, handles)下添加链接代码:close(gcf);lisan(handles)则点击“离散时间信号的离散时间系统”按钮可调用界面 “离散时间信号和离散时间系统”,如上图右所示。退出实验系统按钮的callback为:退出界面代码:close(gcf);denglu(handles)其他按钮的实现与“离散时间信号和离散时间系统”的按钮相似。3.3离散时间信号和离散时间系统的GUI界面的设计与实现1、离散时间信号和离散时间系统静态界面的设置于前面相似,静态界面 点3.3.1 离散时间信号的设计与实现将Static Text、Edit Text、Push

30、Button、Axes控件排好位置,调整大小,并修改各个控件的string属性,就可以制作好“离散时间信号”的静态界面,如下图所示:在静态界面设计好之后,编写各个按钮的callback函数,就可以实现界面的功能。各个callback函数为:1、 取样序列:yi=str2num(get(handles.edit1,string);fu=str2num(get(handles.edit12,string);k=(yi-10):(yi+10);x1=(k-yi)=0;x2=x1*fu;subplot(3,3,1);stem(k,x2); title(取样序列的幅度);xlabel(x(n);ylab

31、el(幅值);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);stem(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-x

32、2;x4=x3*fu;subplot(3,3,1);stem(k,x4); title(矩形序列的幅度);xlabel(x(n);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);

33、 title(复指数序列的幅值);xlabel(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为数字域频率,单位为弧度, 复指数序列的幅度|x(n)|=exp(an),相角argx(n)=wn,注意:当w为的倍数时,输入时应写成pi,乘用*表示,除用/表示, Horiz

34、ontalAlignment, 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(幅值);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*

35、f+p);subplot(3,3,1);stem(k,fk);title(正弦序列);xlabel(x(n)/pi);ylabel(幅值);各序列输入值运行后如下图所示:取样序列: 阶跃序列: 矩形序列: 实指数序列: 正弦型序列: 复指数序列: 3.3.2 线性卷积的设计与实现“线性卷积”界面所用到的控件有:若干个静态文本框(static text)、三个可编辑文本框(edit text)、三个坐标(Axes)、三个按钮(push button)以及两个下拉式菜单(popupmenu).将这些所需要的控件从GUI设计窗口左侧的工具栏中直接拖拽到对象设计区,调整好位置并修改各个控件的strin

36、g属性(即在string属性中添加所需要的文字),就可以设计出如下图的静态界面,其中注意在修改下拉式菜单(popupmenu)的string属性时每个选项的文字须占一行,两个选项不能写在同一行中。在静态界面搭建好之后,编写各个控件的callback函数,就可以实现界面的功能。静态界面:因计算机只能处理有限长序列,因此在本系统中所给出的序列也是有限长的,并且序列的长度可由用户自定义输入。各个callback函数如下所示: 卷积:A=str2num(get(handles.edit3,string);a=A;x=handles.y1;h=handles.y2;y1=conv(x,h);y=a*y1

37、;ny=length(y1);n=0:ny-1;axes(handles.axes3);stem(n,y);矩形序列和实指数序列global NN=str2num(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=

38、n=N;y2=x1-x2;axes(handles.axes2);stem(n, 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设计窗口左侧的工具栏中直接拖拽到对象设计区,并调整大小、位置及修改各个控件的str

39、ing属性,就制作好了离散时间系统的静态界面。在静态界面设计好之后,编写各个按钮的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+n

40、4)&(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型的数据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)的离散傅里叶

41、变换(DTFT)magX=abs(X); angX=angle(X);axes(handles.axes1);plot(w/pi,magX);title(幅度响应); %将序列x(n)的DTFT的幅度绘制在坐标1(tu1)中,离散时间信号的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的

42、值a1=str2num(get(handles.edit2,string);a2=str2num(get(handles.edit3,string);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(幅度响应); %将系统频

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

44、编写各个按钮的callback函数,就可以实现界面的功能。“信号取样”的静态界面如下图所示,界面上展示了信号取样的详细流程,可以让用户对信号取样的过程一目了然。各个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=

45、-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);plot(t,y);case 4t=-5:0.01:10;y=3*sin(2*pi*t);x=sym(Heaviside(t);plot(t,y);endhandles.x = vpa(x); %将x转换为vpa格式的字符handles.y = double(y);guidata(hObject, handles);2、取样axes(handles.axes2); yn=handles.y;len=len

46、gth(yn);t=1,zeros(1,49);n = -5:0.01: 10;t1 = t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,1;t2=(t1);yn2=yn.*t2;stem(n,yn2);3、傅里叶变换DTFTxn=handles.x;Fw=simplify(fourier(xn);%对x求傅里叶变换,x为popupmenu菜单所产生的经过sym函数声明了的信号,fourier( )函数只能处理由sym函数定义的符号变量。Ff=subs(Fw,2*pi*f,w); Ff_conj=conj(Ff); %Ff

47、的共轭Ff_conjGF=sqrt(Ff*Ff_conj);%求傅里叶变换Ff的幅度。axes(handles.axes2); ezplot(GF);输入值后结果如下图所示列如单位阶跃信号: 取样 傅里叶变换FT 3.3.6 z的正反变换及系统函数的设计与实现 “z的正反变换及系统函数”的静态界面的制作方法与前面几个界面的制作是相似的,同样是根据稿纸上设计的草图,将界面上所用到的控件从GUI设计窗口左侧的工具栏中直接拖拽到对象设计区,并调整大小、位置及修改各个控件的string属性。在静态界面设计好之后,编写各个按钮的callback函数,就可以实现界面的功能。“z的正反变换及系统函数”的静态

48、界面如下图所示,各个callback函数为:1、系统函数H(z)global a0 a1 b0 b1 b2a0=str2num(get(handles.a0,string); a1=str2num(get(handles.a1,string); b0=str2num(get(handles.b0,string); b1=str2num(get(handles.b1,string); b2=str2num(get(handles.b2,string); A=a0,a1;B=b0,b1,b2;n=0:30;zplane(A,B,handles.axes1); %在坐标1(axes1)中画出 的零极

49、点图h=impdt(n);axes(handles.axes2);x=filter(A,B,h); %通过filter函数求 的反变换x(n)stem(n,x,fill);grid onsyms z; Z=z*(a0*z+a1)/(b0*z2+b1*z+b2);x=iztrans(Z); %通过iztrans函数求 的反变换x(n),iztrans函数只能处理由sym函数定义的符号变量,它所求出来的x(n)也是符号变量。xbh=simplify(x);xbh=char(xbh); set(handles.text14,String,xbh); %将经过简化等处理的x(n)的值显示在按钮旁边的static text文本框中,guidata(hObject, ha

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!