Численные проблемы, связанные с задержкой импульсного сигнала (fixedDelay) - PullRequest
0 голосов
/ 10 декабря 2018

Я отметил численные проблемы, связанные с интегрированием импульсного входа, который задерживается на фиксированное время в Modelica (с помощью Wolfram System Modeler 4.3):

Model Diagram

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.Но, как видно из графика, это не то, что я получаю для задержанного импульса:

Plot of X and Y over time

Только сигнал без задержки дает правильное значение, используяDASSL.Ошибка численного интегрирования появится уже для period = 1 / a = 1/8 и (естественно) будет расти по мере роста a .

Какое лучшее лекарство?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Как 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;

С уважением

0 голосов
/ 14 декабря 2018

Проблема, как писал Маркус А, в том, что эта задержка не распространяет разрыв от входа к выходу, и поэтому моделирование не обрабатывает задержанное пошаговое изменение так же, как обычное пошаговое изменение, то есть с событием-обнаружение и обработка событий.

С точки зрения инструмента плавная интерполяция задержанного сигнала - это не просто простое решение, но также позволяет избежать каскада событий, если задержанный сигнал возвращается обратно.

Я не вижу простого надежного обходного пути при использовании любого решателя с переменным размером шага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...