📄 cal_time_resp.m
字号:
% calculate_time_responses.m
% cal_time_resp.m
% Rise time calculation
I1=find(y>0.05*yss);
if ~isempty(I1)
t1=t(I1(1));
else
t1=10;
end;
I1=find(y>0.95*yss);
if ~isempty(I1)
t2=t(I1(1));
else
t2=80;
end;
rise_time=t2-t1;
% Overshoot
ymax=max(y);
if ymax<=yss
ov_shoot=0;
else
ov_shoot=(ymax-yss)/yss;
end;
ov_shoot;
% Settling time
if ov_shoot>1
set_time=120; % Ocillatory response
else
I1=find(y>=0.98*yss);
if ~isempty(I1)
I1N=length(I1);
I2=I1(1):I1(1)+I1N-1; I2=I2';
I3=I1-I2;
I4=find(I3>0);
if ~isempty(I4)
t1=t(I4(1));
else
t1=t(I1(1));
end;
else
t1=10;
end;
I1=find(y<=1.02*yss);
if ~isempty(I1)
I1N=length(I1);
I2=I1(1):I1(1)+I1N-1; I2=I2';
I3=I1-I2;
I4=find(I3>0);
if ~isempty(I4)
t2=t(I4(1));
else
t2=t(I1(1));
end;
else
t2=80;
end;
set_time=max([t1 t2]);
end;
% Check ranges
if rise_time>1 % rise time is in [0 1] sec.
rise_time=1;
else
if rise_time<0
rise_time=0;
end;
end;
if ov_shoot>=0.2 % Max overshoot is 0.2
ov_shoot=0.2;
else
if ov_shoot<0
ov_shoot=0;
end;
end;
if set_time>2 % Settling time is in [0 2].
set_time=2;
else
if set_time<0
set_time=2;
end;
end;
%[rise_time set_time ov_shoot]
%pause
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -