我是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;
非常感谢任何帮助!
提前致谢!
答案 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;