Main Content

codegen

調整可能なゲイン曲面の MATLAB コードを生成

説明

code = codegen(GS) は、調整可能な曲面 GS の MATLAB® コードを生成します。生成されたコードは、スケジューリング変数のスカラー値を受け取り、GS に応じてスカラー値または行列値のゲインを返す関数です。

すべて折りたたむ

2 つのスケジューリング変数において双線形な依存関係をもつスカラー ゲインを表す調整可能な曲面を作成します。範囲が 0 ~ 15 度の alpha と、範囲が 300 ~ 600 m/s の V というスケジューリング変数を仮定します。調整可能な曲面は、この操作範囲内で線形に等間隔なグリッドをカバーします。

[alpha,V] = ndgrid(0:3:15,300:50:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y]; 
GS0 = tunableSurface('K',1,domain,shapefcn);

通常は、スケジュールされたゲインを GS0 を使ってパラメーター化し、systune で曲面係数を調整します。この例では、調整する代わりに係数をゼロ以外の値に手動で設定しています。

GS = setData(GS0,[100,28,40,10]);

スカラー ゲインをスケジューリング変数の関数として計算する MATLAB コードを生成します。

code = codegen(GS)
code = 
    'function Gain_ = fcn(alpha_,V_)
     %#codegen
     
     % Type casting
     ZERO = zeros(1,1,'like',alpha_+V_);
     alpha_ = cast(alpha_,'like',ZERO);
     V_ = cast(V_,'like',ZERO);
     
     % Tuned gain surface coefficients
     Coeffs = cast([100 28 40 10],'like',ZERO);
     Offsets = cast([7.5 450],'like',ZERO);
     Scalings = cast([7.5 150],'like',ZERO);
     
     % Normalization 
     alpha_ = (alpha_ - Offsets(1))/Scalings(1);
     V_ = (V_ - Offsets(2))/Scalings(2);
     
     % Compute weighted sum of terms
     Y = [ alpha_ , V_ , alpha_*V_ ];
     Gain_ = Coeffs(1);
     for i=1:numel(Y)
        Gain_ = Gain_ + Coeffs(i+1) * Y(i);
     end
     '

結果のコードは、2 つのスケジューリング変数を受け取ってスカラー ゲインを返す関数 fcn です。関数には、調整したゲイン スケジュールをハードウェアへ実装する場合など、追加のコード生成に使用できるように %#codegen 命令が含まれています。

関数には 4 つのセクションがあります。最初のセクションは、スケジューリング変数が確実に同じ型にキャストされるようにします。2 番目のセクションは、ソフトウェアが GS から抽出するゲイン係数、オフセット、およびスケーリングをエンコードします。これらの値は fcn にハードコードされていて、GS を参照せずにゲイン曲面を計算できます。3 番目のセクションは、これらの値を使って、正規化されたスケジューリング変数を計算します (正規化の詳細については、tunableSurfaceを参照してください)。

最後のセクションは、ゲイン曲面の多項式のすべての項を合計することによりゲインを計算します。

入力引数

すべて折りたたむ

調整可能なゲイン曲面。tunableSurface オブジェクトとして指定します。

出力引数

すべて折りたたむ

ゲイン曲面の生成されたコード。文字配列として返されます。コードには、GS のスケジューリング変数 x1_,x2_,...,xN_ からゲインを計算する関数 Gain_ = fcn(x1_,x2_,...,xN_) が含まれています。ゲインをスケジューリング変数に関連付ける式とその係数、およびスケジューリング変数の正規化はすべて GS から取得され、コードはその後 TS を参照せずに実行できます。返された関数には、調整したゲイン スケジュールをハードウェアへ実装する場合など、追加のコード生成に使用できるように %#codegen 命令が含まれています。

writeBlockValue を使用して slTuner インターフェイスから MATLAB Function ブロックに調整後のゲイン曲面の係数を書き込む場合、生成されたこの MATLAB コードが使用されます。

バージョン履歴

R2017b で導入