一、实验目的
1、掌握连续时间信号的卷积 运算以及其对应的 MATLAB 实现方法;
2、掌握连续系统的冲激响应 、阶跃响应 以及其对应的 MATLAB 实现方法;
3、掌握利用 MATLAB 求 LTI (Linear Time-Invariant, 线性时不变)系统 响应的方法;
4、掌握利用 MATLAB 求函数卷积 和解微分方程。
二、实验内容
1、
MATLAB代码:
matlab
>> clear all;
>> t = -2 : 0.01 : 6;
>> x = exp(-t) .* (t >= 0 & t < 2);
>> h = t .* (t >= 0 & t < 3);
>> y = conv(x, h) * 0.01;
>> figure
>> plot(t, x);
>> hold on;
>> plot(t, h);
>> hold on;
>> plot(t, y(201: 1001));
>> xlabel('Time(sec)');
>> ylabel('Amplitude');
>> title('Ex.1');
>> legend('x(t)', 'h(t)', 'y(t)', 'Location', 'Best');
>> axis([-2 6 -0.5 3.5]);
生成的信号波形图:
2、
MATLAB代码:
matlab
>> clear all;
>> n = -10 : 10;
>> figure
>> subplot(3, 1, 1);
>> x = (n >= 0 & n < 4);
>> stem(n, x);
>> grid on
>> title('x[n]', 'Fontsize', 14);
>> xlabel('n', 'FontSize', 11);
>> ylabel('x[n]', 'FontSize', 11);
>> subplot(3, 1, 2);
>> h = 2 .^ (-n) .* (n >= 0 & n < 6);
>> stem(n, h);
>> grid on
>> title('h[n]', 'Fontsize', 14);
>> xlabel('n', 'FontSize', 11);
>> ylabel('h[n]', 'FontSize', 11);
>> subplot(3, 1, 3);
>> y = conv(x, h);
>> n2 = -20 : 20;
>> stem(n2, y);
>> axis([-10 10 0 2]);
>> title('y[n]', 'Fontsize', 14);
>> xlabel('n', 'FontSize', 11);
>> ylabel('y[n]', 'FontSize', 11);
>> grid on;
生成的信号波形图:
3、
MATLAB代码:
matlab
>> clear all;
>> t = 0 : 0.01 : 5;
>> figure;
>> a = [1 5 600];
>> b = [3 100];
>> sys = tf(b, a);
>> y = impulse(sys, t);
>> plot(t, y);
>> hold on;
>> z = step(sys, t);
>> plot(t, z);
>> grid on;
>> title('Ex.3', 'FontSize', 14);
>> xlabel('Time(sec)');
>> ylabel('Amplitude');
>> legend('冲激响应', '阶跃响应', 'Location', 'Best');
生成的信号波形图:
4、
MATLAB代码:
matlab
>> clear all;
>> figure;
>> subplot(2, 1, 1);
>> %卷积法求零状态响应
>> a = [1 1 2];
>> b = [0 1 2];
>> t = 0 : 0.01 : 15;
>> [r, p, k] = residue(b, a);
>> h = r(1) * exp(p(1) * t) + r(2) * exp(p(2) * t);
>> x = exp(-t) .* sin(t) .* (t >= 0);
>> dt = 0.01;
>> y = conv(x, h) * dt;
>> plot(t, y(1: length(t)));
>> grid on;
>> title('卷积法求零状态响应', 'FontSize', 14);
>> xlabel('Time(sec)');
>> ylabel('y(t)');
>> subplot(2, 1, 2);
>> %lsim法求零状态响应
>> sys = tf(b, a);
>> z = lsim(sys, x, t);
>> plot(t, z);
>> title('lsim法求零状态响应', 'FontSize', 14);
>> xlabel('Time(sec)');
>> ylabel('y(t)');
>> grid on;
生成的信号波形图:
思考题1: 写出连续、离散信号卷积的定义 ?卷积运算的作用是?
解答:
思考题2: conv函数输出的数组维度与输入维度有何关系?如何将输出结果与时间向量相对应?
解答:
matlab
>> clear all;
>> t1 = 0 : 0.01 : 3;
>> t2 = 0 : 0.01 : 5;
>> x = exp(- t);
>> x = exp(- t1);
>> y = sin(2 * t2);
>> z = conv(x, y);
>> figure;
>> plot(t1, y(1:length(t1)));
实验收获与感想:
1、 求解连续时间系统零状态响应时,需注意系数向量 a, b的写法,次数从高到低;
2、 注意调用卷积函数conv之后 结果向量的维数 ;
3、 别误关 当前图像;
4、 卷积法求零状态响应时,t 应设定为 tmin = 0 ,否则会报错;
5、 (重要)MATLAB中所有的计算都是针对离散数据点 进行的,连续函数只能通过近似 的方法得到;
6、 注意连续信号卷积的公式中的 'dt' 项。