0

我是 Modelica 的新手,在尝试将连续的、真实的输入信号采样到数组时遇到了麻烦。我曾尝试使用“当样本”,但无法使其正常工作。下面代码的问题是每个x[i]都是每dtp的相同采样版本。我想要的是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;

任何帮助将不胜感激!

提前致谢!

4

2 回答 2

0

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

模型 test_sample
  参数 Real dt = 0.1 “显示器精度”;
  实际 p;
  实数[10] x;
  Modelica.Blocks.Sources.Sine sine(freqHz=1);

方程
  p = sine.y;
  当 sample(0, dt) 然后
    x[1] = p;
    for j in 2:10 循环
      x[j] = pre(x[j-1]);
    结束;
  什么时候结束;

结束测试样本;
于 2013-07-18T21:03:35.660 回答
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;
于 2013-07-22T10:28:42.740 回答