二阶欠阻尼系统识别MATLAB
clear all;
close all;
clc
dt = 0.01; tmax = 20;
t = 0 : dt : tmax; s = tf('s'); %设定待辨识传递函数
w = 3; % 自然频率
f = 0.5; % 欠阻尼系数
H = w^2/(s^2 + 2*f*w*s + w^2) %传递函数 %设定输入的阶跃函数, 并画出输入与输出函数 U = ones(1,tmax/dt + 1);
y = lsim (H,U,t);%求输出
plot(t,U,t,y); legend('u','y'); ylabel('Step Response') xlabel('Time, Seconds')
%对二阶欠阻尼自衡对象传递函数参数进行辨识
int t1n t2n
for i=1:tmax/dt-1
if (y(i)=y(i+2))
t1n = i
break
end
end
for i=t1n+1 : tmax/dt-1
if (y(i)=y(i+2))
t2n = i
break
end
end
Tz = (t2n - t1n)*dt %求Tz
Y1 = y(t1n - 1) - 1
Y2 = y(t2n - 1) - 1
f0 = 1/(1 + (pi /log(Y1))^2)^0.5
if f0
w0 = 2*pi/(Tz*(1 - f0^2)^0.5)
else
w0 = 0;
end
H0 = w0^2/(s^2 + 2*f0*w0*s + w0^2) %传递函数
y1 = lsim (H0,U,t);%求输出
figure(2);
plot(t,y,t,y1); %画出原函数输出与辨识出的函数输出图像对比
legend('原系统',' 辨识系统');
title('原系统与辨识系统阶跃响应对比');
ylabel('Step Response')
xlabel('Time, Seconds')