我注意到在Modelica中使用集成了固定时间延迟的脉冲输入的数字问题(使用Wolfram System Modeler 4.3):
Conv1D(filters = 100, kernel_size= 10, activation='relu', padding='same')
对周期= 1 / a,幅度= a和宽度= 100%的脉冲积分应为1.0。但是从图中可以看出,这不是我得到的延迟脉冲的结果:
只有未延迟的信号使用DASSL才能给出正确的值。对于 period = 1 / a = 1/8 ,数值积分误差将已经出现,并且(自然)随着 a 的增长而增长。
最好的补救方法是什么?
答案 0 :(得分:4)
问题是,正如马库斯·A(Markus A)所写的那样,该延迟不会传播从输入到输出的不连续性,因此,仿真无法像正常步阶变化一样处理延迟的步阶变化,即事件检测和事件处理。
从工具的角度平滑插值,延迟信号不仅是最简单的解决方案-而且如果延迟信号被反馈,也可以避免事件的级联。
使用任何可变步长求解器时,我看不到任何简单可靠的解决方法。
答案 1 :(得分:1)
正如Ankit在Wolfram Forum上发布的那样,问题在于信号是离散的,但延迟块却没有意识到。可以使用其他延迟块来固定它:
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;
致谢