首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >积分延迟脉冲信号的数值问题(fixedDelay)

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

Stack Overflow用户
提问于 2018-12-10 16:41:36
回答 2查看 350关注 0票数 8

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

代码语言:javascript
复制
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;

将周期= 1/a、幅值= a和宽度= 100 %的脉冲积分为1.0。但从情节中可以看出,这不是我对延迟脉搏的看法:

只有使用DASSL的无延迟信号才能给出正确的值。数值积分误差已经出现在周期= 1/a = 1/8,并且(自然)随着增长而增长。

什么是最好的治疗方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-19 03:05:19

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

代码语言:javascript
复制
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;

问候

票数 1
EN

Stack Overflow用户

发布于 2018-12-14 11:33:31

问题是,正如Markus A所写的那样,这种延迟不会传播从输入到输出的不连续性,因此模拟不会以正常的步骤更改(即事件检测和事件处理)的方式处理延迟的步骤变化。

从工具的角度来看,平滑地插值延迟信号不仅是最简单的解决方案,而且如果延迟信号被反馈的话,还可以避免一连串的事件。

当使用任何可变步长的求解器时,我看不到任何简单可靠的解决方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53709983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档