目录
题目
1,绘出系统的冲激响应和阶跃响应波形
1)基础
2)效果
3)代码
2,求出t=0.5s,1s,1.5s,2s时系统冲激响应的数值解。
1)基础
2)效果
☀
3)代码
题目
已知描述某连续系统的微分方程为:y’’(t)+5y’(t)+6y(t)=3f’(t)+2f(t)
1,绘出系统的冲激响应和阶跃响应波形
1)基础
- 冲激响应是在输入为单位冲激信号时的系统输出。
- 阶跃响应是在输入为单位阶跃信号时的系统输出。
- 传递函数 :零初始条件下线性系统响应量(即输出y(t))的拉普拉斯变换Y(s)(或z变换)Y(z)与激励量(即输入x(t))的拉普拉斯变换X(s)之比。记作G(s)=Y(s)/X(s),传递函数是描述线性系统动态特性的基本数学工具之一。
- MATLAB中的
impulse
函数可以得到冲激响应的时间序列数据
为了绘制连续系统的冲激响应和阶跃响应波形,需要先确定系统的传递函数。对于给定的微分方程y''(t) + 5y'(t) + 6y(t) = 3f'(t) + 2f(t)可以转化为传递函数的形式:
- 首先,对输入f(t)和输出y(t)进行拉普拉斯变换→F(s)和Y(s)。
- 将微风方程转换为:s^2Y(s) + 5sY(s) + 6Y(s) = 3sF(s) + 2*F(s)。
- 之后整理得:Y(s) = (3sF(s) + 2F(s)) / (s^2 + 5s + 6)。
- 然后,对分子和分母进行因式分解。
- 最后利用部分分式展开的方法得到系统的传递函数。(在MATLAB中,
tf
函数可以直接用来创建传递函数。)
impulse函数:
step函数:
2)效果
3)代码
% 定义系统的传递函数
fenzi = [3 2]; % 分子多项式系数
fenmu = [1 5 6]; % 分母多项式系数
sys = tf(fenzi, fenmu); % 创建传递函数对象
% 计算冲激响应
[ y_impulse,t_impulse] = impulse(sys); %时间向量t_impulse和响应向量y_impulse
% 绘制冲激响应波形
figure;
subplot(2,1,1);
plot(t_impulse, y_impulse);
title('冲激响应波形');
xlabel('时间 (t)');
ylabel('响应 (y)');
grid on;
% 计算阶跃响应
[ y_step,t_step] = step(sys);
% 绘制阶跃响应波形
subplot(2,1,2);
plot(t_step, y_step);
title('阶跃响应波形');
xlabel('时间 (t)');
ylabel('响应 (y)');
grid on;
2,求出t=0.5s,1s,1.5s,2s时系统冲激响应的数值解。
1)基础
可以使用插值或者查找的方法来获取特定时间点的冲激响应值。由于impulse
函数返回的时间向量和响应向量通常是等间隔的,我们可以直接通过索引来查找对应时间点的值。
步骤:
- 首先定义想要查询的时间点
t_query
,并使用interp1
函数和'nearest'
选项来查找这些时间点对应的最近冲激响应值。
注意点:
- 如果
t_impulse
的时间间隔不够小,使用'nearest'
选项可能会导致一些误差。 - 在这种情况下,可能需要使用更精确的插值方法,如
'linear'
或'spline'
- 对于大多数控制系统分析,如果
t_impulse
的时间向量足够密集,'nearest'
选项通常就足够了。
interp1函数:(interp字母后面带着的是数字1)
num2str函数:
2)效果
3)代码
% 定义系统的传递函数
fenzi = [3 2]; % 分子多项式系数
fenmu = [1 5 6]; % 分母多项式系数
sys = tf(fenzi, fenmu); % 创建传递函数对象
% 计算冲激响应
[ y_impulse,t_impulse] = impulse(sys); %响应向量y_impulse和时间向量t_impulse
% 定义想要查询的时间点
t_query = [0.5 1 1.5 2];
% 查找对应时间点的冲激响应值
% 由于t_impulse和y_impulse是等间隔的,可以使用插值或者查找最近点的方法
% 这里假设t_impulse的间隔足够小,可以直接查找最近点
y_query = interp1(t_impulse, y_impulse, t_query, 'nearest');
% 显示结果
disp(['在 t = 0.5s, 1s, 1.5s, 2s 时的冲激响应分别为: ' num2str(y_query)]);
有问题请在评论区留言,1天8h在线。