在Modelica中对信号采样信号

时间:2013-07-16 15:17:32

标签: sample modelica

我是Modelica的新手,我在尝试将连续的,真实的输入信号采样到阵列时遇到了麻烦。我尝试过使用'when sample'但无法使用它。以下代码的问题是每个 x [i] p 的每个 dt 秒的相同采样版本。我想要的是, x [1] 是第一个相同的, x [2] 是第二个样本,依此类推。

model test_sample
  parameter Real dt = 0.1 "Precision of monitor";
  Real p;
  Real[10] x;
  Modelica.Blocks.Sources.Sine sine(freqHz=1);

equation 
  p = sine.y;

  for j in 1:10 loop
    when sample(0, dt) then
      x[j] = p;
    end when;
  end for;

end test_sample;

非常感谢任何帮助!

提前致谢!

2 个答案:

答案 0 :(得分:0)

我不是100%确定你要做什么。您是否试图将最后10个样本保留在阵列中?如果是,则为以下代码(x[1]始终是最后一个样本)。也可以使用sample(j*dt/10, dt)或类似的东西在不同的时间点对它们进行全部采样(如果你想要n个样本,但不希望第一个样本始终是最新样本)。

model test_sample
  parameter Real dt = 0.1 "Precision of monitor";
  Real p;
  Real[10] x;
  Modelica.Blocks.Sources.Sine sine(freqHz=1);

equation 
  p = sine.y;
  when sample(0, dt) then
    x[1] = p;
    for j in 2:10 loop
      x[j] = pre(x[j-1]);
    end for;
  end when;

end test_sample;

答案 1 :(得分:0)

感谢您的回复。你的代码并不是我想要的,但它帮助我更多地了解了Modelica以及我想要的内容。这是下面的代码。基本上, x [i] = p((i-1)* dt)。这假设模拟时间为1秒,您需要11个样本。

model test_sample
  parameter Real dt = 0.1 "Precision of monitor";
  Real p;
  Real[11] x;
  Modelica.Blocks.Sources.Sine sine(freqHz=1);

algorithm 
  for j in 0:10 loop
    when time > (j-1)*dt and time <= j*dt then
      x[j] := p;
    end when;
  end for;

equation 
  p = sine.y;

end test_sample;