Simulinkモデ​ル内でのWorksp​aceの変数をTra​sfer Fcnの係数(num,den)に反映させたい

3 次查看(过去 30 天)
Simulinkモデル内のMATLAB Functionで計算したnum=[num_param1, num_param2]、den=[1, den_param1, den_param2]がWorkspace上にあります。このWorkspace上にあるnum,denを、同Simulinkモデル内にあるTrasfer Fcnの係数(num,den)として入力して、Trasfer Fcnを使いたいです。
やったこととしては、下記ですが、全て失敗となり上手く行っていません。MATLAB Function内で計算したnum,denを、Trasfer Fcnの係数としてnum,denを反映させる方法を教えてください。よろしくお願いいたします。
・ num,denをData store Memoryでの共有メモリでの反映→Simulink.Signalのオブジェクトではありませんのエラー
・ num,denをSimulink.Signal、Simulink.Parameterによるオブジェクト化→Simulink.Signal、Simulink.Parameterはコード生成でサポートされていませんのエラー
・ num,denをMATLAB Function内でassignin関数を使って、WorkSpaceへのデータを更新→assigninはコード生成でサポートされていませんのエラー
・ num,denをGlobal変数化(MATLAB Functionの中でglobal numで定義)→ global 宣言は、[シンボル] ペインで登録された Data Store Memory ブロックに関連付けられません。でエラー
・ num,denをMATLAB Function内で一旦to Fileでファイルに書き出して、from Fileブロックで読んでもWorkspace上のnum,denへの更新はされない

回答(1 个)

Yorihisa Yamamoto
残念ながら、Trasfer Fcnブロックの分子・分母係数をシミュレーションの途中で動的に変更することはできません。同パラメータはシミュレーション開始前の初期化の段階で参照・確定した値が使用されます。
分子・分母係数を動的に変更したい場合、下記のアプローチがあります。
  • Simulink提供のTransfer Fcn Direct Form II Time Varyingブロック(離散時間伝達関数)を使用する。
  • Control System Toolbox提供のVarying Transfer Functionブロック(連続時間伝達関数)やDiscrete Varying Transfer Functionブロック(離散時間伝達関数)を使用する。
  • Simulink提供のIntegratorブロックやUnit Delay, Delayブロックを用いて伝達関数を直接モデリングする。分子・分母の各係数を入力としてモデリングすることで変更可能な形にできます。
  • (信号処理で使用される適応フィルタの場合)DSP System Toolbox提供のAdaptive Filtersライブラリ内ブロックを使用します。離散時間のLMS, RLS, カルマンフィルタ等が提供されています。
以上です。ご参考になれれば幸いです。

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!