Simulink上で​時間と共に係数が変化​する伝達関数を実現す​るには、どのようにモ​デルを作れば良いです​か?

31 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2018 年 3 月 15 日
編集済み: MathWorks Support Team 2018 年 3 月 26 日
Simulink上で時間と共に係数が変化する伝達関数を使用してシミュレーションするには、どのようにモデルを作ればよいかを教えて下さい。

採用された回答

MathWorks Support Team
MathWorks Support Team 2018 年 3 月 26 日
係数が時変の伝達関数は以下の3つの方法でモデリング可能です。
1. 伝達関数を状態方程式へ変換する方法
2. S-function を用いる方法
3. 信号処理用ブロックを用いる方法(離散時間のみ)
 
以下の式(A)のような、厳密にプロパーである連続系の1次の伝達関数を仮定し、伝達関数の係数'd0'が時間変化すると考えます。
本説明のサンプルモデルは、tvtfsamp.mdl です。
n0
G(s) = ------------ ・・・(A)
    d1 s + d0
1. 伝達関数を状態方程式へ変換する方法
式(A)で表される伝達関数の係数 n0, d1, d0が時間変化しないと仮定し、伝達関数を状態方程式へ変換します。(伝達関数を状態方程式へ変換する理論的な情報は、書籍等で確認してください。)
さらに以下の図のように、変換した式をブロック線図で表現して時変の係数 n0, d1, d0 を設定します。今回、初期の状態量は0に設定しています。
2. S-Function を用いる方法
製品内デモモデルとして、Transfer Functionブロックのパラメータを時変で与えるS-functionブロックが提供されています。デモモデルはコマンドウィンドウでsfcndemo_stvctf(離散の場合はsfcndemo_stvdtf)を入力すると起動します。
ここでは、デモモデルに含まれている 'stvctf.c' を用いた以下のブロック線図の例を紹介します。(離散時間の伝達関数には、'stvdtf.c'をご利用下さい。)
  また注意点として、以下の3点があります。
1) 入力信号、分子係数ベクトル信号、分母係数ベクトル信号の順番でMUXブロックで信号をまとめ、S-Functionブロックへ入力します。
2) 分子係数ベクトル信号と分母係数ベクトル信号の長さを一致させます。(サンプルモデルでは、このために分子係数ベクトル信号を[0 n0]と定義しています)
3) 以下の図のように、S-Functionをダブルクリックして表示されるブロックパラメータの分子係数ベクトル'num'と分母係数ベクトル'den'の長さを一致させます。
また、以上の2つの手法は、伝達関数の係数更新のタイミングに違いがあります。 伝達関数の係数更新のタイミングがシミュレーション結果に影響するときは、1.の伝達関数を状態方程式へ変換する方法をお勧めします。S-Functionを用いた方法では、'sdvctf.c'のプログラム構造上、1ステップ前の係数で求めた状態空間行列が計算に使われることで応答に1ステップ分の遅れが生じます。
 
【補足】
MATLAB 7.0(R14)以降のバージョンでは、以下のブロックで係数が時変である離散時間伝達関数を作成できます。 以下のブロックでは、伝達関数の分子・分母の入力形式が1, 2の例と異なることに注意してください。
Simulink
-> Additional Math & Discrete
-> Additional Discrete
->Transfer Fcn Direct Form II Time Varying
 
サンプルモデル tvtfsamp.mdl、Transfer Fcn Direct Form II Time Varying ブロックを用いたサンプルモデルgnc_tmw3.mdlは、回答欄上部からダウンロード可能です。
3. 信号処理用ブロックを用いる方法
信号処理用ブロックの機能を利用することで、係数が時変の離散時間の伝達関数を実現可能です。
ディジタル信号処理の観点では、伝達関数とはディジタルフィルタを意味します。
Discrete Filter ブロックを使用し、以下のブロックパラメーターのGUIにおいて分子係数、分母係数、(必要があれば)初期状態のソースを「入力端子」に設定すると、ブロックにそれぞれの入力ポートが追加され、外部から係数を入力可能となります。
また、DSP System Toolboxのライセンスをお持ちであれば、Biquad Filterブロックの利用を推奨します。Biquad FIlterブロックのブロックパラメーターで、Coefficient sourceをInput portに設定することで、Discrete Filterブロックと同じく係数入力用の入力ポートが追加されます。
Biquad Filterブロックは、固定小数点化、Cコード生成、HDLコード生成に対して有効です。3次以上のフィルタで固定小数点化するときは、特にBiquad Filterブロックの方が演算誤差が小さくなります。
Biquad Filterブロックを使用するときは、係数の変換が必要となることに注意してください。
伝達関数の分母分子係数num,denに対して、MATLABコマンドウインドウで
[sos, g] = tf2sos(num,den)
と入力することで、伝達関数の高次フィルター係数ベクトルを2次セクション型のカスケード接続に変換できます。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange信号 についてさらに検索

製品


リリース

R2014a

Community Treasure Hunt

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

Start Hunting!