1、数字信号处理MATLAB实验 作者: 日期:2 个人收集整理 勿做商业用途物理与电子科学学院数字信号处理实验指导书-MATLAB实验赵发勇 编二零一零年九月三十日目录 目录2MATLAB简介3一、MATLAB初步31. MATLAB的主要功能32启动MATLAB及界面简介33。 MATLAB的常用命令44基本运算55退出6二、变量与函数、语句、矩阵及其运算61变量与函数62语句与M文件63矩阵及其运算7三、MATLAB 支持的数据结构8四、MATLAB绘图91、绘制二维图形92、绘制三维图形10五、MATLAB编程111、关系运算和逻辑运算112、控制语句113、函数编写方法与应用13数字信号
2、处理的MATLAB实验14实验一 MATLAB基础入门练习14实验二 离散时间信号分析16实验三 离散时间系统及响应18实验四 离散傅立叶变换及性质20实验五 用FFT和CZT对信号进行频谱分析21实验六 IIR数字滤波器设计与信号滤波24实验七 用窗函数法设计FIR滤波器27实验报告格式30MATLAB简介MATLAB是MATrix LABoratory的缩写。由MathWorks 公司于1984年推出,1993 年推出了其微机版, 在Windows环境下使用。其最初由美国的Cleve Moler博士所研制,目的是为线性代数等课程中的矩阵运算提供一种方便可行的实验手段。经过十几年的市场竞争和
3、发展,MATLAB已发展成为在自动控制、生物医学工程、信号分析处理、语言处理、图像信号处理、雷达工程、统计分析、计算机技术、金融界和数学界等各行各业中都有极其广泛应用的软件,同时也成为理工科学生必须掌握的一项基本技能。为了帮助学生熟悉MATLAB,进行数字信号处理,本节把MATLAB介绍给大家。一、MATLAB初步1。 MATLAB的主要功能(1)数值计算计算MATLAB以矩阵作(或数组)为数据操作的基本单位,提供了十分丰富的数值计算函数,是进行数值分析的高效软件包。(2)编程语言MATLAB与其它高级语言一样,有编程功能,具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征
4、,而且简单易学、编程效率高。(3)。MATLAB工具箱MATLAB包含两部分内容:基本部分和各种可选的工具箱。(4).绘图功能MATLAB提供了两个层次的绘图操作:一种是对图形句柄进行的低层绘图操作,另一种是建立在低层绘图操作之上的高层绘图操作。温馨提示:绘图功能在我们学习数字信号处理过程中的主要作用是帮助大家直观了解处理的结果,在实际信号处理中,可能用的不多。2启动MATLAB及界面简介 点击桌面上MATLAB图标,可进入到MATLAB命令窗(MATLAB Command Window),其命令提示符为。用户可在命令窗内输入命令、编程、进行计算.MATLAB 6.5环境包括MATLAB主窗口
5、、命令窗口(Command Window)、工作空间窗口(Workspace)、命令历史窗口(Command History)、当前目录窗口(Current Directory)、图形窗口(Figure)和文本编辑窗口(Editor)等组成。观看其默认窗口分布情况可以如下操作:Desktop-desktop layout-defaut(1).主窗口MATLAB主窗口是MATLAB的主要工作界面。主窗口除了嵌入一些子窗(Command Window、Workspace、Command History、Current Directory)外,还主要包括菜单栏和工具栏。菜单栏,共包含File、Edi
6、t、View、Web、Window和Help 6个菜单项,与其它Windows应用软件相似,大家可以自己点击观看。工具栏, MATLAB 6.5主窗口的工具栏共提供了10个命令按钮。这些命令按钮均有对应的菜单命令,但比菜单命令使用起来更快捷、方便.下面重点介绍一下命令窗口(Command Window)。命令窗口命令窗口是MATLAB的主要交互窗口,用于输入命令并显示除图形以外的所有执行结果。MATLAB命令窗口中的“”为命令提示符,表示MATLAB正在处于准备状态.在命令提示符后键入命令并按下回车键后,MATLAB就会解释执行所输入的命令,并在命令后面给出计算结果。例如 x=10;y=15;
7、 z=x+yz=15说明:语句后输入分号表示不在主窗口显示结果,但可以从变量窗口看到;如果一个命令行很长,或编程时一个语句很长,需要用两行来书写,可以在第一个物理行之后加上3个小黑点并按下回车键,然后接着下一个行继续写命令的其他部分.3个小黑点称为续行符,即把下面的物理行看作该行的逻辑继续。温馨提示:命令窗口是MATLAB与用户之间的主要交互式运算窗口.3。 MATLAB的常用命令(1)help命令 在命令窗内输入help命令,再敲回车键,在屏幕上出现了在线帮助总览。(注意:MATLAB命令被输入后,必需敲回车键才能执行。为行文方便,以后不再每次提醒“敲回车键)学会使用help命令,是学习MA
8、TLAB的有效方法。如果要了解相关函数的使用方法及参数意义可输入help xcorr(2)demo命令 在命令窗内输入demo命令,再敲回车,键屏幕上将出现演示窗口.(MATLAB Demo Window)一共有三个窗口,左边的窗口显示欲演示内容的大标题,选定其中一项,右下方的小窗口显示欲演示的具体内容,选中其中一栏,再点击run按扭,屏幕上将演示选定的演示程序。右上方的窗口显示关于大标题的一些说明。(3)Type命令 在命令窗内输入type 文件名,则MATLAB将在主窗口显示程序的M文件内容,帮助大家了解M文件编程方法,通过对其语句的分析,不仅可以提高理论认识,也是学习MATLAB的函数(
9、function)编写方法有效途径。type xcorr(4)其它常用的命令与函数Addpath:增加MATLAB的工作目录。MATLAB通常只能对其工作路径下的文件运行,如果你的文件不在其默认的目录下,可以通过addpath命令来添加你的目录,例path结果显示当前的所有默认目录。addpath c:结果将C盘根目录作为一个默认目录,即在C盘根目录下文件均可以直接在MATLAB下执行。clear :清除内存空间变量.whos 变量名:查看此变量的具体情况.如whos x Name Size Bytes Class x 1x2 16 double arrayGrand total is 2 e
10、lements using 16 bytesclc:清屏命令,清除当前主窗口内所有显示。dir:查看当前目录。length():计算向量的长度。如ength(x)ans = 2size():计算矩阵或数组的维数。例size(y)ans = 3 6温馨提示:这些命令和函数是大家学习MATLAB时用的最多的,因此需要大家审记。4基本运算在MATLAB本身是为了进行数值计算而创出的,因此其数值计算功能非常强,且是其重要的功能之一.计算方法非常简单,其进行基本数学运算,只需将运算式直接打入提示号()之后,并按入Enter键即可.例如计算(52+1。30。8)10/25的值:用键盘在MATLAB指令窗中
11、输入以下内容 (5*2+1。30。8)10/25 在上述表达式输入完成后,按【Enter】键,该就指令被执行。在指令执行后,MATLAB指令窗中将显示以下结果。ans = 4.2000 MATLAB会将运算结果直接存入一变量ans,代表MATLAB运算后的答案 (Answer),并显示其数值于屏幕上。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算 ().我们也可将上述运算式的结果设定给另一个变数x如下: x = (5*2+1.3-0。8)*102/25 x = 42此时MATLAB会直接显示x的值。MATLAB基本算术运算符符号符
12、号用途说明+加 此符号与以下五行符号详细说明可使用help arith-减。数组乘法 矩阵相乘矩阵求幂.点幂左除 此符号与以下三行符号详细说明可使用help slash/右除。点左除./点右除温馨提示:由于MATLAB没有中文版,因此其自带的帮助均为英文,因此,希望大家不要有惧怕心理,应该当作帮助大家又提高了英语,一举两得!5退出 在工具栏中点击File按钮,在下拉式菜单中单击Exit MATLAB项即可。二、变量与函数、语句、矩阵及其运算1变量与函数在MATLAB中变量由字母、数和下划线组成,第一个字符必须是字母。一个变量最多由63个字符组成,并区分大小写。下面是MATLAB中表示特殊量的字
13、符:特殊变量取 值ans用于结果的缺省变量名pi圆周率eps计算机的最小数,当和1相加就产生一个比1大的数flops浮点运算数inf无穷大,如1/0NaN不定量,如0/0i,j虚数单位i=j=,在程序中可以用作其它用途。nargin所用函数的输入变量数目nargout所用函数的输出变量数目realmin最小可用正实数realmax最大可用正实数MATLAB提供了大量的函数.可以通过help function查询。下面列出部分基本数学函数:函数名 称函数名 称sin(x)正弦函数asin(x)反正弦函数cos(x)余弦函数acos(x)反余弦函数tan(x)正切函数atan(x)反正切函数abs
14、(x)绝对值或复数模max(x) 最大值min(x) 最小值sum(x)元素的总和sqrt(x) 开平方exp(x)以e为底的指数log(x)自然对数以10为底的对数sign(x)符号函数fix(x)取整imag(x)复数的虚部real(x)复数的实部conj(x)共轭复数angle(x)复数x的幅角2语句与M文件MATLAB语句的一般形式为:变量=表达式。当某一语句的输入完成后,按回车键,计算机就执行该命令。如果该语句末没输入其它符号或输入了逗号,将显示结果;如果句末输入了分号,将不显示结果。如果语句中省略了变量和等号,那么计算机将结果赋值给变量ans(结果的缺省变量)。MATLAB的内部函
15、数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件。 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为: function 因变量名=函数名(自变量名)函数值的获得必须通过具体的运算实现,并赋给因变量. M文件建立方法:1). 在Matlab中,点:File-New-M-file;2). 在编辑窗口中输入程序内容;3)。 点:File-Save,存盘,M文件名必须与函数名一致,M文件的文件名首字不能为数字。Matlab的应用程序也以M文件保存,称为脚本文件(直接使用MATLAB中语句编写的M文件)。即M文
16、件包括脚本文件和函数两种。4).在MATLAB中,为了说明语句的功能使用的注释句用%开头。3矩阵及其运算MATLAB中矩阵A的输入方法如下:A=a11,,a1n;am1,,amn。其中逗号(或用空格)是数之间的分隔符,;分号(或Enter)是换行符,输入矩阵时严格要求所有行有相同列,即符合矩阵的形式。、a=0:0.1:1可产生个向量,即元素为0,0。1,0。21.B=2,2,2;3,5,6或b=2 2 2;3 5 6是一样的。、一些特殊矩阵的产生方法:linspace(x,y,n),魔方矩阵magic(x),单位矩阵eye(x),随机函数rand(x),零矩阵zeros(x,y),1矩阵one
17、s(x,y)等等。温馨提示:冒号在MATLAB中的用法很灵活,一定要多试,多用。例如有一个矩阵X为3行3列的魔方矩阵,通过观看粗体来体会其用法。X=magic(3)X = 8 1 6 3 5 7 4 9 2 X(2,:)ans = 3 5 7 X(2,:)=1 2 3X = 8 1 6 1 2 3 4 9 21) 关于矩阵的运算的一些基本指令:运算命令功能共轭转置矩阵相加减数乘矩阵,是一个数值求逆运算矩阵的次幂矩阵的行列式值矩阵的分解矩阵的解矩阵的秩为的特征向量,为特征值求的特征多项式返回的大小 2) 矩阵中元素或块的常用操作,其中表示一个矩阵。表达式功能中第行第列元素中第行构成的行向量中第列
18、构成的列向量对按列看作一个列向量表示列向量中第个元素3)MATLAB中的数学函数有一个共同的特点:若自变量X为一个矩阵,则函数值也为X的同阶矩阵,即对每一个元素分别求函数值。即对于 经过函数f作用后得:比如 K=0,0.25,0.5,0。75K = 0 0。2500 0。5000 0。7500 sin(2*pi*K)ans = 0 1。0000 0。0000 1。0000相信同学们已经明白,这也是我们经常使用的产生各种抽样信号的方法。三、MATLAB 支持的数据结构(1) 矩阵:略(2) 多维数组多维数组是 MATLAB 在其 5。0 版本开始提供的.假设有 2 个 3x3 矩阵 A1, A2
19、,则可以由下面的命令建立起一个 3x3x2 的数组:A=cat(3,A1,A2)。试验 A1=cat(2,A1,A2) 和 A2=cat(1,A1A2) 将得到什么结果。 对矩阵或多维数组 A 可以使用 size(A) 来测其大小,也可以使用 reshape() 函数重新按列排列.对向量来说,还可以用 length(A) 来测其长度。 不论原数组 A 是多少维的,A(:) 将返回列向量.(3) 字符串与字符串矩阵 MATLAB 的字符串是由单引号括起来的。如可以使用下面的命令赋值 strA=This is a string。(4) 单元数据结构 用类似矩阵的记号将给复杂的数据结构纳入一个变量之
20、下.和矩阵中的圆括号表示下标类似,单元数组由大括号表示下标. B=1,Alan Shearer,180,100, 80, 75; 77, 60, 92; 67, 28, 90; 100, 89, 78B = 1 Alan Shearer 180 4x3 double访问单元数组应该由大括号进行,如第 4 单元中的元素可以由下面的语句得出 B4四、MATLAB绘图1、绘制二维图形(1)、曲线图绘制二维图形的基本命令是plot(X,Y,S)。其中X,Y是向量,分别表示点集的横坐标和纵坐标,S指线型、颜色。 plot(X,Y) 画实线,plot(X,Y1,S1,X,Y2,S2,,X,Yn,Sn)将多
21、条线画在一起. 以上三种格式中的x、y都可以是表达式,但表达式的运算结果必须符合上述格式要求.MATLAB的图形功能还提供了颜色和线型的控制符,如下表:控制符线型或标记控制符颜色控制符标记实 线g绿 色.点:点 线m品红色o圆 圈.点画 线b蓝 色x叉 号 虚 线c青 色+加 号h六角形w白 色*星 号v倒三角r红 色s正方形正三角k黑 色d菱 形左三角y黄 色p五角星右三角MATLAB提供的特殊二维图形函数如下表(2)、符号函数(显函数、隐函数和参数方程)画图符号函数画图可以通过函数ezplot或fplot来实现. 函数ezplot调用格式:ezplot(f(x),a,b) 表示在axb绘制
22、显函数f=f(x)的函数图;ezplot(f(X,Y),Xmin,Xmax,Ymin,Ymax)表示在区间XminXXmax和 YminYYmax绘制隐函数f(x,y)=0的函数图;ezplot(x(T),y(T),Tmin,Tmax) 表示在区间TminTTmax绘制参数方程x=x(T),y=y(T)的函数图。函数fplot调用格式:fplot(fun,lims) 表示绘制字符串fun指定的函数在lims=Xmin,Xmax的图形。注意:1 fun必须是M文件的函数名或是独立变量为x的字符串。 2 fplot函数不能画参数方程和隐函数图形,但在一个图上可以画多个图形。(3). 对数坐标图在很
23、多工程问题中,通过对数据进行对数转换可以更清晰地看出数据的某些特征,在对数坐标系中描绘数据点的曲线,可以直接地表现对数转换.对数转换有双对数坐标转换和单轴对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单轴对数坐标转换.loglog(Y) 表示 x、y坐标都是对数坐标系;semilogx(Y) 表示 x坐标轴是对数坐标系;semilogy() 表示y坐标轴是对数坐标系;plotyy 有两个y坐标轴,一个在左边,一个在右边。2、绘制三维图形(1)、空间曲线的绘制绘制空间曲线的基本命令为:plot3(x,y,z);plot3(x,y,z,
24、s)或plot3(x1,y1,z1,s1,x2,y2,z2,s2,)其中x,y,z是同维的向量或矩阵.当它们是矩阵时,以它们的列对应元素为空间曲线上点的坐标.s指线型、颜色,这一点与二维曲线时的情形相同.(2)、空间曲面的绘制 绘制空间曲面的基本命令为mesh(x,y,z)。如果x、y是向量,则要求x的长度=矩阵z的列维;y的长度=矩阵z的行维。以zij为竖坐标,x的第i个分量为横坐标,y的第j个分量为纵坐标绘网格图。如果是同维矩阵,则数据点的坐标分别取自这三个矩阵。 meshc(x,y,z) 带等高线的网格图, waterfall(x,y,z) 瀑布水线图, surf(x,y,z,c) 可着
25、色的曲面图, surfc(x,y,z) 带等高线的可着色的曲面图.以上这些命令都可用来绘制曲面图,用法与mesh完全一样.例、x=cos(t), y=sin(t) 和 z=t 的数学关系可以由下面语句绘制出来:t=0: pi/50: 2*pi;x=sin(t); y=cos(t); z=t;h=plot3(x, y, z, g-)set(h,LineWidth,4get(h,LineWidth))(3)多幅图形的创建有时同一曲面或曲线需要从不同的角度去观察,或用不同的表现方式去表现,这时,为了便于比较,往往在一个窗口内画多幅图形.MATLAB用subplot命令实现这一目的.具体格式为:sub
26、plot(m,n,p)。使用此命令后,把窗口分为mn个图形区域,p表示当前区域号。五、MATLAB编程1、关系运算和逻辑运算(1)关系运算符 小于 = 小于等于 大于 = 大于等于 = = 等于 = 不等于运算法则:如果两个比较量a、b是标量,那么,当a、b之间的关系成立时输出值为1;否则输出值为0。如果两个比较量a、b是相同维数的数组,那么就按标量的运算法则,对a、b的对应元素进行运算,最后的输出结果为一个与a(或b)同维的01数组。如果a是标量,b是数组,那么按标量的运算法则将a与b的每个元素逐一比较,最后的输出结果为一个与b同维的0-1数组。在算术运算、关系运算中,算术运算优先.(2)逻
27、辑运算符 & 与 或 非运算法则:参与逻辑运算的量称为逻辑量,非零逻辑量为“真,用1表示;零逻辑量为“假,用0表示。如果参与逻辑运算的两个量a、b都是标量,那么:a&b 当a与b全为非零时,运算结果为“1;否则为“0”a|b a与b中只要有一个非零,运算结果为“1a 当a是零时,运算结果为“1”;否则为“0”如果参与逻辑运算的两个量a、b是相同维数的数组,那么就按标量的运算法则,对a、b的对应元素进行运算,最后的输出结果为一个与a(或b)同维的01数组。如果参与逻辑运算的a是标量、b是数组,那么就按标量的运算法则,将a与b的每个元素进行运算,最后的输出结果为一个与b同维的01数组。逻辑“非”是
28、一个一元运算符,也服从数组运算规则。在算术、关系、逻辑运算中,算术运算的最优先,其次是关系运算,再其次是逻辑运算.2、控制语句作为一种常用的编程语言,MATLAB 支持各种流程控制结构:循环结构、条件转移结构、客观结构、试探结构。 (1)、循环结构循环语句有两种结构: for 。 end 结构和 while .。 end 结构。 这两种语句结构不完全相同,各有各的特色。for 。 end 语句通常的调用格式为: for 循环变量=s1:s3:s2 循环体语句组end while循环语句用来控制一个或一组语句在某逻辑条件下重复预先确定或不确定的次数。while循环语句的一般表达形式为: whil
29、e 表达式 循环体语句 End例 如果用户想由 MATLAB 求出 1+2+。.+100 的值,可以作下列的循环: mysum=0; for i=1:1:100,mysum=mysum+i; end;在上面的式子中,可以看到 for 循环语句中 s3 的值为 1.在 MATLAB 实际编程中,如果 s3 的值为 1,则可以在该语句中省略,故该语句可以简化成 for i=1:100。在实际编程中,在 MATLAB 下采用循环语句会降低其执行速度,所以前面的程序可以由下面的命令来代替: i=1:100; mysum=sum(i).在这一语句中,首先生成了一个向量 i, 然后用内部函数 sum()
30、求出 i 向量的各个元素之和,或更简单地,该语句还可以写成 sum(1:100).如果前面的 100 改成 10000, 再运行这一程序,则可以明显地看出,后一种方法编写的程序比前一种方法快得多. MATLAB 并不要求循环点等间距,假设 V 为任意一个向量,则可以用 for i=V 来表示循环。 同样的问题在 while 循环结构下可以表示为 mysum = 0; i=1; while (iA=0:0.1:1B=2,2,2;3,5,6b=2 2 2;3 5 6X=eye(3,4),Y=rand(3,4)Z=zeros(3,4)I=ones(3,4)观察上述方法产生的矩阵特点,总结MATLAB
31、输入矩阵的方法。2、运算符的使用:对于矩阵的运算有加+,减,乘,除:,/,乘方,点乘。*、点除。/、点乘方.(其中点乘、点除和点乘方表示各对应元的运算),求逆inv,求特征值eig,矩阵行列式值det等。(1)、实验对两个矩阵进行非点运算和点运算观察区别。c=magic(3)z=a*cz=a.c(2)、求下面的线性方程组的解 MATLAB语句a=2,3,-1;8,2,3;45,3,9; b=2;4;23; x=inv(a)bdet(a)观察上述运算产生的结果,加深MATLAB进行矩阵运算的高效性,实际上,MATLAB起初就是为数值计算设计的,因此,其数值计算功能很强,如微积分运算都很方便地在M
32、ATLAB中实现。3MATLAB函数的使用方法常用的DSP序列见下表,以单位采样为例,请给出单位阶跃序列的MATLAB函数。例:单位采样序列的产生.function x,n=impseq(n0,n1,n2);%generate x(n)=delta(nn0);n0=input(please input n0:);n1=input(please input n1:);n2=input(please input n2:);if (n1xn=2 4 20 7xn = 2 4 20 7n=1:2n = 1 0 1 2需要注意的问题是,在MATLAB中取矩阵或向量的元素的索引号均为正整数,因此,如果需要获得xn=4的值,该怎么取呢?是用xn(0)还是xn(2)呢?请大家试一试.当然如果画此图形当然可以用stem(n,xn)来实现。体会两者的区别。2、序列的加减乘运算请输入两个长度为5的实序列x=1 2 3 4 5