如何在 scilab 程序(不是 xcos)中模拟干扰
How to simulate a disturbance in scilab program (not xcos)
你好吗?
我需要使用 scilab 模拟控制系统中的扰动,即 csim 函数用于通过使用阶跃、脉冲、斜坡或任何其他输入来模拟系统的响应,但是,我需要例如在 t = 0.5s 内输入干扰以查看系统行为。
这给我带来了另一个问题,因为我不知道如何让 csim 或 syslin 识别两个不同的输入,或者它就像定义两个系统一样简单,一个具有参考输入,另一个具有干扰入口和两者相加?
在此先感谢您的帮助。
假设您有以下线性时不变系统 (A,B,C)
x'=A*x+B1*v+B2*d
y=C*x
with B=[B1,B2],其中 v 是 control/input,d 是扰动。如果你想要例如模拟阶跃响应和扰动 您必须定义自己的整体输入 [v;d] 并决定何时应用扰动。这是一个例子:
function ud = step(t)
ud = [1;0];
endfunction
function ud = input(t)
ud = zeros(t);
ud(1,:) = 1;
s = abs(t-0.5);
// 0.2 is the half-width of disturbance
ud(2,:) = -0.1*(1-s/0.2).*(s<0.2)
endfunction
A = [-2 1;
1 -2];
B1 = [1;0];
B2 = [0;4];
C = [0 1];
sl = syslin('c',A,[B1 B2],C);
t = linspace(0,5,1000);
x = csim(step,t,sl)
xd = csim(input,t,sl)
clf
plot(t,x,t,xd,t,input(t)(2,:))
legend('step','step and disturbance','disturbance',2)
我在这里进行了两次 csim 调用,一次用于通常的阶跃响应,另一次用于扰动阶跃响应。但是,我警告您 csim 使用的 ode 求解器:不连续的输入很容易被忽略,这就是我在这里应用帽形扰动的原因。扰动输入的代码被设计为允许矢量时间输入,以便轻松绘制扰动。
你好吗?
我需要使用 scilab 模拟控制系统中的扰动,即 csim 函数用于通过使用阶跃、脉冲、斜坡或任何其他输入来模拟系统的响应,但是,我需要例如在 t = 0.5s 内输入干扰以查看系统行为。
这给我带来了另一个问题,因为我不知道如何让 csim 或 syslin 识别两个不同的输入,或者它就像定义两个系统一样简单,一个具有参考输入,另一个具有干扰入口和两者相加?
在此先感谢您的帮助。
假设您有以下线性时不变系统 (A,B,C)
x'=A*x+B1*v+B2*d
y=C*x
with B=[B1,B2],其中 v 是 control/input,d 是扰动。如果你想要例如模拟阶跃响应和扰动 您必须定义自己的整体输入 [v;d] 并决定何时应用扰动。这是一个例子:
function ud = step(t)
ud = [1;0];
endfunction
function ud = input(t)
ud = zeros(t);
ud(1,:) = 1;
s = abs(t-0.5);
// 0.2 is the half-width of disturbance
ud(2,:) = -0.1*(1-s/0.2).*(s<0.2)
endfunction
A = [-2 1;
1 -2];
B1 = [1;0];
B2 = [0;4];
C = [0 1];
sl = syslin('c',A,[B1 B2],C);
t = linspace(0,5,1000);
x = csim(step,t,sl)
xd = csim(input,t,sl)
clf
plot(t,x,t,xd,t,input(t)(2,:))
legend('step','step and disturbance','disturbance',2)
我在这里进行了两次 csim 调用,一次用于通常的阶跃响应,另一次用于扰动阶跃响应。但是,我警告您 csim 使用的 ode 求解器:不连续的输入很容易被忽略,这就是我在这里应用帽形扰动的原因。扰动输入的代码被设计为允许矢量时间输入,以便轻松绘制扰动。