用MATLAB实现常用的连续时间信号及其时域运算
信息与通信工程学院通信133班卢承慧
一.引言
1.要求:
1.1用MATLAB语言产生连续时间信号
1.2对连续时间信号进行时域运算
2.任务:
①绘制用于产生以下信号的通用程序,要求对于任意给定的参数都能实现所要求的信号。调试并运行这些程序,具体产生由指导教师制定的信号并绘制信号波形。
t );
a. f(t)=δ(t-
t )。
b. f (t) = Au(t-
②已知信号波形如图7.6所示,使用MATLAB语言求出下列信号的表达式并绘制出各信号波形。
a.f(-t);
b.f(t-2);
c.f(1-2t)。
图7.6任务②中的f(t)
3.思考题
编制一通用程序用于产生信号
)()cos()(0t t u t Ae t f at -=-ω,要求
对于任意给定的参数都能实现所要求的信号。
二.基本原理
1.1连续时间信号
如果在所讨论的时间间隔内,除若干个不连续点之外,对于任意时间值都可以给出确定的函数值,此信号就称为连续信号。
从严格意义上来讲,MATLAB 不能处理连续时间信号。在MATLAB 中,使用连续时间信号在等时间间隔点的样值来近似表示连续时间信号的。当取样时间间隔足够小时,这些离散的样值就能较好的近似出连续时间信号。由于在MATLAB 中,矩阵的元素个数是有限的,因此MATLAB 无法表示无限序列。
MATLAB 的绘图命令有很多种,其中比较常用的绘制连续时间信号的绘图命令有“plot ”,“stairs ”,“ezplot ”等。“plot ”适用于绘制平滑的曲线,而“stairs ”适合于绘制具有阶跃形式的图形,“ezplot ”只能用于符号函数的绘图。
1.2单位阶跃信号
单位阶跃信号的波形图如图1所示,通常以符号u (t )表示
?
??><=)0( 1)0( 0)(t t t u
在跳变点t=0处,函数未定义,或在t=0处规定函数值u (0)=
2
1
。
图1
用MATLAB 实现单位阶跃信号
%t1:起始时刻;t2:终止时刻;t0:跳变时刻
function u(t1,t0,t2)
t=t1:0.01:t2; %步长值越小,图形越精确 n=length(t); tt=t0:0.01:t2; n1=length(tt);
x=[zeros(1,n-n1),ones(1,n1)]; %产生单位阶跃信号 stairs(t,x),grid on title('单位阶跃信号')
axis([t1 t2 -0.2 1.1]) %为方便波形顶部避开图 框,改变图框坐标
1.3单位冲激信号
单位冲激信号是持续时间无穷小、瞬间幅度无穷大、涵盖面积恒1的理想信号。记为)(t δ,其表达式为
??
???≠==∞
-∞
=?)0t ( 0)(1)()(当t dt t t f δδ
严格说来,MATLAB 是不能表示单位冲击信号的,但我们可以用时间宽度为dt 、高度为1/dt 的矩形脉冲来近似地表示冲激信号。当dt 趋近零时,就较好地近似出冲激信号的实际波形。
用MATLAB 实现单位冲激信号:
clear
t1=input('输入起始时刻t1='); t0=input('输入跳变时刻t0='); t2=input('输入终止时刻t2='); t=t1:0.001:t2; n=length(t); tt=t1:0.001:t0;
n1=length(tt); x=zeros(1,n); x(n1)=1/0.001; plot(t,x),grid on title('单位冲激信号') axis([t1 t2 -0.2 1.1])
1.4连续时间信号的时域运算
如前所述,MATLAB 可以用向量或符号两种方法来表示连续信号,而只能用向量表示离散信号,单用符号运算的方法进行连续信号的时域运算较为方便。 用MATLAB 的符号运算命令来表示连续信号的时域运算,然后用“ezplot ”命令绘制出其结果波形图。在下面的命令中,f ,f1,f2都是用符号表达式表达的连续信号,s 为运算结果信号的符号表达式,t0和a 均为常数。
1.4.1 相加
)()(21t f t f ±
1.4.2 相乘
)()(21t f t f ?
1.4.3 平移
???<>+→,右移,左移
00)()(0
00t t t t f t f
若f (t )表达式的自变量t 更换为(t+0t )(0t 为正或负实数),则f (t+0t )相当于f (t )波形在t 轴上的整体移动,当0t >0时,波形左移,当0t <0时,波形右移。
1.4.4 反褶
)()(t f t f -→
信号反褶表示将f (t )的自变量t 更换为-t ,此时f (-t )的波形相当于将f (t )以t=0为轴反褶过来。 1.4.5 尺度
?
??<<>→扩展压缩
1,a 0 ,1)()(a at f t f
如果将信号f (t )的自变量t 乘以正实系数a ,则信号波形f (at )将是f (t )波形的压缩(a>1)或扩展(a<1)。
相加:s=f1+f2,ezplot(s) 相乘:s=f1*f2,ezplot(s)
平移:s=subs(f,t,t-t0) ,ezplot(s) 反褶:s=subs(f,t,-t) ,ezplot(s) 尺度:s=subs(f,t,a*t) ,ezplot(s)
三.实现方法
论述具体实现方法及编程思路,以及具体程序的编制。
1.任务①
a. f (t ) =δ(t-0t );
编程思路:建立一个单位冲激信号,对该信号进行平移运算。 代码如下:
clear
t1=input('输入起始时刻t1='); t0=input('输入跳变时刻t0='); t2=input('输入终止时刻t2='); t=t1:0.001:t2; n=length(t); tt=t1:0.001:t0; n1=length(tt); x=zeros(1,n); x(n1)=1/0.001; plot(t,x),grid on title('单位冲激信号') axis([t1 t2 -0.2 1.1])
b . f (t ) =Au(t-0t );
编程思路:建立一个单位阶跃信号,对该信号进行平移运算并乘以一个幅度
值。
代码如下:
function f=u(t)
f=(t>0);
clear
close all
A=input('输入幅度值A=');
t0=input('输入跳变值t0=');
syms t
f=sym('u(t)');
f1=A*f;
y=subs(f1,t,t-t0)
ezplot(y,[-3,3])
2.任务②:
编程思路:根据图7.6写出f(t)=2u(t)-u(t-1)-u(t-2),用符号运算命令来表示以下连续信号的时域运算,然后用“ezplot”命令绘制出其结果图。
a.f(-t);
b.f(t-2);
c.f(1-2t)。
代码如下:
function f=u(t)
f=(t>0);
syms t
f=sym('2*u(t)-u(t-1)-u(t-2)');
subplot(2,2,1),ezplot(f,[-3,3]),grid on ,title('f(t)')
y1=subs(f,t,-t);
subplot(2,2,2),ezplot(y1,[-3,3]),grid on ,title('f(-t)')
y2=subs(f,t,t-2);
subplot(2,2,3),ezplot(y2,[-3,3]),grid on ,title('f(t-2)')
y3=subs(f,t,1-2*t);
subplot(2,2,4),ezplot(y3,[-3,3]),grid on ,title('f(1-2t)')
3.思考题
编程思路:建立一个幅值为A 的指数信号at Ae -,
一个余弦信号)cos(t ω和一个平移值为0t 的单位阶跃信号)(0t t u -,然后对它们进行相乘运算。
代码如下:
四、结果验证
任务①:
a .f (t ) =δ(t-0t );
运行结果:
图1
图2
t );
b.f(t) =Au(t-
运行结果:
图3
图4 任务②:
a.f(-t);
b.f(t-2);
c.f(1-2t)。
图5
图6 3.思考题
图7
图8
参考文献
[1] 郑君里, 应启珩, 杨为理. 信号与系统引论. 北京: 高等教育出版社, 2009.
[2] 李敏,陈兴文.信号分析与处理的软硬件实现.大连:海事大学出版社,2014.