实验内容

题目一

系统输入为𝑥(𝑡)=𝑒𝑡cos(3𝑡)(𝑢(𝑡)𝑢(𝑡2))𝑥(𝑡) = 𝑒 ^{−𝑡} cos(3𝑡) (𝑢(𝑡) − 𝑢(𝑡 − 2)),其冲激响应ℎ(𝑡) = 𝑡1𝑡 ^{−1} (𝑢(𝑡 − 1) − 𝑢(𝑡 − 3)),计算其输出𝑦(𝑡) = 𝑥(𝑡) ∗ℎ(𝑡) (可调用函数 conv)。在多张子图上绘制𝑥(𝑡)、ℎ(𝑡)及𝑦(𝑡)的图像, 绘图区间均为[-1, 6];要求有坐标轴标注(xlabel,ylabel)以及图题 (title)

踩坑点

最开始十分直接的写完x(t)h(t)求卷积就画图了,直接报错,经一番排查发现需要注意两点:

  • 虽然ℎ(𝑡) = 𝑡1𝑡 ^{−1} (𝑢(𝑡 − 1) − 𝑢(𝑡 − 3)),但若直接写为h=(Heaviside(t-1)-Heaviside(t-3))./t;MatLab计算过程1中会出现NaN,这是由于在t=0t=0处,h(t)h(t)出现了0/00/0不定型,但实际可以用洛必达法则求得h(0)=0h(0)=0,故将分母加一个小量修正为h=(Heaviside(t-1)-Heaviside(t-3))./(t+eps)

  • 求卷积后坐标范围会发生变化,求得的y(t)y(t)tt本身的坐标范围并不一一对应,实际上假设对x(k)x(k)h(k)h(k)做卷积,x(k)x(k)的区间范围为n1:n2n_1:n_2,h(k)h(k)的区间范围为m1:m2m_1:m_2,模拟卷积步骤 翻转 移位 相乘 累加,如图h(k)h(-k)左移的极限长度是m1n1-m_1-n_1,故y(k)=x(k)h(k)y(k)=x(k)∗h(k)的左侧起点为m1+n1m_1+n_1,同理得右侧终点为m2+n2m_2+n_2,整个序列长为m2+n2m1n1+1=len(x(k))+len(h(k))1m_2+n_2-m_1-n_1+1=len(x(k))+len(h(k))-1.

    在本题中y(t)y(t)的坐标范围就是[2,12][-2,12],需要在新坐标上作图再截取[1,6][-1,6]范围,否则会出错.

    7da04e6eafe83d6597e84a018b6735b

  • 调用conv计算卷积时需要*dt,因为conv(u,v)返回向量u,v的卷积,而连续信号的卷积定义为u(k)v(k)=+u(t)v(kt)dtu(k)\ast v(k)=\int_{-\infty}^{+\infty}u(t)v(k-t)dt,需要乘以微量dtdt

代码

clear all;
ts=-1;te=6;dt=0.01;
t=ts:dt:te;
x=exp(-1*t).*cos(3*t).*(Heaviside(t)-Heaviside(t-2));
h=(Heaviside(t-1)-Heaviside(t-3))./(t+eps);

y=conv(x,h)*dt;
%disp(y);
ty=-2:dt:12;
subplot(3,1,1);
plot(t,x);grid;
xlabel('t');ylabel('x(t)');title('输入信号x(t)的波形');
subplot(3,1,2);
plot(t, h);grid;
xlabel('t');ylabel('h(t)');title('冲激响应h(t)的波形');
subplot(3,1,3);
plot(ty,y);grid;axis([-1,6,-0.5,0.5])
xlabel('t');ylabel('y(t)');title('系统输出y(t)的波形');

仿真图1

题目二

对离散时间线性时不变系统 𝑦[𝑛] = 𝑥[𝑛] ∗ h[𝑛] , 有 h[𝑛] = 2 −𝑛(𝑢[𝑛] − 𝑢[𝑛 − 6]),当该系统的输入𝑥[𝑛] = 𝑒 −0.05𝑛 (𝑢[𝑛 + 8] − 𝑢[𝑛 − 4])时,计算该系统的输出𝑦[𝑛];要求在多张子图上绘制 𝑥[𝑛]、h[𝑛]及𝑦[𝑛]的图像(使用 subplot),绘图区间均为[-10, 10], 要求有坐标轴标注及图题。提示:使用 stem 函数。

整体做法与题一相似,对应地换为离散信号即可。

代码

clear all;
ns=-10;ne=10;dn=1;
n=ns:dn:ne;
x=exp(-0.05*n).*(jyxl(n+8)-jyxl(n-4));
h=(jyxl(n)-jyxl(n-6))./(2.^n);

y=conv(x,h);
%disp(y);
ny=-20:dn:20;
subplot(3,1,1);
stem(n,x);grid;
xlabel('n');ylabel('x(n)');title('输入信号x(n)');
subplot(3,1,2);
stem(n, h);grid;
xlabel('n');ylabel('h(n)');title('冲激响应h(n)');
subplot(3,1,3);
stem(ny,y);grid;axis([-10,10,-5,5])
xlabel('n');ylabel('y(n)');title('系统输出y(n)');

