《信号与系统实验》matlab入门与操作.docx
《《信号与系统实验》matlab入门与操作.docx》由会员分享,可在线阅读,更多相关《《信号与系统实验》matlab入门与操作.docx(19页珍藏版)》请在冰豆网上搜索。
《信号与系统实验》matlab入门与操作
《信号与系统》实验指导书
信号处理教研室编
河南科技学院机电学院
绪言MATLAB应用简介
1.MATLAB在信号与系统中的应用简介
MATLAB的名称源自MatrixLaboratory,1984年由美国Mathworks公司推向市场。
它是一种科学计算软件,专门以矩阵的形式处理数据。
MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作。
MATLAB软件包括五大通用功能:
数值计算功能(Nemeric);符号运算功能(Symbolic);数据可视化功能(Graphic);数据图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。
该软件有三大特点:
一是功能强大;二是界面友善、语言自然;三是开放性强。
目前,Mathworks公司已推出30多个应用工具箱。
MATLAB在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。
由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能能基本满足信号与系统课程的需求。
例如,解微/差分方程、傅里叶正反变换、拉普拉斯正反变换、z正反变换等。
MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲激响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析、零极点图绘制等内容。
数值计算仿真分析可以帮助更深入理解信号与系统的理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。
2.MATLAB软件使用入门
2.1MATLAB软件的环境介绍
MATLAB6.5的工作桌面由标题栏、菜单栏、工具栏、命令窗口(CommandWindow)、工作空间窗口(Workspace)、当前目录窗口(CurrentDirectory)、历史命令窗口(CommandHistory)及状态栏组成,从而为用户使用MATLAB提供了集成的交互式图形界面,如图1所示。
MATLAB的命令窗口是接收用户输入命令及输出数据显示的窗口。
当启动MATLAB软件时,命令窗口就做好了接收指令和输入的准备,并出现命令提示符(>>),在命令提示符后输入指令,包括变量、函数和数值等,这些被放置在MATLAB的工作空间中。
查看工作空间的另一种方法是使用whos命令,在命令提示符后输入whos命令,工作空间中的内容概要将作为输出显示在命令窗口中。
有的命令可以用来清除不必要的数据,同时释放部分系统资源。
clearall命令可以用来清除工作空间的所有变量,如果要清除某一特定变量则需要在clear命令后加上该变量的名称。
另外,clc命令用来清除命令窗口的内容。
对于初学者而言,需要掌握的最重要且最有用的命令应为help命令。
MATLAB命令和函数有数千个,而且许多命令的功能非常强大,调用形式多样。
要想了解一个命令或函数,只需在命令提示符后输入help,并加上该命令或函数的名称,则MATLAB会给出其详细帮助信息。
2.2MATLAB软件基本运算入门
1.MATLAB软件的数值计算
(1)算术运算
MATLAB可以像一个简单的计算器一样使用,不论是实数运算还是复数运算都能轻松完成。
标量的加法、减法、除法和幂运算均可通过常规符号“+”、“”、“*”、“/”、以及“^”来完成。
对于复数中的虚数单位,MATLAB采用预定义变量i或j表示,即i=j=
。
因此,一个复常量可用直角坐标形式来表示。
例如,在命令窗口输入(以下凡是程序语句前带有“>>”的,都表示在命令窗口输入)
>>A=-3-i*4
A=
-3.0000-4.0000i
将复常量-3-i4赋予了变量A。
一个复常量还可用极坐标的形式来表示,例如,
>>B=2*exp(i*pi/6)
B=
1.7321+1.0000i
其中,pi是MATLAB预定义变量,pi=
。
复数的实部和虚部可以通过real和imag运算符来实现,而复数的模和辐角可以通过abs和angle运算符来实现,应注意辐角的单位为弧度。
例如,复数A=-3-i4的模和辐角、复数B的实部和虚部的计算分别为
>>A_mag=abs(A)
A_mag=
5
>>A_rad=angle(A)
A_rad=
-2.2143
>>B_real=real(B)
B_real=
1.7321
>>B_imag=imag(B)
B_imag=
1.0000
如果将弧度值用“度”来表示,则可进行转换,即
>>A_deg=angle(A)*180/pi
A_deg=
-126.8699
复数A的模可表示为
,因此,其共轭复数可通过conj命令来实现,例如,
>>A_mag=sqrt(A*conj(A))
A_mag=
5
(2)向量运算
向量是组成矩阵的基本元素之一,MATLAB具有关于向量运算的强大功能。
向量被分为行向量和列向量。
生成向量的方法有很多,我们主要介绍两种。
①直接输入向量:
即把向量中的每个元素列举出来。
向量元素要用“[]”括起来,元素之间可用空格、逗号分隔生成行向量,用分号分隔生成列向量。
例如,
>>A=[1,3,5,21]
A=
13521
>>B=[1;3;5;21]
B=
1
3
5
21
②利用冒号表达式生成向量:
这种方法用于生成等步长或均匀等分的行向量,其表达式为x=x0:
step:
xn。
其中,x0为初始值;step表示步长或增量;xn为结束值。
如果step值缺省,则步长默认为1。
例如,
>>C=0:
2:
10
C=
0246810
>>D=0:
10
D=
012345678910
在连续时间信号和离散时间信号的表示过程中,我们经常要用到冒号表达式。
例如,对于
范围内的连续信号,可用冒号表达式“t=0:
0.001:
1;”来近似表达该区间,此时,向量t表示该区间以0.001为间隔的1001个点。
如果一个向量或一个标量与一个数进行运算,即“+”、“”、“*”、“/”、以及“^”运算,则运算结果是将该向量的每一个元素与这个数逐一进行相应的运算所得到的新的向量。
例如,
>>C=0:
2:
10;
>>E=C/4
E=
00.50001.00001.50002.00002.5000
其中,第一行语句结束的分号是为了不显示C的结果;第二句没有分号则显示出E的结果。
一个向量中元素的个数可以通过命令“length”获得,例如,
>>t=0:
0.001:
1;
>>L=length(t)
L=
1001
(3)矩阵运算
MATLAB又称矩阵实验室,因此,MATLAB中矩阵的表示十分方便。
例如,输入矩阵
在MATLAB命令窗口中可输入下列命令得到,即
>>a=[111213;212223;313233]
a=
111213
212223
313233
其中,命令中整个矩阵用括号“[]”括起来;矩阵每一行的各个元素必须用逗号“,”或空格分开;矩阵的不同行之间必须用分号“;”或者按Enter键分开。
关于矩阵的运算,分很多情况,这里不做详细说明,同学们可以课下查阅相关资料。
【例1】已知t为一向量,用MATLAB命令计算
在
区间上对应的值。
解:
在计算之前,先简要介绍一下Matlab基本操作。
打开Matlab6.5,只保留命令窗口(CommandWindow),点击文本编辑窗口(M-file)创建、编辑M程序。
如下图。
在文本编辑窗口输入指令程序。
当输入完整程序后,点击DEBUG→RUN运行程序,或用键盘F5键直接运行。
另外,也可点击窗口快捷运行程序键。
如下图。
编辑完成一个程序后,第一次运行或另存为时,需要保存M程序,保存的路径为命令窗口所示的当前目录路径(CurrentDirectory),该路径可自行设置。
如下图。
注意:
M文件在命名时有一定规则,错误命名时会使M文件不能正常运行。
(1)M文件名首字符不能是数字或下划线;
(2)M文件名不能与Matlab的内部函数名相同;
(3)M文件名中不能有空格,不能含有中文。
保险起见,要求采用英文字母对M文件命名。
一般多指令较长程序应在文本编辑窗口输入,修正、调试都比较方便。
打开文本编辑窗口,编辑MATLAB源程序(以下凡是程序语句前无“>>”的,都表示在文本编辑窗口输入)
t=0:
0.01:
1;
y=(sin(t).*exp(-2*t)+5)./(cos(t)+t.^2+1);
plot(t,y),xlabel('t'),ylabel('y')
保存运行,输出图形如下。
这里未将y向量的结果显示出来,而是利用plot命令将结果绘出。
2.MATLAB软件的符号运算
MATLAB符号运算功能由工具箱提供的函数命令实现,符号运算是指符号之间的运算,其运算结果仍以标准的符号形式表达。
符号运算是MATLAB的一个极其重要的组成部分,符号表示的解析式比数值解具有更好的通用性。
在使用符号运算之前必须定义符号变量,并创建符号表达式。
定义符号变量的语句格式为:
syms变量名
其中,各个变量名须用空格隔开。
例如,定义x、y、z三个符号变量的语句格式为
>>symsxyz
另一种定义符号变量的语句格式为
sym('变量名')
例如,x、y、z三个符号变量定义的语句格式为
>>x=sym('x')
>>y=sym('y')
>>z=sym('z')
sym语句还可以用来定义符号表达式,语句格式为
sym('表达式')
例如,定义表达式x+1为符号表达式对象,语句为
>>sym('x+1')
另一种创建符号表达式的方法是先定义符号变量,然后直接写出符号表达式。
例如,在MATLAB中创建符号表达式
,其MATLAB源程序为
>>symst
>>y=(sin(t).*exp(-2*t)+5)./(cos(t)+t.^2+1)
y=
(sin(t)*exp(-2*t)+5)/(cos(t)+t^2+1)
在符号运算中,可以用“simple”或者“simplify”函数来化简运算结果,例如,
>>symsx
>>f1=sin(x)^2;
>>f2=cos(x)^2;
>>y=f1+f2
y=
sin(x)^2+cos(x)^2
>>y=simplify(y)
y=
1
2.3MATLAB软件简单二维图形绘制
MATLAB的plot命令是绘制二维曲线的基本函数,它提供了数据的可视化。
例如,函数
关于变量x的曲线绘制的语句格式为
plot(x,y)
其中,输出以向量x为横坐标,向量y为纵坐标,且按照向量x、y中元素的排列顺序有序绘制图形,向量x与y必须拥有相同的长度。
绘制多幅图形的语句格式为
plot(x1,y1,'str1',x2,y2,'str2',...)
其中,用str1制定的方式,输出以x1为横坐标、y1为纵坐标的图形。
用str2制定的方式,输出以x2为横坐标、y2为纵坐标的图形。
若省略str,则MATLAB自动为每条曲线选择颜色与线型。
图形完成后,可以通过几个命令来调整显示结果。
如gridon或grid用来显示格线;axis([xmin,xmax,ymin,ymax])函数调整坐标轴的显示范围。
其中,括号内的“,”可用空格代替;xlabel和ylabel命令可为横坐标和纵坐标加标注,标注的字符串必须用单引号引起来;title命令可在图形顶部加注标题。
【例2】用MATLAB命令绘制函数
的波形图。
解:
打开文本编辑窗口,编辑MATLAB源程序
t=0:
0.01:
5;
y=sin(5*pi*t)+1./(cos(pi*t)+2);
plot(t,y)
axis([0,5,-12,5])
xlabel('t'),ylabel('y'),
gridon
保存运行,结果如图3所示。
用subplot命令可在一个图形窗口中按照规定的排列方式同时显示多个图形,方便图形的比较。
其语句格式为
subplot(m,n,p)
或者
subplot(mnp)
其中,m和n表示在一个图形窗口中显示m行n列个图像,p表示第p个图像区域,即在第p个区域作图。
例如,比较正弦信号相位差的MATLAB源程序为
t=0:
0.01:
3;
y1=sin(2*pi*t);
y2=sin(2*pi*t+pi/6);
subplot(211),plot(t,y1)
xlabel('t'),ylabel('y1'),title('y1=sin(2*pi*t)')
subplot(212),plot(t,y2)
xlabel('t'),ylabel('y2'),title('y2=sin(2*pi*t+pi/6)')
保存运行,结果如图4所示。
除了plot命令外,MATLAB提供了ezplot命令绘制符号表达式的曲线,其语句格式为
ezplot(y,[a,b])
其中,[a,b]参数表示符号表达式的自变量取值范围,默认值为
。
【例3】利用MATLAB的ezplot命令绘出函数
的波形图。
解:
MATLAB源程序为
symsx
y='-16*x^2+64*x+96';
ezplot(y,[0,5])
xlabel('t'),ylabel('y'),
gridon
程序运行结果如图5所示。
关于两者区别,简单的来说,plot是根据坐标数值画图;而ezplot根据函数式画图。
在绘图过程中,我们可利用“holdon”命令来保持当前图形,继续在当前图形状态下绘制其他图形,即可在同一窗口下绘制多幅图形。
“holdoff”命令用来释放当前图形窗口,绘制下一幅图形作为当前图形。
2.4MATLAB程序流程控制
MATLAB与其他高级编程语言一样,是一种结构化的编程语言。
MATLAB程序流程控制结构一般可分为顺序结构、循环结构、以及条件分支结构。
MATLAB中实现顺序结构的方法非常简单,只需将程序语句按顺序排列即可。
在MATLAB中,循环结构可以由for语句循环结构和while语句循环结构两种方式来实现。
条件分支结构可以由if语句分支结构和switch语句分支结构两种方式来实现。
1.for循环结构
for循环结构用于在一定条件下多次循环执行处理某段指令,其语法格式为
for循环变量=初值:
增量:
终值
循环体
end
循环变量一般被定义为一个向量,这样循环变量从初值开始,循环体中的语句每被执行一次,变量值就增加一个增量,直到变量等于终值为止。
增量可以根据需要设定,默认时为1。
end代表循环体的结束部分。
例如,用for循环结构求1+2+3+…100的和,其MATLAB源程序为
x=0;
fori=1:
100
x=x+i;
end
x
命令窗口显示:
>>
x=
5050
for循环结构在系统分析中有时用于求积分数值解
2.其它流程控制结构
除了for结构外,其他常用的几种程序流程控制结构while、if和continue、break、pause、input、error、disp等,大家可课下查阅相关资料熟悉它们。
MATLAB部分命令函数表
命令、函数名称
功能说明
命令、函数名称
功能说明
+
加
inf
无穷大(预定义变量)
–
减
initial
连续系统的零输入响应
*
矩阵乘法
input
提示用户输入
.*
数组乘法(点乘)
int
符号积分运算
^
矩阵幂
inv
求矩阵的逆
.^
数组幂(点幂)
iztrans
求符号z反变换
\
左除或反斜杠
laplace
求符号拉普拉斯变换
/
右除或斜杠
legend
设置图解注释
./
数组除(点除)
length
向量的长度
%
注释
line
建立曲线
‘
矩阵转置或引用
linespace
产生线性等分向量
=
赋值
lism
求系统响应的数值解
==
相等
log
自然对数
<>
关系操作符
log10
常用对数
&
逻辑与
max
求最大值
|
逻辑或
min
求最小值
~
逻辑非
mod
模除后取余
xor
逻辑异或
nan
非数值(预定义变量)
:
规则间隔的向量
ones
全“1”矩阵
abs
求绝对值或复数求模
phase
求相频特性
acos
反余弦函数
pi
圆周率(预定义变量)
angle
求复数相角
plot
线性图形
ans
当前的答案
pole
求极点
asin
反正弦函数
poly
将根值转换为多项式
atan
反正切函数
pzmap
绘制零极点图
axis
控制坐标系刻度和形式
pzmap
绘制零极点图
bar
条形图
quit
退出MATLAB
bode
波特图(频域响应)
rand
均匀分布的随机数矩阵
break
终止循环的执行
randn
正态分布的随机数矩阵
cla
清除当前坐标系
real
求复数的实部
clc
清除命令窗口
rectplus
产生非周期矩形脉冲
clear
清除工作空间变量
residue
部分分式展开
clf
清除当前图形
residuez
z变换的部分分式展开
close
关闭图形
return
返回引用的函数
conj
求复数的共轭复数
roots
求多项式的根
conv
求离散序列卷积和
rot90
矩阵旋转90度
cos
余弦函数
round
朝最近的整数取整
d2c
变离散为连续系统
sawtooth
产生周期三角波
dbode
离散波特图
simple
符号表达式化简
deconv
求多项式除法,解卷积
simplify
符号表达式化简
diag
建立和提取对角阵
sin
正弦函数
diff
求导运算
sinc
抽样函数(Sa函数)
dsolve
求微分方程符号解
sinh
双曲正弦函数
exp
指数
size
矩阵的尺寸
expm
矩阵指数
sqrt
求平方根
eye
单位矩阵
square
产生周期矩形脉冲
ezplot
符号函数二维作图
stairs
阶梯图
ezplot3
符号函数三维作图
stem
离散序列图或杆图
fft
快速傅里叶变换
step
求单位阶跃响应
figure
建立图形
subplot
在标定位置建立坐标系
figure
建立图形窗口
subs
符号变量替换
fill
绘制二维多边形填充图
sum
求和
filter
求差分方程的数值解
surface
建立曲面
format
设置输出格式
sym
定义符号表达式
fourier
求符号傅里叶变换
syms
定义符号变量
freqs
求连续系统的频率响应
tan
正切函数
freqz
求离散系统的频率响应
text
文本注释
function
增加新的函数
tf
建立传输函数模型
global
定义全局变量
tf2zp
传递函数转换为零极点
grid
画网格线
title
图形标题
gtext
用鼠标放置文本
triplus
产生非周期三角波
hold
保持当前图形
xlabel
X轴标记
i,j
虚数单位(预定义变量)
ylabel
Y轴标记
ifourier
求符号傅里叶反变换
zero
求零点
ilaplace
求符号拉普拉斯反变换
zeros
零矩阵
imag
复数的虚部
zp2tf
零极点表示为传递函数
impulse
求单位冲激响应
zplane
绘制离散系统零极图
impz
求单位取样响应
ztrans
求符号z变换