在MATLAB中通常有两种方法表示信号。一种是用向量表示,另一种时用符号运算的方法来表示。用MATLAB语句表示出信号后,就可以利用MATLAB的绘图命令绘制出直观的信号波形。
一、连续时间信号的表示
连续时间信号是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的函数值与之对应。**从严格意义上来讲,Matlab并不能处理连续信号,在Matlab中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。**下面,学习连续时间信号用向量或符号运算来表示的两种方法。
对于连续时间信号f(t)可以用两个行向量表示。第一个行向量是用来定义自变量t的,t=t1:d:t2其中t1为初始值,d为步长,t2为终止值。第二个行向量f为连续信号f(t)在向量t所定义的样值。下面的代码简单演示了sin(t)的产生:
1 2 3 4
| t = -10:0.01:10; f = sin(t); plot(t,f);
|
二、离散时间信号的表示
离散时间信号用f(k)表示,其中变量k为整数,代表离散的采样时间点。f(k)可以表示为:f(k)=...f(−2),f(−1),f(0),f(1),f(2)...,这种序列表示应该还需要指出k=0的位置。在MATLAB中,用一个向量f即可表示一个有限长度的序列。但是,这样的向量并没有包含其对应的序号信息,所以,要完整地表示一个离散信号仍需要用两个向量。如序列:f(k)=1,2,−1,3,2,4,−1,我们指定值3为k=0的样值。用MATLAB表示离散序列并将其可视化,需要注意一下几点:
- 与连续时间信号不同,离散时间信号无法用运算符号来表示;
- 由于在MATLAB中,矩阵的元素个数是有限的,因此,MATLAB无法表示无限序列;
- 在绘制离散信号波形时,要使用专门绘制离散数据的stem指令,而不是plot指令。
下面的代码演示了离散序列x2(n)=RN(n),N=5:
1 2 3 4
| k = 0:4 x = [1 1 1 1 1] stem(k, x)
|
三、MATLAB绘图
多窗口绘制e−0.5t、sin(2πt)、e−0.5tsin(2πt)三个函数的曲线,其中0<t<2π,并标注图形名称。再把这三个函数在一个图形窗口分子图绘制,同时加图形名称,横、纵轴坐标名称,网格线。
下面的代码延时了多窗口绘制三个函数的曲线:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| t = 0:pi/100:2*pi; y1 = exp(-0.5*t); y2 = sin(2*pi*t); y3 = y1 .* y2;
figure(1); plot(t/pi, y1); title("exp(-0.5*t)");
figure(2); plot(t/pi, y2); title("sin(2*pi*t)");
figure(3); plot(t/pi, y3); title("e^{-0.5t}sin(2{\pi}t)");
|
下面的代码演示了一个图形窗口分子图绘制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| t = 0:pi/100:2*pi; y1 = exp(-0.5*t); y2 = sin(2*pi*t); y3 = y1 .* y2;
subplot(3,1,1); plot(t/pi, y1); title("指数函数"); xlabel("时间"); ylabel("exp(-0.5*t)")
subplot(3,1,2); plot(t/pi, y2); title("正弦函数"); xlabel("时间") ylabel("sin(2{\pi}t)")
subplot(3,1,3); plot(t/pi, y3); title("衰减震荡"); xlabel("时间"); ylabel("e^{-0.5t}sin(2{\pi}t)") grid on;
|
四、示例
4.1 连续时间信号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
t1 = -10:0.01:10; t2 = -7:0.01:7; t3 = 0:pi/100:10*pi;
y1 = sin(t1) ./ t1; y2 = rectpuls(t2,2); y3 = 5*exp(0.5*t3); y4 = sin(2*pi*t3); y5 = y3 .* y4;
subplot(3,1,1); plot(t1, y1); title("Sa函数"); xlabel("时间"); ylabel("sin(t1)/t"); grid on;
subplot(3,1,2); plot(t2, y2, "r"); title("门函数") xlabel("时间") ylabel("g(t)"); grid on;
subplot(3,1,3); plot(t3/pi, y5); title("衰减函数") xlabel("时间"); ylabel("5*exp(0.5*t)*sin(2*pi*t)") grid on;
|
4.2 离散信号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
t1 = -5:5; y1 = t1 == 0; stem(t1, y1, "filled");
t2 = -4:0.5:4; t21 = -1; t22 = 1; u1 = stepfun(t2, t21); u2 = stepfun(t2, t22); y2 = u1- u2;
t3 = 0:60; y31 = 1.1.^t3; y32 = sin(0.05*pi*t3); y3 = y31.*y32;
subplot(3, 1, 1); stem(t1, y1, "dy"); axis([-5, 5, 0, 2]); grid on; xlabel("时间"); ylabel("y1"); title('离散信号(1)');
subplot(3,1,2); stem(t2,y2,'sr'); axis([-4,4,-2,2]); grid on; xlabel('时间'); ylabel('y2'); title('离散信号(2)');
subplot(3,1,3); stem(t3/pi,y3,'ob'); grid on; xlabel('时间'); ylabel('y3'); title('离散信号(3)');
|