仿真图

2

题目三

线性时不变系统的微分方程为:𝑦’(𝑡) + 2𝑦(𝑡) = 𝑥(𝑡),求其冲激以及阶跃响应,并在同一张图上绘图(使用 hold on),横坐标区间为 [0, 5],要求有坐标轴标注、图题以及图例(legend)。提示:可分 别使用 impulse 与 step 函数求解

分别调用impulse()step()函数求解冲激响应和阶跃响应。

代码

clear all; 
ts=0;te=5;dt=0.01;
num=[1];
den=[1 2];
sys=tf(num,den);
t=ts:dt:te;
y=impulse(sys,t); %求解冲激响应的函数
plot(t,y,'r');grid;
xlabel('time(sec)');
hold on;
step(num,den,'b');grid;
legend('冲激响应', '阶跃响应')
title('系统的冲激及阶跃响应')
axis([0,5,0,1])

仿真图

3

题目四

因 果 线 性 时 不 变 系 统 的 微 分 方 程 为 𝑦’’(𝑡) + 𝑦’(𝑡) + 2𝑦(𝑡) = 𝑥’(𝑡) + 2𝑥(𝑡),输入为𝑥(𝑡) = (𝑒 −𝑡 + 𝑒 −2𝑡 )𝑢(𝑡)。请分别使用冲激响应卷积法以及调用 lism 函数的方法求解并画出系统对𝑥(𝑡)的零状态响应(在多张子图上绘制);要求有坐标轴标注以及图题。横坐 标区间自定,使结果清晰即可。

零输入响应——无输入下的系统响应,即某一状态下的响应

零状态响应——认为没有初始状态,系统对于外界输入的响应,求解即解微分方程

系统的零状态响应=激励与系统冲激响应的卷积,r(t)=x(t)h(t)r(t)=x(t)\ast h(t),使用residue()函数求得冲激h(t)h(t)后再做卷积即可。

代码

clear all; 
ts=0;te=15;dt=0.01;
num=[0 1 2];
den=[1 1 2];
sys=tf(num,den); % 调用 LTI 系统模型的函数
t=ts:dt:te;
f=(exp(-1*t )+exp(-2*t)).*Heaviside(t);
y=lsim(sys,f,t); % 求零初始条件微分方程数值解
subplot(2,1,1);
plot(t,y);
xlabel('t(sec)');ylabel('y(t)');grid;title('lism函数法求零状态响应');
subplot(2,1,2);

%冲激响应卷积法
[r,p,k]=residue(num,den); %分式的留数?极点、直项? 大概就是化简分式的意思
h=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t);
g=conv(f,h)*dt;
x=0:dt:30;
plot(x,g);grid;axis([0,15,-0.5,1.5]);
xlabel('x(sec)');ylabel('g(x)');title('冲激响应卷积法求零状态响应');

仿真图

4

思考题

连续、离散信号卷积的定义?卷积的作用是?

连续信号卷积定义为

(f1f2)(t):=f1(t)f2(t):=+f1(τ)f2(tτ)dτ:=+f1(tτ)f2(τ)dτ\left(f_1 * f_2\right)(t):=f_1(t) * f_2(t):=\int_{-\infty}^{+\infty} f_1(\tau) f_2(t-\tau) d \tau:=\int_{-\infty}^{+\infty} f_1(t-\tau) f_2(\tau) d \tau

离散信号卷积定义为

(fg)[n]=m=f[m]g[nm]=m=f[nm]g[m](f * g)[n]=\sum_{m=-\infty}^{\infty} f[m] g[n-m]=\sum_{m=-\infty}^{\infty} f[n-m] g[m]

卷积的实质是对一个函数(如单位响应)在另一个函数(如输入信号)上的加权叠加,对于线性时不变系统,将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应加权叠加,就直接得到了输出信号。所以卷积的一个作用就是将一个函数拆分成一系列冲激,便于做其他计算与应用。

conv 函数输出的数组长度与输入长度有何关系?如何将输出结果与时间向量相对应?

设输入为x(k)x(k)h(k)h(k),具体分析见题目一的过程中,输出长度为len(x(k))+len(h(k))1len(x(k))+len(h(k))-1.输出结果的区域为[m1+n1,m2+n2][m_1+n_1,m_2+n_2],以此区域的时间向量与输出结果一一对应

收获与感想

通过本次实验,我学会了

  • 连续时间信号卷积及其 MATLAB 实现方法

    conv(u,v)u*v,求解连续信号卷积时需*dt

  • 连续系统的冲激响应、阶跃响应及其 MATLAB 实现方法

    求解冲激响应——y = impulse(sys, t)

    求解阶跃响应——y = step(sys, t)

  • 利用 MATLAB 求 LTI 系统响应的方法

    • 利用lsin()函数求解零初始条件下微分方程数值解
    • 使用冲激响应卷积法,先求冲激响应,系统响应=冲激响应卷积输入信号
  • 进一步掌握了MATLAB的画图方法,增加图题、图示等

并且进一步加深了对卷积和一些课上遇到的概念如零状态响应、零输入响应的理解,收获良多。