MATLAB仿真实验 通信于信息工程学院 电路实验中心 朱治国
实验一 MATLAB 程序入门和基础应用 安装 启动 与退出 Matlab的数值计算功能 Matlab程序设计入门
MATLAB简介 MATLAB是一套功能强大的工程技术人员必备的高端数学类科技应用软件 产生的背景: matlab语言是由美国的Clever Moler博士于1980年开发的,设计者的初衷是为解决“线性代数”课程的矩阵运算问题 MATLAB= matrix + laboratory 矩阵实验室
产生的历史 美国的mathwork公司于1984年推出
其DOS版本(MATLAB1.0)发行于1984年,到现在已经到了MATLAB7.X。 MATLAB已发展成为由MATLAB语言、MATLAB工作环境、MATLAB图形处理系统、MATLAB数学函数库和MATLAB应用程序接口五大部分组成的集数值计算、图形处理、程序开发为一体的功能强大的系统
MATLAB基本功能 MATLAB具有一下基本功能: 数值计算功能,矩阵运算功能 符号计算功能 图形处理集可视化功能 可视化建模集动态仿真功能
1、数值计算功能,矩阵运算功能 MATLAB提供了丰富的矩阵运算处理功能,是基于矩阵运算的处理工具。 变量 矩阵,运算 矩阵的运算 例如 C = A + B ,A,B,C都是矩阵,是矩阵的加运算 即使一个常数,Y=5,MATLAB也看做是一个11的矩阵
2.符号运算功能 符号运算即用字符串进行数学分析 允许变量不赋值而参与运算 用于解代数方程、微积分、复合导数、积分、二重积分、有理函数、微分方程、泰乐级数展开、寻优等等,可求得解析符号解
3.丰富的绘图功能与计算结果的可视化 具有高层绘图功能——两维、三维绘图 具有底层绘图功能——句柄绘图 使用plot函数可随时将计算结果可视化
4.图形化程序编制功能 动态系统进行建模、仿真和分析的软件包 用结构图编程,而不用程序编程 只需拖几个方块、连几条线,即可实现编程功能
5.丰富的MATLAB工具箱 MATLAB主工具箱 符号数学工具箱 SIMULINK仿真工具箱 控制系统工具箱 信号处理工具箱 图象处理工具箱 通讯工具箱 系统辨识工具箱 神经元网络工具箱 金融工具箱
许多学科,在MATLAB中都有专用工具箱,现已有30多个工具箱,但MATLAB语言的扩展开发还远远没有结束,各学科的相互促进,将使得MATLAB更加强大
matlab能在各领域做什麽 工业研究与开发 数学教学,特别是线性代数 数值分析和科学计算方面的教学与研究 电子学、控制理论和物理学等工程和科学 学科方面的教学与研究 经济学、化学和生物学等计算问题的所有其他领域中的教学与研究
MATLAB 工作环境 在工具栏下的大窗口就是MATLAB的主窗口,在大窗口里设置右4个小窗口(这是桌面平台的默认设置): “Workspace”、 “Current Directory”、 “Command History”、 “Command Windows
如何使用帮助 每个软件的掌握过程就是好好看帮助文档的过程
例、用一个简单命令求解线性系统 3x1+ x2 - x3 = 3.6 x1+2x2+4x3 = 2.1 -x1+4x2+5x3 = -1.4 A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]; x=A\b x = 1.4818 -0.4606 0.3848
例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。 x=linspace(0,6) y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2; plot(x,y1,x, y2,x, y3)
用四种方法描述cos(x)*sin(y)图形
启动MATLAB 开机执行程序 c:\matlab\bin\matlab.exe 用鼠标双击matlab图标) 即可打开matlab命令平台
菜单项File,其功能如下 New 建立新文件 Open M-File 打开M-文件 Open selected 打开选定文件 Save Workspace As 将工作区存为 Run M-File 运行 M-文件 Look For Selected 寻找选定文件 Print 打印 Print Setup 打印设置 Exit MATLAB 退出 MATLAB
MATLAB的工作方式 交互式的指令行工作方式和M文件的编程工作方式。前者适用于运算过程简单,几条指令即可完成运算的情况,在这种情况下,只需在命令窗口中逐条输入命令按回车即出现运算结果,比如在命令窗口中输入如下指令,然后按回车健: [(24+57)*39-88]/13 马上显示出如下答案: ans=236.2308 这是对于问题较简单的情况,但是当解决的问题变得庞大而复杂时,一次需要执行很多条指令,显然用交互式的指令工作方式直接逐条输入指令是不现实的,这就要用到后一种工作方式:M文件的编程工作方式。
M文件的编程工作方式是在命令窗口中调用M文件,从而执行文件中的多条指令,M文件是由MATLAB命令行构成的文本文件,以 M文件的编程工作方式是在命令窗口中调用M文件,从而执行文件中的多条指令,M文件是由MATLAB命令行构成的文本文件,以.m为后缀名。当用户在命令窗口中输入M文件的文件名按回车后,系统将收索该文件并逐条执行该文件中的命令。它又分为两种形式:命令M文件和函数M文件,分别简称为命令文件和函数文件
matlab与dos兼容命令 1.dir— 可列出指定目录下的文件和子目录清单 例如: Dir 可显示当前目录下的所有文件 Dir c:\matlab Dir c:\matlab\*.m
2.cd—可改变当前工作目录 cd _ _ —— 显示当前子目录 cd c:\matlab\toolbox cd _ . . —— 退出当前子目录到上一级目录 cd _\ ——回到根目录
3.type — 可显示指定文件的 全部内容 type myfile.m 与dos下的用法完全一样
4.delete — 删除指定文件 del abc — 删除当前目录下的abc文件 del c:\matlab\aaa.m 注意:只可删除用户文件,其它文件不要轻易删除,否则系统会瘫痪
基本概念 变量: 以字母开头 可以由字母、数字和下划线混合组成 区分字母大、小写 字符长度不超过31个
系统默认的固定变量 i j pi inf
数值 每一个数组元素都是双精度表示和存储的 16位有效数字 默认为short格式 小数点后4位有效数字
矩阵 是matlab进行数据处理和运算的基本元素 大部分运算和命令都是在矩阵的意义进行的 仅有一行或一列的矩阵称为向量 学好线性代数
数组
函数 给用户提供了丰富且功能各异的函数 用户直接调用 A=sin(b)
运算符 + - * .* ^ .^ A\B a.\b A’ 关系运算符 逻辑运算符 特殊运算符
Matlab的语句
分号的作用: 结尾加分号:将计算结果存入内存, 但不显示在屏幕上 结尾不加分号:将计算结果存入内存, 同时显示在屏幕上
矩阵的创建 直接输入 利用matlab内部函数 外部数据文件(*.mat)装载
向量的生成 a=m:n a=m:p:n
矩阵的下标 A(i,j) 从1开始
矩阵运算和数组运算 加 减 矩阵乘 数组乘 矩阵除 数组除
Matlab常用矩阵运算函数 Size Rand Length Pord sum
关系运算和逻辑运算 > < == >= <= ~= & | ~
Matlab符号运算功能 sym
MATLAB的符号运算功能 在数学运算中除了数值计算以外,在数学、物理、应用工程和科学方面的抽象运算,即计算式中带有x,y等符号变量、表达式的运算,也占有相当大的比例。1993年,MathWorks公司购得了主要针对符号运算的MAPLE使用权,并不断扩展符号运算功能,在MAPLE的基础上开发了在MATLAB环境下实现符号计算的工具包Symbolic Math Toolbox,使其具有了强大的符号运算功能
需要注意的是,在符号运算的整个过程中,所有的运算均是以符号进行的,即使以数字形式出现的量也是字符量。举一个简单的例子,在命令窗口中输入如下符号表达式按回车: f='sin(x/2)'; dfdx=diff(f) 显示如下结果: dfdx = 1/2*cos(1/2*x) 上式是对sin(x/2)求导的过程,一切都是由符号变量和符号表达式完成,没有涉及到具体的数值运算,其中1/2也被当作是字符量
使用符号变量前先要进行定义,定义语句是:sym 或syms 变量名列表。前者定义一个单一的符号变量,后者可以一次定义多个符号变量。如下例: sym a 定义a为符号变量 syms a b c 定义a,b,c均为符号变量 符号表达式是由符号变量组成的一个表达式,符号方程是将一个符号表达式通过等号给一个符号变量。凡是用到sym命令的时候,表达式和方程式对空格都是敏感的,因此不要随意添加空格符到式中
符号表达式的创建 用sym命令直接创建符号表达式,这种创建方式不需要在前面有任何说明,使用快捷方便。例如: f=sym(‘a+b+c’) 在命令窗口中输入上述语句按回车键,出现以下结果:f= a+b+c。说明已成功将符号表达式a+b+c赋给变量f。
.按照普通书写方式创建符号表达式。它需要在具体创建一个符号表达式之前,将这个表达式所包含的全部符号变量创建完毕。例如: syms a b c f=a+b+c 在命令窗口中输入上述语句后,也出现和上面相同的结果。创建符号表达式成功
matlab 绘图 ——matlab语言丰富的图形表现方法,使得数学计算结果可以方便地、多样性地实现了可视化,这是其它语言所不能比拟的。
matlab语言的绘图功能 matlab语言不仅具有高层绘图能力,而且还具有底层绘图能力——句柄绘图方法。 不仅能绘制几乎所有的标准图形,而且其表现形式也是丰富多样的。 matlab语言不仅具有高层绘图能力,而且还具有底层绘图能力——句柄绘图方法。 在面向对象的图形设计基础上,使得用户可以用来开发各专业的专用图形。
一、二维绘图 一)plot —— 最基本的二维图形指令 plot的功能: plot命令自动打开一个图形窗口Figure 用直线连接相邻两数据点来绘制图形 根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x, y 轴用对数坐标表示
如果已经存在一个图形窗口,plot命令则清除当前图形,绘制新图形 可单窗口单曲线绘图;可单窗口多曲线绘图;可单窗口多曲线分图绘图;可多窗口绘图 可任意设定曲线颜色和线型 可给图形加坐标网线和图形加注功能
plot的调用格式 plot(x) —— 缺省自变量绘图格式,x为向量, 以x元素值为纵坐标,以相应元素下标为横坐标绘图 plot(x,y) —— 基本格式,以y(x)的函数关系作出直角坐标图,如果y为n×m的矩阵,则以x 为自变量,作出m条曲线 plot(x1,y1,x2,y2) —— 多条曲线绘图格式
plot(x,y,’s’) —— 开关格式,开关量字符串s设定曲线颜色和绘图方式,使用颜色字符串的前1~3个字母,如 yellow—yel表示等。 或plot(x1,y1,’s1’,x2,y2,’s2’,…)
S的标准设定值如下: 字母 颜色 标点 线型 y 黄色 · 点线 m 粉红 ○ 圈线 c 亮蓝 × ×线 r 大红 + +字线 字母 颜色 标点 线型 y 黄色 · 点线 m 粉红 ○ 圈线 c 亮蓝 × ×线 r 大红 + +字线 g 绿色 - 实线 b 蓝色 星形线 w 白色 : 虚线 k 黑色 -· (--) 点划线
1. 单窗口单曲线绘图 例1:x=[0, 0.48,0.84,1,0.91,0.6,0.14] [ x1, x2, x3, x4, x5, x6, x7,] plot (x)
2. 单窗口多曲线绘图 例2:t=0:pi/100:2*pi; y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5); plot(t,y,t,y1,t,y2) y y1 y2
3. 单窗口多曲线分图绘图 subplot —— 子图分割命令 调用格式: subplot(m,n,p) —— 按从左至右, 从上至下排列 行 列 绘图序号
subplot(1,3,1); plot(t,y) subplot(1,3,2); plot(t,y3) subplot(1,3,3); plot(t,y2)
subplot(3,1,1); plot(t,y) subplot(3,1,2); plot(t,y3) subplot(3,1,3); plot(t,y2)
4. 多窗口绘图 figure(n) —— 创建窗口函数,n为窗 口顺序号。 t=0:pi/100:2*pi; y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5); plot(t,y) —— 自动出现第一个窗口 figure(2) plot(t,y1) —— 在第二窗口绘图 figure(3) plot(t,y2) ——在第三窗口绘图
5.图形加注功能 将标题、坐标轴标记、网格线及文字注 释加注到图形上,这些函数为: title —— 给图形加标题 xlable —— 给x轴加标注 ylable —— 给y轴加标注 text —— 在图形指定位置加标注 gtext —— 将标注加到图形任意位置 grid on(off) —— 打开、关闭坐标网格线 legend —— 添加图例 axis —— 控制坐标轴的刻度
例:t=0:0.1:10 y1=sin(t);y2=cos(t);plot(t,y1,'r',t,y2,'b--'); x=[1.7*pi;1.6*pi]; y=[-0.3;0.8]; s=['sin(t)';'cos(t)']; text(x,y,s); title('正弦和余弦曲线'); legend('正弦','余弦') xlabel('时间t'),ylabel('正弦、余弦')
ezplot ——符号函数的简易绘图函数 ezplot的调用格式: ezplot(f) —这里f为包含单个符号变量x的符号表达式,在x轴的默认范围 [-2*pi 2*pi]内绘制f(x)的函数图 ezplot(f,xmin,xmax) — 给定区间 ezplot(f,[xmin,xmax],figure(n)) — 指定绘图窗口绘图。
ezplot('sin(x)') ezplot('sin(x)','cos(y)',[-4*pi 4*pi],figure(2))
例:绘制火柴杆绘图 t=0:0.2:2*pi; y=cos(t); stem(y)
三维绘图 三维绘图的主要功能: 绘制三维线图 绘制等高线图 绘制伪彩色图 绘制三维网线图 绘制三维曲面图、柱面图和球面图 绘制三维多面体并填充颜色
plot3 —— 基本的三维图形指令 调用格式: plot3(x,y,z) —— x,y,z是长度相同的向量 plot3(X,Y,Z) —— X,Y,Z是维数相同的矩阵 plot3(x,y,z,s) —— 带开关量 plot3(x1,y1,z1,'s1', x2,y2,z2,'s2', …)
二维图形的所有基本特性对三维图形全都适用。定义三维坐标轴
调用格式: surf(x,y,z) —— 绘制三维曲面图,x,y,z 为图形坐标向量 例: [X,Y,Z]=peaks(30) ※peaks为matlab 自动生成的三维测 试图形 surf(X,Y,Z)
shading faceted — 网格修饰,缺省方式
Matlab功能非常丰富,有兴趣的同学可以自己多学习一下 ,对今后的学习很有帮助
作业 1、说明产生一个matlab行向量的两种方法,其中行向量从0开始,并在pi结束,共有13个等间隔点。 2、假定行向量x=[3 6 9],y=[5 3 0],下列matlab运算的结果是什么? A x+y b, x.*y c, x.^y d, x./y
描述下面的matlab命令的结果: t=linspace (0,pi/2,123); y=sin(2*t); plot (t,y, ’r’)
实验二,MATLAB描述信号 MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化提供了强有力的工具。在MATLAB中通常有两种方法来表示信号,一种是用向量来表示信号,另一种则是用符号运算的方法来表示信号。用适当的MATLAB语句表示出信号后,我们就可以利用MATLAB的绘图命令绘制出直观的信号波形
连续时间信号 所谓连续时间信号,是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的值与之对应的信号。从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。在MATLAB中连续信号可用向量或符号运算功能来表示
向量表示法 1. 对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中向量t是行如t=t1:p:t2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为中止时间,p为时间间隔。向量f为连续信号f(t)在向量t所定义的时间点上的样值
例如对于连续信号f(t)=sin(t),我们可以用如下两个向量来表示: t=-10:1.5:10; f=sin(t) 用上述向量对连续信号表示后,就可以用plot命令来绘出该信号的时域波形。Plot命令可将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线。命令如下: plot(t,f) title(‘f(t)=sint’) xlabel(‘t’) axis([-10,10,-1.1,1.1])
符号运算表示法 2. 如果信号可以用一个符号表达式来表示它,则我们可用ezplot命令绘制出信号的波形。例如对于连续信号f(t)= ,我们可以用符号表达式表示为: syms t f=sym(‘exp(-t/2)’) f= exp(-t/2) 然后用ezplot命令绘制其波形:ezplot(f,[-6, 6])
离散时间信号 一般说来,离散时间信号用f(k)表示,其中变量k为整数,代表离散的采样时间点。 f(k)可表示为: f(k)={...f(-2),f(-1),f(0),f(1),f(2)…} ↑k=0 在MATLAB中,用一个向量f即可表示一个有限长度的序列。但是,这样的向量并没有包含其对应的时间序号信息。所以,要完整地表示一个离散信号需要用两个向量。 如序列: f(k)={1,2,-1,3,2,4,-1} ↑k=0 在MATLAB中应表示为: k=[-3,-2,-1,0,1,2,3]或是k=-3:3;f= [1, 2,-1, 3, 2, 4,-1]
在用MATLAB表示离散序列并将其可视化时,我们要注意以下几点:第一,与连续时间信号不同,离散时间信号无法用符号运算来表示;第二,由于在MATLAB中,矩阵的元素个数是有限的,因此,MATLAB无法表示无限序列;第三,在绘制离散信号波形时,要使用专门绘制离散数据的stem命令,而不是plot命令
同样的,单位阶跃序列,正弦序列,离散时间指数序列等的离散信号我们都可以用类似的方法描述并绘制出图形
指数信号Aeat y=A*exp(a*t) 取A=1,a=-0.4 A=1;a=-0.4; t=0:0.01:10; ft= A*exp(a*t); plot(t,ft)
正弦信号 y=A*cos(w0*t+phi) y=A*sin(w0*t+phi)
抽样函数 y=sinc(t)
矩形脉冲信号 y=rectpuls(t,width) 产生幅度为1,宽度为width以t=0为对称的矩形波 Width默认值为1
三角波脉冲信号 y=tripuls(t,width,skew)
指数序列 Aak A*a.^k K=0:10;A=1;a=-1.6; fk= A*a.^k; stem(k,fk)
正弦序列
单位脉冲序列 …0 0 0 0 0 0 0 1 0 0 0 0 0 0… 零矩阵函数zeros(1,N)产生一个由N个零组成的列向量, k=-50:50; delta=[zero(1,50),1,(1,50)]; stem(k,delta)
单位阶跃序列 …0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 … 零矩阵函数zeros(1,N)产生一个由N个零组成的列向量,ones(1.N)产生一个由N个1组成的列向量 k=-50:50; uk=[zero(1,50),ones(1,51)]; stem(k,uk)
信号的时域变换 信号的时域变换包括信号的平移、反折、倒相及信号的尺度变换。我们就分别介绍连续时间信号和离散时间信号的各种时域变换[11]
连续信号的时域变换 1.移位 对于连续信号f(t),若有常数t0>0,延时信号f(t-t0)是将原信号沿正t轴方向平移时间t0,而f(t+t0)是将原信号沿负t轴方向移动时间t0。我们可用下面的命令来实现连续信号的平移及其结果可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换: y=subs(f,t,t-t0); ezplot(y)
2.反折 连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f(t)中的自变量t换为-t。实现如下: y=subs(f,t,-t); ezplot(y)
3.尺度变换 连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f(t)中的自变量t换为at,当a>1时,信号f(at)以原点为基准,沿横轴压缩到原来的1/a;当0<a<1时,就展宽至原来的1/a倍。实现如下: y=subs(f,t,*t); ezplot(y)
4.倒相 连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。实现如下: y=-f; ezplot(y) 对于以上的命令,可在画图命令之后加入坐标轴的调整的命令(即加入axis( )命令),以使画出的图形更清晰、直观。
离散时间序列的时域变换 与连续信号不同的是,在MATLAB中,离散序列的时域变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的变换需表示成两个向量的变换。
1.离散序列反折 离散序列的反折,即是将表示离散序列的两向量以零时刻的取值为基准点,以纵轴为对称轴反折,向量的反折可用MATLABA中的fliplr函数来实现,具体实现如下: function [f,k]=lsfz(f1,k1) f=fliplr(f1);k=-fliplr(k1); %调用此函数实现向量f1和k1的反折 stem(k,f,’filled’) axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
2.离散序列的平移 离散序列的平移可看作是将离散序列的时间序号向量平移,而表示对应时间序号点的序列样值不变,当序列向左移动k0个单位时,所以时间序号向量都减小k0个单位,反之则增加k0个单位。实现如下: function [f,k]=lsyw(ff,kk,k0) k=kk+k0;f=ff; stem(k,f,’filled’) axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
3.离散序列的倒相 离散序列的倒相可看作是将表示序列样值的向量取反,而对应的时间序号向量不变,得到的离散时间序列。实现如下: function [f,k]=lsdx(ff,kk) f=-ff; k=kk; stem(k,f,’filled’) axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])