李杨新技术楼807Tel:86418052-830哈尔滨工业大学电子工程系数字信号处理课程实验(一)--Matlab使用入门学习内容一、概述--发展、用途二、基本定义与基础操作三、基本矩阵操作四、MATLAB程序设计五、MATLAB中的数字信号处理MATLAB语言的发展•始于20世纪70年代--设计者的初衷是为解决“线性代数”课程的矩阵运算问题•调用库程序的接口,Fortran编写•1984年成立MathWorks--C编写•现已成为国际控制界公认的标准计算软件•在30多个数学类计算软件中,在数值计算上独占鳌头什么是MATLAB一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。优点:MATLAB是一种直译式的高级语言,比其它程序设计语言容易快速开发丰富的图形功能和界面开发MATLAB在美国已经作为大学工科学生必修的计算机语言之一(C,FORTRAN,ASSEMBLER,MATLAB)MATLAB语言与其它语言的关系仿佛和C语言与汇编语言的关系一样计算机语言的发展数值运算解析运算管理、可视化智能化标志着计算机语言向“智能化”方向发展,被称为第四代编程语言。应用领域工业研究与开发数学教学,特别是线性代数数值分析和科学计算方面的教学与研究电子学、控制理论和物理学等工程和科学学科方面的教学与研究经济学、化学和生物学等计算问题的所有其他领域中的教学与研究特点:开放式可扩充结构•matlab所有函数都是开放的•用户可按自己意愿随意更改•正因为此功能,使得matlab的应用越来越广泛我们做什么?•大量的工具箱需要强大的联机检索帮助系统matlab联机帮助命令•help功能提供matlab大部分主题的在线帮助信息help显示help主题一览表helpplotxyz显示有关三维做图指令帮助信息help[显示特殊字符与符号帮助信息helphelp显示help的帮助信息虽然help可以随时提供帮助,但必须知道准确的函数名称。当不能确定函数名称时,help就无能为力了。•Lookfor函数—它可提供通过一般的关键词,搜索出一组与之相关的命令lookforfourier寻找含有傅立叶变换的相关指令:如FFTDiscreteFouriertransform网络资源•USENET新闻组–MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指向––•网络上的工具箱––网络资源(2)•BBS–哈尔滨工业大学bbs:telnet://bbs.hit.edu.cn–上海交通大学bbs:telnet://bbs.sjtu.edu.cn–清华大学bbsmathtools•服务–––Matlab大观园:概述--桌面元素间行间亦可分行输入数值和变量•数值十进制表示:1.3e-3•对大小写敏感:如sin,Sin,SIN•变量名首字符必须是英文(无空格、标点,可使用下划线)总字符64•预定义变量(右表)特殊变量取值ans用于结果的缺省变量名pi圆周率eps计算机的最小数flops浮点运算书inf无穷大如1/0nan不等量如0/0,无穷/无穷iji=j=1nargin函数的输入变量数目nargout函数的输出变量数目realmin最小的可用正实数realmax最大的可用正实数运算符和表达式•除法:a/b=b/a•幂运算:a^b•注:所有运算定义在复数域•方根运算只返回第一象限解•将复数作为整体处理•允许矩阵元素是复数矩阵、数组运算•转置–矩阵用符号A’来表示和实现–数组非共轭转置A.’•四则运算–矩阵+-*/\–数组点乘A.*右除:A./左除:A.\•乘方–A.^数组各元素分别自乘–A^矩阵为方阵时自乘数组乘除(,./,.\)•ab——a,b两数组必须有相同的行和列两数组相应元素相乘。•a=[123;456;789];•b=[246;135;7910];•a.*b•ans=•2818•41530•497290•inv——矩阵求逆•det——行列式的值•eig——矩阵的特征值•diag——对角矩阵•sqrt——矩阵开方矩阵的其它运算矩阵的超越函数函数名含义sign符号函数rem留数sin正弦cos余弦tan正切asin反正弦acos反余弦atan反正切atan2第四象限反正切函数名含义sinh双曲正弦cosh双曲余弦tanh双曲正切exp自然指数log自然对数log10以10为底的对数bessel贝赛尔函数gamma伽吗函数rat有理逼近关系运算•常用的关系操作符:、=、、=、==、!=•用来比较两个大小相同的数组•比较一个数组和一个标量逻辑运算•常用的逻辑操作符:&,|,~,xor•先决逻辑操作:&&,||•二进数位逻辑操作:bitand,bitor,bitcmp,bitxor矩阵操作•利用矩阵下标,MATLAB还提供了子矩阵功能子块赋值:如A(:,m)=1.•空矩阵(用[]表示)相当于消除相应的矩阵子块.•矩阵的序号编址:按列计数。矩阵的一些特殊操作•矩阵的变维•a=[1:12];b=reshape(a,3,4)•c=zeros(3,4);c(:)=a(:)•矩阵的变向rot90:旋转;fliplr:上翻;flipud:下翻•矩阵的抽取diag:抽取主对角线;tril:抽取主下三角;triu:抽取主上三角矩阵查找和排序•子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如:•»a=10:20;•»find(a15)•ans=•7891011•矩阵的排序使用sort函数,它将矩阵按照升序排列。计算结果的图形表达•x=1:40;•y1=sin(pi*x/4);•y2=cos(pi*x/8);•plot(x,y1,'c',x,y2,'r')MATLAB的程序设计一、matlab的工作模式--指令驱动模式通常matlab以指令驱动模式工作,即matlab命令行方式。命令行操作时,matlab窗口只允许一次执行一行上的一个或几个语句。命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。在matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。因此应编辑m文件。matlab的工作模式--m文件模式将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。二、m文件的创建•m文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立m文件。如dos下的edit,windows的记事本和word等。•具体的创建方法:1.在matlab命令窗口点击file菜单newm-file三、matlab文件的类型1.数据文件.mat•mat文件是matlab以标准二进制格式保存的数据文件,可将工作空间中有用的数据变量保存下来。•mat文件的生成和调用是由函数save和load完成的。例如:loadgatlinimage(X)2.m文件m文件的语法类似于c语言,但又有其自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,matlab是解释性的编程语言。m文件有两类独立的m文件—称命令文件可调用m文件—称函数文件(1).命令文件—简单的m文件命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。•命令文件包括两部分:注释文件和程序文件%RANKNumberoflinearlyindependentrowsorcolumns.%K=RANK(X)isthenumberofsingularvaluesofX%thatarelargerthanMAX(SIZE(X))*NORM(X)*EPS.%K=RANK(X,tol)isthenumberofsingularvaluesofXthat%arelargerthantol.%Copyright(c)1984-94byTheMathWorks,Inc.s=svd(x);if(nargin==1)tol=max(size(x))*max(s)*eps;endr=sum(stol);程序部分(2).matlab内置函数文件matlab自定义的函数文件称内置函数文件调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数——用typesin查不到。调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)01234567-1-0.8-0.6-0.4-0.200.20.40.60.81又如sqrt(x)——求x的平方根abs(x)——求x的绝对值det(a)——求行列式的值等等。matlab拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。(3).函数m文件—需要输入变量,返回输出变量•matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab的能力。•对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。•这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。函数m文件的格式:function返回变量=函数名(输入变量)注释说明语句段程序语句段特定规则:1.函数m文件第一行必须以单词function作为引导词,必须遵循如下形式:function因变量=函数名(自变量)2.m文件的文件名必须是函数名.m。3.程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。四、matlab的程序结构matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。(1).顺序结构——依次顺序执行程序的各条语句(2).循环结构——被重复执行的一组语句,循环是计算机解决问题的主要手段。循环语句主要有:for—end语法为:fori=表达式(表达式为一个向量)可执行语句end例:利用for循环求1!+2!+3!++5!的值sum=0;fori=1:5pdr=1;fork=1:ipdr=pdr*k;endsum=sum+pdr;endsum=153while—end循环while循环将循环体中的语句循环执行不定次数。语法为:while表达式循环体语句end表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值非0,继续循环;直到表达式值为0,循环停止。例:用while循环求1~100间整数的和sum=0;i=1;whilei=100sum=sum+i;i=i+1;endsumsum=5050(3).分支结构——根据一定条件来执行的各条语句。if—else—end语句有3种形式if表达式执行语句endif表达式———是语句1else————否语句2endif表达式1———多分支语句1elseif表达式2语句2elseif表达式3语句3···else语句nend这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end语句•在条件表达式中,通常都是由关系操作符,,=,=,==,~=等逻辑操作符&,|,~等逻辑函数:isequal——若是相等则为真isempty——若是空矩阵则为真isstr——若是字符串则为真例:编写m函数,