matlab怎么求传输函数的脉冲响应和阶跃响应
matlab怎么求传输函数的脉冲响应和阶跃响应?
对于一个常规的传递函数,我们在进行了阶跃仿真后经常需要给出对应的响应指标,
sys = tf(1,[1 2 3])
y = step(sys)
figure
plot(y)
求解对应的阶跃指标结果
%% 求阶跃响应的典型指标
function [OverShoot, RiseTime, PeakTime, AdjustTime, SteadyStateError] = GetPerformanceOfStepResponse(t, y, stepvalue, gTolerance)
% 超调量Mp:最大超调量规定为在暂态期间输出超过对应于输入的终值的最大偏离量
% 上升时间tr:在暂态过程中,输出第一次达到对应于输入的终值的时间(从t=0开始计时)
% 峰值时间tp:对应于最大超调量发生的时间(从t=0开始计时)
% 调整时间ts:输出与其对应于输入的终值之间的偏差达到容许范围(一般取5%或2%)所经历的暂态过程时间(从t=0开始计时)
% 稳态误差err:给定输入与稳态输出的差值
% 超调量和峰值时间
[OSValue, OSIndex] = max(y)
OverShoot = (OSValue - stepvalue)/stepvalue*100
PeakTime = t(OSIndex)
% 上升时间
index = find(y >= stepvalue, 1, 'first')
RiseTime = t(index)
% 调整时间和稳态误差
index1 = find(y <= stepvalue*(1 - gTolerance), 1, 'last') % 容许范围由全局变量指定
index2 = find(y >= stepvalue*(1 + gTolerance), 1, 'last')
if isempty(index2) % 如果没有超调量,此值为空
index = index1
else
index = max(index1, index2)
end
index = max(index1, index2)
AdjustTime = t(index)
SteadyStateError = mean(y(index:end)) - stepvalue % 这里的稳态误差计算为调整时间后的数据平均值与给定输入的差,概念上是最后时刻的值与给定输入的差
end
其中 t为时间,y为响应结果,stepvalue为阶跃数值,gTolerance为调整时间的误差
您可以使用MATLAB中的tf函数来计算传输函数的脉冲响应和阶跃响应。以下是一些示例代码:
- 脉冲响应:
```matlab
sys = tf(1, [1 2]) % 传递函数为s^2 + 2s + 1
t = 0:0.01:1 % 时间区间
y = step(sys, t) % 单位阶跃响应
plot(t, y) % 绘制图像
xlabel('时间') ylabel('幅值') legend('单位阶跃')
```
- 阶跃响应:
```matlab
sys = tf(1, [1 2]) % 传递函数为s^2 + 2s + 1
t = 0:0.01:1 % 时间区间
y = step(sys, t) % 单位阶跃响应
plot(t, y) % 绘制图像
xlabel('时间') ylabel('幅值') legend('单位阶跃')
```