输出的幅值跟正常的对不上
下附波形输出
系统框图如下:
S函数代码如下:
function [sys, x0, str, Ts] = TD_example(t, x, u, flag)
switch flag
case 0
[sys, x0, str, Ts]=mdlInitializeSizes;
case 2
sys=mdlUpdate(t, x, u);
case 3
sys=mdlOutputs(t, x, u);
case {1, 4, 9}
sys=[];
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys, x0, str, Ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 2;
sizes.NumOutputs = 2;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [0 0];
str = [];
Ts = [];
function sys = mdlUpdate(t,x,u)
r = 10; h = 0.01;
d = r*h; d0 = d*h; y = x(1)-u+h*x(2);
a0 = sqrt(d^2+8*r*abs(y));
if (abs(y)>d0)
a = x(2)+sign(y)*(a0-d)/2;
else
a = x(2)+y/h;
end
if (abs(a)<=d)
f = -r*a/d;
else
f = -r*sign(a);
end
sys(1) = (x(1)+h*x(2));
sys(2) = (x(2)+h*f);
function sys = mdlOutputs(t,x,u)
h = 0.01;
sys(1) = x(1);
sys(2) = x(2);
求大神指点!