信号与系统课程设计报告---MATLAB在信号与系统中的使用

matlab
7.0、信号与系统
MATLAB简介
MATLAB是matrix和laboratory前三个字母的缩写,意思是:“矩阵实验室”,是Mathwork公司推出的数学类科技应用软件。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。具有以下基本功能:(1)数值计算功能;(2)符号计算功能;(3)可视化建模及动态仿真功能。
MATLAB部分常用函数:
eps:浮点相对精度
exp:自然对数的底数e
i
或
j:基本虚数单位
inf
或
Inf:无限大,
例如1/0
nan或NaN:非数值(Not
a
number),例如0/0
pi:圆周率
p(=
3.1415926.)
realmax:系统所能表示的最大数值
realmin:系统所能表示的最小数值
nargin:
函数的输入引数个数
nargout:
函数的输出引数个数
lasterr:存放最新的错误信息
lastwarn:存放最新的警告信息
sqrt(x):开平方
real(z):复数z的实部
imag(z):复数z的虚部
round(x):四舍五入至最近整数
fix(x):无论正负,舍去小数至最近整数
sign(x):符号函数
(Signum
function)。
rem(x,y):求x除以y的余数
gcd(x,y):整数x和y的最大公因数
lcm(x,y):整数x和y的最小公倍数
exp(x)
:自然指数
pow2(x):2的指数
log(x):以e为底的对数,即自然对数或
log2(x):以2为底的对数
log10(x):以10为底的对数
sin(x):正弦函数
cos(x):余弦函数
tan(x):正切函数
asin(x):反正弦函数
acos(x):反余弦函数
atan(x):反正切函数
min(x):
向量x的元素的最小值
max(x):
向量x的元素的最大值
MATLAB基本绘图函数:
plot:
x轴和y轴均为线性刻度(Linear
scale)
loglog:
x轴和y轴均为对数刻度(Logarithmic
scale)
fplot
较精确的函数图形
stem
针状图
fill
实心图
第一章
MATLAB应用功能简介
1、MATLAB
的数值计算功能
1.1
基本概念
变量
和其它高级语言一样,MATLAB
也是使用变量来保存信息。变量由变量名表示,变量
的命名应遵循如下规则:
(1)变量名必须以字母开头;
(2)变量名可以由字母、数字和下划线混合组成;
(3)变量名区分字母大小写;
(4)变量名的字符长度不应超过
31
个。
函数
(1)表达式
(2)变量=表达式
表达式由变量名、常数、函数和运算符构成。
语句结尾若不加“;”,则表示在语句执行后,在将计算结果存入内存的
同时,还将运算结果显示出来
矩阵
(1)直接输入法;
(2)利用
MATLAB
内部函数创建;
(3)从外部数据文件(*.mat)装载并创建矩阵。
向量
(1)利用冒号
“:”
运算生成向量
(2)利用函数
linspace
()生
成向量
①linspace(m,n)
②linspace(m,n,s)
命令
Clear
清除当前工作空间全部变量
Clear
a
b
c
清除当前工作空间变量a、b、c
who
或
whos
了解已赋值变量的有关信息
clc
擦除工作窗中所显示的全部内容
clf
擦除当前工作窗中的图像
1.2
基本运算
矩阵加减与数组加减
(1)若参与运算的两矩阵(数组)的维数相同,则加减运算的结果是将两矩阵的对应元
素进行加减
(2)若参与运算的两矩阵的之一为标量(1×1
的矩阵),则加减运算的结果是将矩阵(数
组)的每一元素与该标量逐一相加减
矩阵乘与数组乘
矩阵乘与数组乘有着较大差别,运算结果也完全不同。矩阵乘的运算符为“*”,运算是按矩阵的乘法规则进行的,即参与乘运算的两矩阵的内维必须相同。设
A、
B
为参与乘
运算的两矩阵,C
为
A
和
B
矩阵乘的结果,则它们必须满足关系
Cm×n=Am×k
Bk×n。因此,参与运算的两矩阵的顺序不能任意调换,因为
A*B
和
B*A
计算结果很可能是完全不一样
的。数组乘的运算符为“.*”,运算符中的点号千万不能遗漏,也不能随意加空格符。参与
数组乘运算的两数组的大小必须相等(即为同维数组)。
数组乘的结果是将两同维数组(矩
阵)的对应元素逐一相乘,因此,A.*B
和
B.*A
计算结果是完全相同的.由于,矩阵运算和数组运算的差异,能进行数组乘运算的两矩阵,不一定能进行矩阵乘运算。
矩阵除与数组除
矩阵除与数组除也有着较大差别,运算结果也完全不同。
矩阵除分为矩阵右除和矩阵左除两种情况。矩阵右除的运算符为“/”,设
A、B
为两矩阵,则“A/B”是指方程
X
B
=
A
的解矩阵
X。显然,矩阵右除运算对参与运算的两矩阵的维数是有一定要求的,即矩阵
A
和
B
的列数必须相等。矩阵右除允许参与右除运算的矩阵
B
为标量,这时矩阵右除运算的结果是将矩阵
A
的,每一元素逐一与该标量进行除法运算矩阵左除的运算符为“\”,设
A、B
为两矩阵,则“A\
B”是指方程
B
X
=
A
的解矩阵
X。显然,矩阵左除运算对参与运算的两矩阵的维数是也有一定的要求,即矩阵
A
和
B的行数必须相等。
数组右除的运算符为“.
/”,左除的运算符为“.
\”。数组右除和左除的运算结果是完全
等效的。设
A、B
为两同维矩阵
,则“A.
/B”的运算结果是将矩阵
A
的每一个元素与矩阵
B
的对应元素相除。需要就意的是,参与数组运算的两矩阵(数组)的大小必须相等。
1.3可视化功能
1.3.1
绘制二维图形
1、绘制简单的二维曲线
MATLAB
中最常用的绘图函数为
plot。根据
plot
函数参数的不同,可以在平面上绘制
不同的曲线。plot
函数是将各个数据点通过连折线的方式来绘制二维图形的,若对曲线细
分的话,曲线可以看成是由直线连接而成的。plot
命令的格式有以下几种:
(1)
plot(y)
当
y
为一向量时,以
y
的序号作为
X
轴,按向量
y
的值绘制曲线。
(2)
plot(x,y)
x,y
均为向量时,以
x
向量作为
X
轴,向量
y
作为
Y
轴绘制曲线。
(3)
plot(x,y1,‘option’,x,y2,‘option’,…)
(4)
plot(x1,y1,‘option’,x2,y2,‘option‘,…)
2、离散序列图的绘制
(1)stem(y)
(2)stem(x,y,‘option’)
(3)stem(x,y,‘filled’)
3、标识坐标轴名称
通过
xlable(‘string’)和
ylable(‘string’)命令给
X
轴和
Y
轴加上标注。title(‘string’)命令给图形加上标题。使用
grid
on
或
grid
off
命令在所画出的图形中添加或去掉网络线。使用坐标轴确定文字位置的
text
命令;使用鼠标确定文字位置的
gtext命令。
(1)
text(x,y,‘string’,‘option’)
(2)
gtext(‘string’)
4、调整坐标轴状态
axis(‘string’)这个命令将坐标轴的状态调整为字符串‘string’的指定的状态。
1.3.2
绘制三维图形
MATLAB
提供了许多实现三维数据可视化的函数,可以在三维空间中绘制曲线或曲面。
1、三维折线及曲线的基本绘图命令
(1)plot3(x1,y1,z1,’option1‘,x2,y2,z2,‘option2’,…)
(2)axis(xmin
xmax
ymin
ymax
zmin
zmax)
2、绘制三维网格曲面
(1)
mesh(X,Y,Z)命令绘制网格曲面
参数
X,Y,Z
都是矩阵,X
矩阵的行向量相同,Y
矩阵的列向量相同。
(2)
mesh(x,y,Z)命令绘制网格曲面
参数
x
和
y
分别是长度为
n
和
m
的向量,Z
是
m*n
矩阵。
(3)
mesh(Z)
命令绘制网格曲面
若
Z
是
m*n
矩阵,则栅格数据点的取法是:x=1:n,y=1:m
3、图形绘制中的视角定义
view(2)
设定
[AZ
,
EL]=[0
,
90],
即观测
x-y
平面的显示效果。
view(3)
设定[AZ
,EL]=[-37.5,30],即缺省视点位置。
1.3.3
图形的控制和设置
1、创建或打开图形窗口
(1)figure
命令
每调用一次就打开一个新的图形窗口。
(2)figure(n)命令
2、图形重叠
hold
on
命令:保留当前窗口的图形;hold
off
命令:解除
hold
on
命令。
利用图形窗口分割函数
subplot(),也可以在同一个图形窗口中绘制多幅图形。
当我们调用
plot
命令绘制二维曲线时,MATLAB
的执行过程大致如下:
(1)
‘使用
figure
命令,在屏幕(root)对象上生成一个图形窗口(Figure
对象);
(2)使用
axis
命令,在图形窗口内生成一个绘图区域(Axes
对象);
(3)最后用
line
命令在
Axes
指定的区域内绘制线条(Line
对象)
3、属性
(1)获取属性PropertyValue=get(handle,’ProperName’)
(2)属性的设置set(handle,‘ProtertyName1’,ProtertyValue1,’PropertyName2’,PropertyValue2,…)
通过
set()函数设置坐标轴对象和字符对象的属性
1.4
实例简介
1.4.1
应用基础
变量
a=
happy
new
year
b=365
函数
a=rand(4)
b=rand(2,5)
运行结果为:
a
=
0.9501
0.89130.82140.9218
0.2311
0.76210.44470.7382
0.6068
0.45650.61540.1763
0.4860
0.01850.79190.4057
b=
0.3028
0.15090.3784
0.8537
0.4966
0.5417
0.69790.8600
0.5936
0.8998
矩阵
a=[1
2
3
;4
5
6;7
8
9]
运行结果为
a=
1
2
3
4
5
6
7
8
9
向量
a=1:10
运行结果为
a
=
1
2
3
4
5
6
7
8
9
10
矩阵加减与数组加减
A=[1
1
1
2
2
2
3
3
3];
B=A;
A+B
ans
=
2
2
2
3
4
4
6
6
6
A-B
ans
=
0
0
0
0
0
0
0
0
0
矩阵乘与数组乘
a=[1
1
1;2
2
2;3
3
3];
b=a;
a*b
ans
=
6
6
6
12
12
12
18
18
18
f=ones(1,3);
g=ones(3,1);
f*g
ans
=
g*f
ans
=
3
1
1
1
1
1
1
1
1
1
矩阵除与数组除
A=[2
2
3
3
4
4
1
1
2
2
3
3
4
4
5
5
6
6];
B=[1
1
3
3
2
2
1
1
1
1
1
1
2
2
5
5
3
3];
A./B
ans
=
2
2
1
1
2
2
1
1
2
2
3
3
2
2
1
1
2
2
B./A
ans
=
0.5000
0.5000
1.0000
1.0000
0.5000
0.5000
1.0000
1.0000
0.5000
0.5000
0.3333
0.3333
0.5000
0.5000
1.0000
1.0000
0.5000
0.5000
1.4.2
绘制二维图形
1、连续序列图的绘制
function
[f]=aa(t)
f=sym(
sin(pi/4*t)
)
ezplot(f,[-16,16])
图形如下:
n=0:15;
2、离散序列图的绘制
%
steam
plot
x=0:0.1:4;
y=sin(x.^2).*exp(-x);
stem(x,y)
图形如右:
1.4.3绘制三维图形
1、
x=-8:0.5:8;
y=x;
X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z)
grid
on
axis([-10
10
-10
10
-1
1])
2、视角变换
[X,Y]
=
meshgrid([-2:.25:2]);
Z
=
X.*exp(-X.^2
-Y.^2);
surf(X,Y,Z);
view([0
0]);
view([180
0]);
第二章
信号与系统分析及MATLAB实现
2.1
信号的时域分析
2.1.1
信号的表式及可视化
(1)连续时间信号
向量表示法:
对于连续时间信号
f
(t)
,
我们可以用两个行向量
f
和
t
来表示
,
其中向量
t
是形如
t=t1:p
:
t2
的
MATLAB
命令定义的时间范围向量,
t1
为信号起始时间,
t
2
为终止时间,p
为时间间隔。向量
f
为连续信号
f
(t)
在向量
t
所定义的时间点上的样值。例如对于连续信号
f
(t)=Sa
(t)=sin(
t)/t
符号运算表示法:
用ezplot()命令绘制出信号波形
(2)离散时间信号
一般说来,离散时间信号用
f
(k
)
表示,其中变量
k
为整数,代表离散的采样时间点。f
(k
)
可表示为:
f
(k
)=
{……f
(2
),f
(1),f
(0),f
(1),f
(2)……}
在用MATLAB表示离散序列并将其可视化时,注意:
第一,
与连续时间信号不同,离散时间信号无法用符号运算来表示;
第二,由于在MATLAB中,矩阵的元素个数是有限的,因此,MATLAB无法表示无序列;
第三,在绘制离散信号波形时,要使用专门绘制离散数据的stem命令,而不是plot命令。
2.1.2
信号的时域运算、时域变换及MATLAB实现
(1)连续信号的时域运算、时域变换
1.
相加
连续信号的相加,是指两信号的对应时刻值相加,即
f
(t
)=f1
(t)+f
2
(t
)
2.
相乘
连续信号的相乘,是指两信号的对应时刻值相乘,
即f
(t)=f1
(t
)*f2
(t)
3.
移位
连续信号的移位也称平移。对于连续信号
f
(t)
,若有常数
t0
>0
,延时信号
f
(t-t0
)是将原信号沿正
t
轴方向平移时间
t0
,而
f
(t+t0
)
是将原信号沿负
t
轴方向移动时间
t0
。
4.
反折
连续信号的反折,是指将信号以纵坐标为轴反折,即将信号
f
(t)
中的自变量
t
换为-t
。
5.
尺度变换
连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f
(t)
中的自变量
t
换为
at
,当
a>1
时,信号f
(at
)
以原点为基准,沿横轴压缩到原来的
1/
a
;当0
时,信号
f
(at)
将沿横轴展宽至原来的
1/
a
倍。
6.倒相
连续信号的倒相,是指将信号
f
(t)以横轴为对称轴对折得到f
(t)
(2)离散信号的时域运算、时域变换
对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,
平移、反折、及倒相变换与连续信号的定义完全相同,这里就不再累述。但需要注意,与
连续信号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,而
必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、
相乘,因而参加运算的两序列向量必须具有相同的维数。
2.1.3
用MATLAB分析常用的时间信号特性
1、连续时间信号
正弦信号定义为:f
(t
)=A
cos(wt+φ
)
实指数信号:
f
(t)=Ce^(at)
,其中
c
和
a
为实常数
虚指数信号:f
(t
)=Ae^(jwt),A
为
常数,w
为虚指数信号的角频率。
复指数信号:f
(t
)=Ae^(st)
,其中
s=σ+jw
为复常数。
2、离散时间信号
离散时间正弦序列的表达式为:f
(k
)=
A
cos(kw+j
)
:式中
k
为无量纲的整数,
w
和
j
以弧度为单位,
w
称为离散正弦序列的数字角频率,j
为初相位。
离散时间实指数序列的一般形式为:f
(k)=ca
^k
,其中
c
和
a
为实常数。
离散时间虚指数序列的一般形式为:f
(k
)=e^(jwk)其中
w
为角频率
复指数序列的一般形式为:f
(k
)=r^(k)*e^(jwk)
2.2
连续系统的是与分析及MATLAB实现
2.2.1
离散时间序列卷积及MATLAB实现
MATLAB
的
conv()函数可以帮助我们快速求出两个离散序列的卷积和。conv
函数的
调用格式为:f
=
conv
(f1,f2
)其中
f1
为包含序列
f1(k
)
的非零样值点的行向量,f2
为包含序列
f
2
(k
)
的非零样值点的行向量,向量
f
则返回序列
f
(k
)=f1
(k
)*f
2
(k
)
的所有非零样值点行向量
2.2.2
连续时间信号卷积及MATLAB实现
两个与卷积相关的重要结论:
(1)f
(t
)
=
f
(t)d
(t
),即连续信号可分解为一系列幅度由f
(t
)决定的冲激信号d
(t)及其平移信号之和。
(2)线性时不变连续系统,设其输入信号为f
(t),单位响应为h(t),其零状态响应为y(t
),则有:
y
(t)
=
f
(t
)
h(t)
用
MATLAB
实现连续信号
f1
(t)
与
f
2
(t
)
卷积的过程如下:
(1)将连续信号
f1
(t)
与
f
2
(t
)
以时间隔Δ进行取样,得到离散序列
f1
(kΔ)
和
f2
(kΔ)
(2)构造与
f1
(k)
和
f
2
(k)
相对应的时间向量f1
(kΔ)和
f2
(kΔ)(注意,此时时间序号向量
k1、k2
的元素不再是整数,而是取样时间隔Δ的整数倍的时间间隔点);
(3)调用
conv()函数计算卷积积分
f
(t)
的近似向量
f
(n
)
;
(4)构造
f
(n)
对应的时间向量
k。
LTI
系统当输入为冲激信号d
(t)时产生的零状态响应称为系统的冲激响应,用h(t)表示。若输入为单位阶跃信号e
(t)时系统产生的零状态响应则称为系统的阶跃响应,记为g
(t),如图所示:对
LTI
连续系统,设其输入信号为f
(t),冲激响应为h(t),零状态响应为y(t
),则有:y
(t)
=
f
(t
)
h(t)即h(t)包含了连续系统的固有特性,与系统的输入无关。
MATLAB
为用户提供了专门用于求连续系统冲激响应及阶跃响应,并绘制其时域波形
的函数
impulse
和
step。在调用函数
impulse()和
step()时,我们需要用向量来对连续系统进行表示。
Impulse()函数有如下几种调
(1)impulse(
b,a
)
(2)impulse(
b,a,t
)
(3)impulse(
b,a,t1:p:t2
)
(4)impulse(
b,a,t1:p:t2
)
函数
step()将绘出由向量
a
和
b
表示的连续系统的阶跃响应
g
(t)
在指定时间范围内的
波形图,并能求出其数值解。和
impulse()函数一样,step()函数也有如下四种调用格式:
(1)step(b,a)
(2)step(b,a,t)
(3)step(b,a,t1:p:t2)
(4)y=step(b,a,t1:p:t2)
函数
impz(
)能绘出向量
a
和
b
定义的离散系统在指定时间范围内单位响应的时域波形,
并能求出系统单位响应在指定时间范围内的数值解。Impz()函数有如下几种调用格式:
(1)impz(b,a)
(2)impz(b,a,n)
(3)impz(b,a,n1:n2)
(4)impz(b,a,n1:n2)
MATLAB
的函数
lsim(
)能对上述微分方程描述的
LTI
连续系统的响应进行仿真。lsim(
)
函数能绘制连续系统在指定的任意时间范围内系统响应的时域波形图,还能求出连续系统
在指定的任意时间范围内系统响应的数值解。lsim()函数有如下两种调用格式:
(1)lsim(b,a,x,t)
(2)lsim(b,a,x,t)
MATLAB
为用户提供了求
LTI
离散系统响应的专用函数
filter()。该函数能求出由差分
方程描述的离散系统在指定时间范围内的输入序列时所产生的响应序列的数值解。
filter()函数的调用格式:filter(b,a,x)
2.3
实例简介
2.3.1
信号的时域分析及MATLAB实现
例1:设信号
f(t)
=(1+t/2)*[ε(t+2)-ε(t-2)],用MATLAB求f(t+2),f(t-2),f(-t),f(2t),-
f(t)并绘出其时域波形。
解:根据前面的介绍,我们可用符号运算来实现上述过程,MATLAB命令如下:
syms
t
f=sym(
(t/2+1)*(heaviside(t+2)-heaviside(t-2))
)
subplot(2,3,1),ezplot(f,[-3,3])
y1=subs(f,t,t+2)
subplot(2,3,2),ezplot(y1,[-5,1])
y2=subs(f,t,t-2)
subplot(2,3,3),ezplot(y2,[-1,5])
y3=subs(f,t,-t)
subplot(2,3,4),ezplot(y3,[-3,3])
y4=subs(f,t,2*t)
subplot(2,3,5),ezplot(y4,[-2,2])
y5=-f
subplot(2,3,6),ezplot(y5,[-3,3])
命令执行后得到f,y1,y2,y3,y4,y5的符号表达式如下:
f
=
(t/2+1)*(heaviside(t+2)-heaviside(t-2));
y1
=
(1/2*t+2)*(heaviside(t+4)-heaviside(t));
y2
=
1/2*t*(heaviside(t)-heaviside(t-4))
;
y3
=
(-1/2*t+1)*(heaviside(-t+2)-heaviside(-t-2))
;
y4
=
(t+1)*(heaviside(2*t+2)-heaviside(2*t-2))
;
y5
=
-(1/2*t+1)*(heaviside(t+2)-heaviside(t-2));
图形如下:
例
2:已知如图所示信号
f1(t)及信号f2(t)=sin(2兀t
)
用
MATLAB绘出满足下列要求的信号波形。
(1)f3(t)=f1(-t)+f1(t)
(2)
f4(t)=-[f1(-t)+
f1(t)]
(3)f5(t)=f2(t)*
f3(t)
(4)
f6(t)=f1(t)*
f2(t)
解:信号f1(t)可表示为f1(t)=(-t+4)[ε(t)-ε(t-4)],这样我们即可用MATLAB
的符号运算功能来实现题目要求的时域运算:
syms
t
f1=sym(
(-1*t+4)*(heaviside(t)-heaviside(t-4))
)
subplot(2,3,1),ezplot(f1)
f2=sym(
sin(2*pi*t)
)
subplot(2,3,4),ezplot(f2,[-4,4])
y1=subs(f1,t,-t)
f3=f1+y1
subplot(2,3,2),ezplot(f3)
f4=-f3
subplot(2,3,3),ezplot(f4)
f5=f2*f3
subplot(2,3,5),ezplot(f5)
f6=f1*f2
subplot(2,3,6),ezplot(f6)
命令执行后得到f1(t),f2(t),f3(t),f4(t),f5(t),f6(t)的符号表达式如下:f1
=(-1*t+4)*(heaviside(t)-heaviside(t-4))
f2
=sin(2*pi*t)
y1
=(t+4)*(heaviside(-t)-heaviside(-t-4))
f3=(-t+4)*(heaviside(t)-heaviside(t-4))+(t+4)*(heaviside(-t)-heaviside(-t-4))
f4
=
-(-t+4)*(heaviside(t)-heaviside(t-4))-(t+4)*(heaviside(-t)-heaviside(-t-4))
f5
=
sin(2*pi*t)*((-t+4)*(heaviside(t)-heaviside(t-4))+(t+4)*(heaviside(-t)-heaviside(-t-4)))
f6
=
(-t+4)*(heaviside(t)-heaviside(t-4))*sin(2*pi*t);图形如下:
例3:有两离散序列,f
1
(k)
={
2,1,0,1,2,f
2
},f2((k
)
={
1,1,1
}用MATLAB绘出它们的波形及f
1
(k
)+f
2
(k)
的波形。
解:
MATLAB命令为:
f1=-2:2;
k1=-2:2;
f2=[1
1
1];
k2=-1:1;
stem(k1,f1),axis(-3,3,-2.5,2.5)
stem(k2,f2),axis(-3,3,-2.5,2.5)
[f,k]=lsxj
(f1,f2,k1,k2)
程序运行结果如下,绘制的波形如图所示:
f=
-2
0
1
2
2
k=
-2
–1
0
1
2
例4:画出复指数信号f
(t)=
e^(-t)*
e^(10it)的实部、虚部、模及相角随时间变化的曲线,
并观察其时域特性。
解:对应的MATLAB程序如下:
t=0:0.01:3
a=-1;b=10;
z=exp((a+i*b)*t);
subplot(2,2,1),plot(t,real(z)),title(
实部
);
subplot(2,2,3),plot(t,imag(z)),title(
虚部
);
subplot(2,2,2),plot(t,abs(z)),title(
模
);
subplot(2,2,4),plot(t,angle(z)),title(
相角
);
例5:画出复指数信号f
(t)=
r^(k)*
e^(jwk)的实部、虚部、模及相角随时间变化的曲线,
并观察其时域特性
解:创建M文件:
function
dfzsu(n1,n2,r,w)
%n1:绘制波形的虚指数序列的起始时间序号
%n2:绘制波形的虚指数序列的终止时间序号
%w:虚指数序列的角频率
%r:
指数序列的底数
k=n1:n2;
f=(r*exp(i*w)).^k;
Xr=real(f);
Xi=imag(f);
Xa=abs(f);
Xn=angle(f);
subplot(2,2,1),stem(k,Xr,filled
),title(
实部
);
subplot(2,2,3),stem(k,Xi,filled
),title(
虚部
);
subplot(2,2,2),stem(k,Xa,filled
),title(
模
);
subplot(2,2,4),stem(k,Xn,filled
),title(’相角’);
输入dfzsu(0,20,0.9,pi/4)
,结果如图:
2.3.2
离散时间序列卷积及MATLAB实现
例6:已知某LTI
离散系统,其单位响应h(k)
=
e(k)
-e(k
-
4),求该系统在激励为f
(k)
=
e(k)
-e(k
-3)时的零状态响应y(k),并绘出其时域波形图。
解:由LTI
变离散系统的分析可得
y(k)
=
h(k)
f
(k)
因此,我们可调用dconv()函数来解决此问题,相应的MATLAB
命令为:
f1=ones(1,4);
k1=0:3;
f2=ones(1,3);
k2=0:2;
[f,k]=dconv(f1,f2,k1,k2)
运行结果为:
f
=
1
2
3
3
2
1
k
=
0
1
2
3
4
5
时域波形图
例7:已知两连续时间信号如下图所示,试用MATLAB
求f(t)=
f1(t)
f2(
t),并绘出f
(t)的时域波形图。
解:
我们可以调用前述的函数sconv(
)来解决此问题,即首先设定取样时间间隔p,并对连续信号f1(t)和f2(t)的非零值区间以时间间隔p
进行抽样,产生离散序列f1和f2,然后构造离散序列f1
和f2
所对应的时间向量k1
和k2,最后再调用sconv
函数即可求出f1(t)
f2(
t)的数值近似,并绘出其时域波形图。实现上述过程的
MATLAB
命令如下:
p=0.01;
k1=0:p:2;
f1=0.5*k1;
k2=k1;
f2=f1;
[f,k]=sconv(f1,f2,k1,k2,p)
上述命令绘制的波形如图所示。图中分别给出了取样时间间隔p=0.5
和p=0.01时的处理效果。可见,当取样时间p
足够小时,函数sconv(
)的计算结果就是连续时间卷积f(t)=f1(t)*f2(
t)
的较好的数值近似
例8:已知描述某连续系统的微分方程为:2
y¢¢(t
)
+
y¢(t)
+
8
y(t)
=
f
(t
)
试用
MATLAB
绘出该系统的冲激响应和阶跃响应的波形。
解:直接调用函数impulse()和step()即可解决此问题,对应的MATLAB
命令如下:
b=[1];
a=[2
1
8];
subplot(1,2,1)
impulse(b,a)
subplot(1,2,2)
step(b,a)
上述命令绘制的系统冲激响应和阶跃响应的波形如图所示。
例9:已知描述某离散系统的差分方程如下:
2
y(k)
-
2y(k
-
1)
+
y(k
-
2)
=
f
(k
)
+
3
f
(k
-1)
+
2
f
(k
-
2)
试用
MATLAB
绘出该系统0~50
时间范围内单位响应的波形。
解:首先用向量a
和b
表示出该离散系统,然后再调用impz()函数即可解决此问题。实现上述过程的MATLAB
命令如下:
a=[2
-2
1]
b=[1
3
2];
impz(b,a)
绘制的系统单位响应波形图如图所示
例10:已知描述离散系统的差分方程为:
y(k
)
-
0.25
y(k
-1)
+
0.5
y(k
-
2)
=
f
(k
)
+
f
(k
-
1)
且知该系统输入序列为f
(k)
=
(0.5)^k*ε(k)
试用
MATLAB
实现下列分析过程:
(1)
画出输入序列的时域波形;
(2)
求出系统零状态响应在0~20
区间的样值;
(3)
画出系统的零状态响应波形图。
解:我们可以调用filter()函数来解决此问题。实现这一过程的MATLAB
命令如下:
a=[1
-0.25
0.5];
b=[1
1];
t=0:20;
x=(1/2).^t;
y=filter(b,a,x);
subplot(2,1,1);
stem(t,x);
title(‘输入序列’);
subplot(2,1,2);
stem(t,y);
title(‘响应序列’)
小露一手:
x=cos(5/16*pi*n);
X_16=fft(x,16);
X_32=fft(x,32);
subplot(211);
hold
on;
plot(n/16,abs(X_16),r
);
plot(L/32,abs(X_32));
hold
off;
w=linspace(0,pi,512);
h=freqz(x,1,w);
subplot(212);
plot(w/pi,abs(h));
课程设计体会
在短短两周的课程设计里,我学到了MATLAB的基础应用知识,和简单的信号与系统分析及MATLAB实现。
在以前的课程中,对信号总觉得非常抽象。尤其是卷积和在傅里叶变换、拉普拉斯变换,S域模型等,都只是通过一系列的数学推导和运算来说明其性质和规律,但自己并不能很好的理解,由于没有其他物理规律只是那么直观,所以只能靠记忆来学习。往往还会混淆,这非常不利于知识的延伸和升华。
通过这次课程设计,在对MATLAB的应用基础熟悉之后,按照书本上的例题,自己动手实际操作,通过计算机的模拟实践,我们能清楚直观地看到以前觉得抽象的数学符号运算变为具体的图形,使知识变得简单易懂。特别有助于我们学习和记忆。
但是,由于时间较短,我们不可能学会相关的编程,只是在一步一步验证以前学过的理论。虽然这些看起来很简单,但是对于我们来说,MATLAB是一个全新的东西,正如大一时的VisualBasic,一时间我们很难去把握它。所以在这些验证过程中,往往还是出错,很多时候就是因为一个标点符号。这在一定程度上告诉我们,做学问一定要严谨,不能有丝毫的差错。
在看到有关书籍和网络上介绍有关MATLAB的更加强大的功能之后,更觉得我们学到的真是微乎其微。在惊叹这个软件强大之余,也萌生了要找时间好好学习使用这个非常实用的软件。
指导教师评语及设计成绩
评
语
课程设计成绩:
指导教师:
日期:*年*月*日
参考文献
[1]
吴大正,杨林耀,张永瑞.
信号与线性系统分析(第三版).
高等教育出版社.
北京.1999
[2]
郑君里,应启珩,杨为理.
信号与系统.
高等教育出版社.
北京.
2000
[3]
吴新余,周井泉,沈元隆.
信号与系统——时域、频域分析及MATLAB
软件的应用.
电子工业出版社.
北京.
1999
[4]
阎鸿森,王新凤,田惠生.
信号与线性系统.
西安交通大学出版社.
西安.
1999[5]
程卫国,冯峰,姚东等.
MATLAB5.3
应用指南.
人民邮电出版社.
北京.
1999
[6]
楼顺天,李博菡.
基于MATLAB
的系统分析与设计——信号处理.
西安电子科技大学出版社.
西安.
1999
[7]
陈怀琛,王朝英,高西全等译.
数字信号处理及其MATLAB
实现.
电子工业出版社.
北京.
1998
[8]
刘树棠译.
信号与系统计算机练习——利用MATLAB.
西安交通大学出版社.
西安.1999
[9]
高俊斌.
MATLAB
语言与程序设计.
华中理工大学出版社.
武汉.
1998
[10]
张志涌等.
精通MATLAB5.3
版本.
北京航空航天大学出版.
北京.
2000
28
