0

私は Modelica を初めて使用し、連続した実際の入力信号を配列にサンプリングしようとして問題を抱えています。「when sample」を使用してみましたが、機能しません。以下のコードの問題は、すべてのx[i]がdt秒ごとにサンプリングされたpの同一バージョンであることです。私が望むのは、x[1]が最初のサンプル、x[2]が 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
  parameter Real dt = 0.1 "モニターの精度";
  実数 p;
  実数[10] x;
  Modelica.Blocks.Sources.Sine sine(freqHz=1);

方程式
  p = sine.y;
  サンプル(0, dt) の場合
    x[1] = p;
    for j in 2:10 ループ
      x[j] = pre(x[j-1]);
    終了します。
  いつ終了しますか。

test_sample を終了します。
于 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 に答える