连续时间信号和系统时域分析报告及MATLAB实现Word文件下载.docx
《连续时间信号和系统时域分析报告及MATLAB实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《连续时间信号和系统时域分析报告及MATLAB实现Word文件下载.docx(38页珍藏版)》请在冰点文库上搜索。
>
t=-0.5:
0.01:
5;
t0=1.0;
q=stepfun(t,t0);
plot(t,q);
axisequal
其信号图如下:
2.2单位冲激信号
MATLAB实现程序如下:
t=-5:
a=(t==0);
plot(t,a);
信号图如下:
2.3正弦信号
正弦信号其MATLAB实现程序如下:
t=-1:
0.0001:
1;
A=6;
f=5;
b=1;
u=A*sin(2*pi*f*t+b);
plot(t,u)
axis([-11-6.56.5])
2.4实指数信号
实指数信号可由下面的表达式来表示:
MATLAB实现程序如下:
t=0:
0.002:
3;
A=3;
a=0.5;
b=A*exp(a*t);
plot(t,b)
axis([-0.23.1-0.214])
2.5虚指数信号
虚指数信号可由下面的表达式来表示:
A=2,
的虚指数信号
的MATLAB实现程序如下
0.001:
20;
a=2;
w=pi/4;
b=a*exp(i*w*t);
subplot(221),plot(t,real(b)),axis([0,20,-4,4]),title('
实部'
)
subplot(222),plot(t,imag(b)),axis([0,20,-4,4]),title('
虚部'
subplot(223),plot(t,abs(b)),axis([0,20,1,4]),title('
模'
subplot(224),plot(t,angle(b)),axis([0,20,-4,4]),title('
相角'
)
2.6复指数信号
复指数信号可由下面的表达式来表示:
4;
a=-1;
A=1;
b=12;
c=A*exp((a+i*b)*t);
subplot(221),plot(t,real(c)),title('
subplot(222),plot(t,abs(c)),title('
subplot(223),plot(t,imag(c)),title('
subplot(224),plot(t,angle(c)),title('
3连续时间信号的时域运算
3.1相加
要实现两信号的相加,即f(t)=f1(t)+f2(t)
f1(t)为单位阶跃信号,f2(t)为正弦信号,两信号相加的实现程序如下,
t=-6:
10;
t0=2;
a=stepfun(t,t0);
b=sin(2*pi*t);
f=b+a;
plot(t,f)
axis([-610-33])
3.2相乘
要实现两信号的相乘,即f(t)=f1(t)*f2(t)
f1(t)为单位阶跃信号,f2(t)为正弦信号,两信号相乘的实现程序如下:
t0=0.5;
f=a.*b;
plot(t,f);
axis([05-22]);
3.3数乘
要实现信号的数乘,即f(t)=A*f1(t)
A=3,f1(t)为单位阶跃信号,信号数乘的实现程序如下:
a=3;
t0=1;
b=stepfun(t,t0);
f=a*b;
axis([-2505]);
3.4微分
微分即求信号的导数。
对函数f(t)=t2求一阶微分的实现程序如下:
t=-40:
40;
a=t.*t;
d=diff(a);
subplot(211);
plot(t,a,'
-'
);
subplot(212);
plot(d,'
3.5积分
对f(t)=t2函数的一次积分的实现程序如下:
t=-2:
0.1:
2;
symst;
f=t*t;
a=int(f);
ezplot(f);
ezplot(a);
4.1反转
信号的反转就是将信号的波形以某轴为对称轴翻转180︒
信号f(t)=t的反转MATLAB程序如下:
t=-10:
1:
f=t;
a=fliplr(f);
h=flipud(f);
subplot(311);
axis([-22-22]);
title('
原'
subplot(312);
plot(t,a);
axis([-55-55]);
上下'
subplot(313);
plot(t,h);
左右’'
4.2时移
实现连续时间信号的时移即f(t-t0)或者f(t+t0),常数t0>
0。
余弦信号的时移实现程序如下:
y=cos(2*pi*t);
y1=cos(2*pi*(t-0.2));
plot(t,y,'
t,y1);
axis([05-1.51.5]);
4.3展缩
信号的展缩即将信号f(t)中的自变量t替换为at,a≠0。
正切信号的展缩实现程序如下:
a=1;
y=sin(2*pi*t);
y1=subs(y,t,a*t);
ezplot(y);
ezplot(y1);
4.4倒相
连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。
正弦信号的展缩实现程序如下:
y1=-y;
plot(t,y);
axis([04-1.51.5]);
plot(t,y1);
4.5综合变化
将f(t)=cos(t)/t通过反褶、移位、尺度变换由f(t)的波形得到f(-2t+3)的波形。
该变化的实现程序如下
f=sym('
cos(t)/t'
f1=subs(f,t,t+2);
f2=subs(f1,t,1*t);
f3=subs(f2,t,-t);
subplot(221);
ezplot(f,[-10,10]);
subplot(222);
ezplot(f1,[-10,10]);
subplot(223);
ezplot(f2,[-10,10]);
subplot(224);
ezplot(f3,[-10,10]);
5连续时间信号简单的时域分解
5.1信号的交直流分解
信号的交直流分解即将信号分解成直流分量和交流分量两部分之和,其中直流分量定义为
fD(t)=
/t
交流分量定义为
fA(t)=f(t)-fD(t)
例如对函数f(t)=cos(t)+2进行交直流分解。
程序如下:
t=-5:
f=cos(2*pi*t)+2;
a=mean(f);
b=f-a;
axis([-220.55]);
axis([-22-25]);
plot(t,b);
axis([-22-1.51.5]);
图像如下:
5.2信号的奇偶分解
对函数f(t)=cos(t-5)+t进行交直流分解。
MATLAB程序如下:
cos(t-5)+t'
f1=subs(f,t,-t)
a=1/2*(f+f1);
b=1/2*(f-f1);
ezplot(f,[-8,8]);
ezplot(a,[-8,8]);
ezplot(b,[-8,8]);
波形图如下图:
6连续时间系统的卷积积分的仿真波形
卷积积分在信号与线形系统分析中具有非常重要的意义,是信号与系统分析
的基本方法之一。
连续时间信号f1(t)和f2(t)的卷积积分(简称为卷积)f(t)定义为:
f(t)=f1(t)*f2(t)=
1(t)f2(t-
由此可得到两个与卷积相关的重要结论,即是:
(1)f(t)=f1(t)*
(t),,即连续信号可分解为一系列幅度由f(t)决定的冲激
信号
(t)及其平移信号之和;
(2)线形时不变连续系统,设其输入信号为f(t),单位响应为h(t)
,其零状态响应为y(t),则有:
y(t)=f(t)h(t)。
用MATLAB实现连续信号f1(t)与f2(t)卷积的过程如下:
(1)将连续信号f1(t)与f2(t)以时间间隔∆进行取样,得到离散序列f1(k∆)和f2(k∆);
(2)构造与f1(k∆)和f2(k∆)相对应的时间向量k1和k2;
(3)调用conv()函数计算卷积积分f(t)的近似向量f(n∆);
(4)构造f(n∆)对应的时间向量k。
卷积实现程序如下:
function[f,k]=sconv(f1,f2,k1,k2,p)
f=conv(f1,f2);
%计算序列f1与f2的卷积和f
f=f*p;
k0=k1
(1)+k2
(1);
%计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2;
%计算卷积和f的非零样值的宽度
k=k0:
p:
k3*p;
%确定卷积和f非零样值的时间向量
subplot(2,2,1)
plot(k1,f1)%在子图1绘f1(t)时域波形图
f1(t)'
xlabel('
t'
ylabel('
subplot(2,2,2)
plot(k2,f2)%在子图2绘f2(t)时波形图
f2(t)'
subplot(2,2,3)
plot(k,f);
%画卷积f(t)的时域波形
h=get(gca,'
position'
h(3)=2.5*h(3);
set(gca,'
h)%将第三个子图的横坐标范围扩为原来的2.5倍
f(t)=f1(t)*f2(t)'
f(t)'
例一:
实现程序如下:
p=0.1;
k1=0:
f1=0.5*k1;
k2=k1;
f2=f1;
[f,k]=docsconv(f1,f2,k1,k2,p)
例二:
f1=rectpuls(k1-1,length(k1));
[f,k]=sconv(f1,f2,k1,k2,p)
7连续时间系统的冲激响应、阶跃响应的仿真波形
对于连续时间系统,求解系统的冲激响应h(t)和阶跃响应g(t)对我们进行连续系统的分析具有非常重要的意义。
MATLAB为用户提供了专门用于求连续系统冲激响应和阶跃响应并绘制其时域波形的函数impulse()和step()。
在调用impulse()和step()函数时,我们需要用向量来对连续时间系统进行分析。
设描述连续系统的微分方程为:
iy(i)(t)=
jx(j)(t)
则我们可用向量A和B来表示该系统,即:
A=[AN,AN-1,……A1,A0]
B=[BN,BN-1,……B1,B0]
注意,向量A和B的元素一定要以微分方程中时间求导的降幂次序来排列,且缺项要用0来补齐。
例如,对微分方程
,则表示该系统的对应向量应为A=[132],B=[101]。
7.1impulse()函数
函数impulse()将绘出由向量a和b表示的连续系统在指定时间范围内的冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。
impulse()函数有如下四种调用格式:
(1)impulse(b,a):
该调用格式以默认方式绘出向量A和B定义的连续系统的冲激响应的时域波形。
例如描述连续系统的微分方程为
运行如下MATLAB命令:
a=[156];
b=[32];
impulse(b,a);
则绘出系统的冲激响应波形,如图所示:
(2)impulse(b,a,t):
运行命令impulse(b,a,6),则绘出系统在0~6秒范围内冲激响应的时域波形,如图所示
(3)impulse(b,a,t1:
t2):
若运行命令impulse(b,a,1:
3),则绘出1~3秒内,每隔0.1秒取样的冲激响应的时域波形,如图所示:
(4)y=impulse(b,a,t1:
若运行命令y=impulse(b,a,0:
0.2:
3),则运行结果为:
7.2step()函数
step()函数可绘出连续系统的阶跃响应g(t)在指定时间范围的时域波形并能求出其数值解,和impulse()函数一样也有四种调用格式。
step(b,a);
则绘出系统的阶跃响应波形,如图所示。
(2)step(b,a,t):
运行命令step(b,a,6),绘出在0~6秒范围内阶跃响应的时域波形
(3)step(b,a,t1:
运行命令step(b,a,1:
3),绘出1~3秒内,每隔0.1秒取样的阶跃响应的时域波形
(4)y=step(b,a,t1:
运行命令y=step(b,a,0:
8连续时间系统对正弦信号、实指数信号的零状态响应的仿真波形
MATLAB中的函数lsim()能对微分方程描述的LTI连续时间系统的响应进行仿真。
该函数能绘制连续时间系统在指定的任意时间范围内系统响应的时域波形图,还能求出连续时间系统在指定的任意时间范围内系统响应的数值解,函数lsim()的调用格式如下:
lsim(b,a,x,t)
在该调用格式中,a和b是由描述系统的微分方程系统决定的表示该系统的两个行向量。
x和t则是表示输入信号的行向量,其中t为表示输入信号时间范围的向量,x则是输入信号在向量t定义的时间点上的抽样值。
该调用格式将绘出向量b和a所定义的连续系统在输入量为向量x和t所定义的信号时,系统的零状态响应的时域仿真波形,且时间范围与输入信号相同。
8.1正弦信号的零状态响应
MATLAB命令如下:
a=[1,2,1];
b=[1,2];
p=0.5;
x=sin(3*pi*t);
lsim(b,a,x,t);
holdon;
p=1.0;
8;
p=0.01;
holdoff;
8.2实指数信号的零状态响应
a=[1,3,1];
b=[1,3];
x=exp(-2*t);
p=0.2;
上图中蓝线、绿线、红线分别代表p=0.5、p=0.2、p=0.01。
显然可以看出,函数lsim()对系统响应进行仿真的效果取决于向量t的时间间隔的密集程度。
上图绘出了上述系统在不同抽样时间间隔时函数lsim()仿真的情况,可见抽样时间间隔越小仿真效果越好。
9小结
做此次课程设计之前,我对MATLAB软件还处于一种较为模糊的状态,虽然上学期的信号与系统课配有MATLAB实验,而且还选修了数学建模课程,经过学习,对MATLAB只是有了一个大概的了解,熟悉了一些简单操作。
通过在学校的电子资源期刊网上找了一些论文资料,借阅图书,一点一滴自学,以及和同学不断的交流,最后完成了这次课程设计。
对于信号与系统的一些基本信号的MATLAB实现和基本变换有了清楚认识。
在课程设计的过程中,我学到很多东西。
比如一些常见信号的MATLAB里的基本函数的调用,对于绘图指令的调用,及subplot,plot,ezplot等指令的差别,通过在实践过程中,调用不同的指令来实现,让自己更加清晰地了解了MATLAB强大功能。
另外,对于求解积分,微分等常用计算,MATLAB还提供了简便函数,如diff,int等等。
在课程设计中,不可避免的遇到了很多问题,比如,刚开始拿到题目的时候,觉得思路很混乱,不知道从何下手,但在查找资料的过程中,渐渐清晰了大概的流程。
另外,编写代码方面,出现了很多问题,因为之前很少使用MATLAB软件,对于它的语言和它强大的函数功能,还比较陌生。
因此,不管什么,都是越用越熟悉,如果这东西对我有用,我应该多去实践,多练习,这样才能在以后的工作学习中手到擒来。
总的来说,这次课程设计让我对MATLAB有了更深刻的了解,对信号系统中常见信号的MATLAB实现有了大致的了解,提高了理论用于实践的能力,掌握了更多专业相关的使用知识与技能。
同时,也暴露了我很多的不足,在以后的学习中,将进一步发扬有点,克服缺点。