📄 setmod.m
字号:
% ====================================
% 建立一阶惯性加滞后环节模型
% ====================================
% 输入:y1——滤波后的曲线Y值
% wwa——响应曲线全部数据
% 输出: K——比例
% T——积分
% Td——微分
% temp9——t0时所对应的数组下标
% t0——阶跃时所对应的时间
% y0——阶跃发生时所对应的Y
% flag——1:K,T,Td
% 2: K,T
% K*exp(-Td*s)
% G(s)=----------------------
% T*s+1
function [K,T,Td,t0,y0,temp9]=setmod(y1,wwa,flag)
if flag==1
% 计算两个稳态值即:Y(0)和Y(inf)
[mm1,mm3]=twostate(y1,wwa);
% X(0)=x0
% X(inf)=xinf
L3=length(wwa(:,3));
x0=wwa(1,3);
xinf=wwa(L3,3);
% 参数K
K=(mm3-mm1)/(xinf-x0);
% 确定Y(0.283)
y632=(mm3-mm1)*0.632+mm1;
% 确定t632
L1=length(wwa(:,2)); % Y数组长度
temp6=0;
temp4=0;
for i5=1:L1
if abs(y632-y1(i5,1))<0.0004 % 0.01为阀值
temp6=temp6+1;
temp4=wwa(i5,1)+temp4;
end
end
t632=temp4/temp6;
% 确定 t0
for i6=1:L1-1
if wwa(i6,3)~=wwa(i6+1,3)
t0=wwa(i6,1); % 确定t0
y0=y1(i6);
temp9=i6; % temp9为t0时所对应的数组下标
end
end
% 确定Y(0.283)
temp6=0;
temp4=0;
y283=(mm3-mm1)*0.283+mm1; % 0.283(Y(inf)-Y(0))
% 确定t283
for i5=1:L1
if abs(y283-y1(i5,1))<0.0004 % 0.01为阀值
temp6=temp6+1;
temp4=wwa(i5,1)+temp4;
end
end
t283=temp4/temp6;
% 确定 T
T=1.5*((t632-t0)-(t283-t0));
% 确定Td
Td=(t632-t0)-T;
end
if flag==2
% 求参数惯性环节K,T
% Y(inf)=mm3
% Y(0)=mm1
[mm1,mm3]=twostate(y1,wwa);
L1=length(wwa(:,2));
% X(0)=x0
% X(inf)=xinf
L3=length(wwa(:,3));
x0=wwa(1,3);
xinf=wwa(L3,3);
% 参数K
temp6=0;
temp4=0;
K=(mm3-mm1)/(xinf-x0);
y632=(mm3-mm1)*0.632+mm1;
% 确定t632
for i5=1:L1
if abs(y632-y1(i5,1))<0.01 % 0.01为阀值
temp6=temp6+1;
temp4=wwa(i5,1)+temp4;
end
end
t632=temp4/temp6;
% 确定 t0
for i6=1:L1-1
if wwa(i6,3)~=wwa(i6+1,3)
t0=wwa(i6,1); % 确定t0
y0=y1(i6);
temp9=i6; % temp9为t0时所对应的数组下标
end
end
% 确定 T
T=t632-t0;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -