积分延迟脉冲信号的数值问题(fixedDelay)

gwr*_*gwr 8 precision modelica systemmodeler openmodelica dymola

我注意到集成脉冲输入的数值问题在Modelica中延迟了一段固定的时间(使用Wolfram System Modeler 4.3):

模型图

model PulseTest "Test FixedDelay with Pulse Input";
    Modelica.Blocks.Sources.Pulse pulse(
        startTime = 1, 
        width = 100, 
        period = 1/32, 
        amplitude = 32, 
        nperiod = 1
    );
    Modelica.Blocks.Nonlinear.FixedDelay fixedDelay( delayTime = 5 );
    Modelica.Blocks.Continuous.Integrator x; // integrator for the undelayed pulse
    Modelica.Blocks.Continuous.Integrator y; // integrator for the delayed pulse
equation
    connect( pulse.y, fixedDelay.u );
    connect( fixedDelay.y, y.u );
    connect( pulse.y, x.u );
end PulseTest;
Run Code Online (Sandbox Code Playgroud)

积分脉冲周期= 1/a,幅度= a,宽度= 100%应该给出1.0.但从图中可以看出,这不是我得到的延迟脉冲:

随着时间的推移,X和Y的情节

只有未延迟的信号使用DASSL给出正确的值.将已经出现的数值积分误差周期= 1/A = 1/8和(自然)成长为一个增长.

什么是最好的补救措施?

小智 1

正如 Ankit 在Wolfram 论坛上发布的那样,问题在于信号是离散的,但延迟块没有意识到这一点。它可以用不同的延迟块来修复:

model DiscreteFixedDelay
  discrete input Modelica.Blocks.Interfaces.RealInput u ;
  discrete output Modelica.Blocks.Interfaces.RealOutput y ;
  parameter Modelica.SIunits.Time delayTime(start = 5) = 5 "Delay time of output with respect to input signal";
equation
  y = delay(u, delayTime);
end DiscreteFixedDelay;
Run Code Online (Sandbox Code Playgroud)

问候