1、实 验一 连续时间信号的 Matlab 表示与计算一、实验目的 1、初步学习 MATLAB 语言,熟悉 MATLAB 软件的基本使用。2、掌握用 MATLAB 描述连续时间信号方法,能够编写 MATLAB 程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。二、实验原理 连续信号是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干个不连续点之外,信号都有确定的值与之对应。严格来说,MATLAB 并不能处理连续信号,而是用等时间间隔点的样值来近似表示连续信号。当取样时间间隔足够小时,这些离散的样值就能较好地近似连续信号。在 MATLAB 可视化绘图中,对于以 t
2、为自变量的连续信号,在绘图时统一用 plot 函数;而对 n 为自变量的离散序列,在绘图时统一用 stem 函数。 对于连续时间信号 f(t) ,可用 f、t 两个行向量来表示。例:t=-10:1.5:10;f=sin(t)./ t ;可以产生 t= -1010,间隔 1.5 的序列以及 的值。tf)sin(用命令:plot(t,f)可得如下图形,显然显示效果较差,这是因为 t 的间隔过大,只要改变为:t=-10:0.5:10;可得图 1.2。图 1.1 图 1.21. 信号的时域表示方法MATLAB 提供了大量用以生成基本信号的函数,比如最常用的指数信号、正弦信号等就是 MATLAB 的内部
3、函数,即不需要安装任何工具箱就可以调用的函数。1.1 单位阶跃信号 u(t)function y=heaviside(t) %阶跃信号y = (t=0); % y = 1 for t 0, else y = 01.2 单位冲激信号(t)function chongji(t1,t2,t0) %冲激信号(t- t 0),t 1 和 t2 分为起始时间和终止时间dt=0.01;t=t1:dt:t2;n=length(t);x=zeros(1,n);x(1,(t0-t1)/dt+1)=1/dt;stairs(t,x); %以阶梯方式绘画axis(t1,t2,0,1.1/dt)或 function y
4、= delta(t)dt = 0.01;y = (u(t)-u(t-dt)/dt;1.3 指数信号指数信号 在 MATLAB 中可以用 exp 函数表示,其调用形式为:atAey=A*exp(a*t)例如图 1-3 所示指数衰减信号的 MATLAB 源程序如下(取 A=1,a=-0.4):%program7_1 Decaying expponential signalA=1;a=-0.4;t=0:0.01:10;ft=A*exp(a*t);plot(t,ft);grid on;1.4正弦信号正弦信号 和 分别用MATLAB的内部函数cos和sin表示,其)cos(tA)sin(tAo调用形式为
5、:)*(phitosin例如图1-4所示MATLAB源程序如下(取A=1, , ):206/%program7_2 Sinusoidal signalA=1;w0=2*pi;phi=pi/6;t=0:0.01:8;ft=A*sin(w0*t+phi);plot(t,ft);grid on;图 1-3 单边指数衰减信号 图 1-4 正弦信号除了内部函数外,在信号处理工具箱(Signal Processing Toolbox)中还提供了诸如抽样函数、矩形波、三角波、周期性矩形波和周期性三角波等在信号处理中常用的信号。1.5.抽样函数抽样函数 Sa(t)在 MATLAB 中用 sinc 表示,其定义
6、为:)/(sin)(ittc其调用形式为:)(ity例如图 1-5 所示抽样函数的 MATLAB 源程序如下:%program7_3 Sample functiont=-3*pi:pi/100:3*pi;ft=sinc(t/pi);plot(t,ft);grid on;1.6 矩形脉冲信号矩形脉冲信号在 MATLAB 中用 rectpuls 函数来表示,其调用形式为:),(widthrectpulsy用以产生一个幅值为 1、宽度为 width、相对于 t=0 点左右对称的矩形波信号。该函数的横坐标范围由向量 t 决定,是以 t=0 为中心向左右各展开 width/2 的范围。width 的默认
7、值为1。例如图 1-6 所示以 t=2T(即 )为对称中心的矩形脉冲信号的 MATLAB 源02Tt程序如下(取 T=1):%program7-4 Rectangular pulse signalt=0:0.001:4;T=1;ft=rectpuls(t-2*T,2*T);plot(t,ft);grid on;axis(0 4 -0.5 1.5);图 1-5 抽样函数 图 1-6 矩形波信号周期性矩形波(方波)信号在 MATLAB 中用 square 函数来表示,其调用形式为:y=square(t,DUTY)用以产生一个周期为 、幅值为 的周期性方波信号,其中的 DUTY 参数表示占空比21(
8、dutycycle) ,即在信号的一个周期中正值所占的百分比。例如图 1-7 所示频率为 30Hz 的周期性方波信号的 MATLAB 源程序如下:%program1_7 Periodic rectangular pulse signalt=-0.0625:0.0001:0.0625;y=square(2*pi*30*t,75);%DUTY=75(percent)plot(t,y);axis(-0.0625 0.0625 -1.5 1.5);grid on;1.7 三角波脉冲信号三角波脉冲信号在 MATLAB 中用 tripuls 函数来表示,其调用形式为:),(skewidthtripuly用
9、以产生一个最大幅度为 1、宽度为 width、斜度为 skew 的三角波信号。该函数的很坐标范围由向量 t 决定,是以 t=0 为中心向左右各展开 width/2 的范围。斜度 是一个介于-skew1 和 1 之间的值,它表示最大幅度 1 出现所对应的横坐标位置,比如 表示一个左0右对称的三角波信号,最大幅度 1 出现在 处;一般地,最大幅度 1 出现在0t的横坐标位置。例如图 1-8 所示三角的 MATLAB 源程序如下:skewidtht)2/(%program7_6 Triangular pulse signalt=-3:0.001:3;ft=tripuls(t,4,0.5);plot(
10、t,ft);grid on;axis(-3 3 -0.5 1.5);图 1-7 周期性方波信号 图 1-8 三角波信号周期性方波信号在 MATLAB 中用 sawtooth 函数来表示,其调用形式为:),(WIDTHtsawohy用以产生一个周期为 、最大幅度为 1、最小幅度为-1 的周期性方波信号(锯齿波)信号,2其中的 参数表示最大幅度出现的位置:在一个周期内,信号从 到WIDTH 0t时函数值是从-1 到 1 线性增加的,而从 到 时函数值又是从 2I1 到-1 线性递减的;在其他周期内依次类推。例如图 1-9 所示的周期性三角波信号的MATLAB 源程序如下:%program1-9 P
11、eriodic triangular pulse signalt=-5*pi:pi/10:5*pi;x=sawtooth(t,0.5);plot(t,x);axis(-16 16 -1.5 1.5);grid on; 1.8 一般周期性脉冲信号一般周期性脉冲信号在 MATLAB 中用 pulstran 函数来表示,其调用形式为:),(funcdtpulsray该函数基于一个名为 func 的连续函数并以之为一个周期,从而产生一串周期性的连续函数(func 函数可自定义) 。该 pulstran 函数的 横坐标范围由向量 t 指定,而向量 d 用于指定周期性的偏移量(即各个周期的中心点) ,这样
12、这个 func 函数会被计算 length(d)次,并且整个 pulstran 函数的返回值实际上就相当于: .)2(_)1(dtfuncdtfuncy从而实现一个周期性脉冲信号的产生。Pulstran 函数的更一般的调用形式为:.),1,(pftplsra其中的 p1,p2,.为需要传送给 func 函数的额外输入参数值(除时间变量 t 之外) ,如上述的Rectpuls 函数需要 width 这个额外参数,tripuls 函数需要 width 和 skew 这两个额外参数,即整个 pulstran 函数的返回值实际上相当于 :.,)21),(,.)1),( pdtfuncpdtfuncy例
13、如图 1-10 所示周期性矩形脉冲信号和周期性三角波脉冲信号的 MATLAB 源程序如下:%program7_8 Periodic pulse generatorT=0:1/1E3:1;% 1kHz sample freq for 1 secD=0:1/3:1;% 3Hz repetition freqY=pulstran(T,D,rectpuls,0.1);figure(1);plot(T,Y);grid on;axis(0,1,-0.1,1.1);T=0:1/1E3:1; % 1kHz sample freq for 1secD=0:1/3:1;% 3Hz repetition freqY
14、=pulstran(T,D,tripuls,0.1,-1);figure(2);plot(T,Y);grid on;axis(0,1,-0.1,1.);图 1-10 周期性矩形脉冲信号和三角波脉冲信号2.连续信号的相加、相乘、时移、反转和尺度变换等基本运算(1)两个连续信号的相加在 MATLAB 中要实现两个连续信号 f1(t)、f 2(t)的相加,可用如下语句:x=symadd(f1,f2) 或 x=f1+f2 % x(t)= f1(t)+f2(t)(2)两个连续信号的相乘在 MATLAB 中要实现两个连续信号 f1(t)、f 2(t)的相乘,可用如下语句:x=symmul(f1,f2) 或
15、 x=f1*f2 % x(t)= f1(t) f2(t)(3)连续信号的平移要实现连续信号 f(t)向右平移 t0,MATLAB 语句格式为:x=subs(f,t,t-t0) % x(t)= f(t-t0)(4)连续信号的反转对一个信号 x(t)的反褶运算在数学上表示为: y (t)=x(-t) 使用 MATLAB 内部函数 fliplr()来实现信号的反褶运算。其用法如下 :y = fliplr(x) :其中x 为原信号 x(t),而 y 则为 x 的时域反褶。而翻转后的信号的坐标则可由-fliplr(t)得到。(5)连续信号的尺度变换要实现连续信号 f(t)的尺度变换,MATLAB语句格式
16、为:x=subs(f,t,a*t) % x(t)= f(at)要实现连续信号 f(t)的平移、尺度变换的综合运算,MATLAB 语句格式为:x=subs(f,t,a*t-b) % x(t)= f(at-b)例 1:信号 f1(t)、 f2(t)如图 1-11(a)、(b)所示,编制一个 m 文件,绘出 f1(t)=e-0.5tu(t)-(t-2)、 f2(t)=sin(5t)u(t)-u(t-2)、f 1(-2t+1)、f 1(t) f2(t-1)的波形。 图 1-12解:实现所要求运算的 m 文件如下,syms tf1=sym(exp(-0.5*t)*(heaviside(t)-heavis
17、ide(t-2);f2=sym(sin(5*pi*t)*(heaviside(t)-heaviside(t-2);subplot(2,2,1),ezplot(f1);title(f1);subplot(2,2,2), ezplot(f2);title(f2);f3=subs(f1,t,-2*t+1); subplot(2,2,3);ezplot(f3);title(f3); f4=f1*subs(f2,t,t-1);subplot(2,2,4);ezplot(f4);title(f4); 运算结果如图 1-11 所示。其中,图 1-11(a)、(b)、(c)、(d) 分别为 f1(t)、f 2
18、(t) 、f 1(-t+1) 、f 1(t) f2(t-1)的波形。例:对图 1-12 所示的三角波 ,利用 MATLAB 画出 和 的波形的程序如)(tf )2(tf)tf下:图 1-11%program7_13 Changed triangular pulse signalt=-3:0.001:3;ft1=tripuls(2*t,4,0.5);subplot(2,1,1);plot(t,ft1);title(f(2t);grid on;ft2=tripuls(2-2*t),4,0.5);subplot(2,1,2);plot(t,ft2);title(f(2-2t);grid on;程序运
19、行结果如图 1-12 所示。(6)连续信号的微分与积分连续信号的微分可以用上述的 diff 函数;来近似计算。例如,y=(sin( ) )2x=2xcos( )可由下列 MATLAB 语句来近似实现:2xh=0.001;x=0:h:pi;y=diff(sin(x.2))/h;连续信号的定积分可由 MATLAB 中的 quad 函数(或 quad8 函数)来实现,其调用形式为:犬的(function_name,a,b)其中 function_那么为被积函数名(.m 文件名) ,a 和 b 为指定的积分区间。例如,对于图 1-8 所示的三角波 f(t ) ,要求利用 MATLAB 画出 和dtf)
20、(的波形。为了便于利用 quad 函数来计算信号的积分,将图 6 所示的三角波写dtf)(成 MATLAB 的函数,函数名为 functri (相应的.m 文件名为 functri.m) ,程序如下:function yt=functri(t)yt=tripuls(t,4,0,5) ;然后利用 diff 和 quad 函数,并调用自编函数 functri 即可实现三角波信号 f(t)的微分和积分,源程序如下:%program7_14 Differentiation of triangular signalh=0.001; t=-3:h:3;y1=diff(functri(t)*1/h;figu
21、re(1); plot(t(1:length(t)-1),y1); title(df(t)/dt); grid on;% program7_14 Integration of triangular signalt=-3:0.1:3;for x=1:length(t)y2(x)=quad(functri,-3,t(x);endfigure(2); plot(t,y2); axis(-3 3 -0.5 2.5); title(Integral of f(t); grid on;三. 实验内容与步骤 1、用MATLAB画出下列信号的波形。(a) 单位阶跃信号 u(t) (b) 单位冲激信号(t)2、用基本信号画出图1-14中的信号。3 用MATALB画出图1-15所示信号。其中,K=10,A=5。4 试用 Matlab 绘制出如下连续时间信号的时域波形,并观察信号是否为周期信号。若是周期信号,周期是多少?(a) )2sin()i(2)sin(3)( ttttf (b) 54co(c) itttf四. 实验报告要求 1实验目的。2实验内容与步骤。MATLAB 语言编程完成序列的表示及运算,并附上仿真后波形。3简要回答思考题。4记录调试运行情况及所遇问题的解决方法。)(1tfK0t2t)(2tf013A图 1-15 t)(1tf0246t)(2tf0463t)(3tf0246图 1-14