固定小数点モデルの再スケーリング
以下の例では、固定小数点ツールを使用してフィードバック コントローラー モデルに関連する固定小数点データ型のスケーリングを絞り込む方法を示します。ツールでは複数のワークフローを使用して理想的な倍精度数で記述したデジタル コントローラーを固定小数点数で実現した値に変換できますが、この例では以下の方法を使用します。
範囲の収集 — 範囲収集ワークフローを使用してモデルの数値的な動作を確認します。
倍精度数を使用して固定小数点データ型をグローバルにオーバーライドします。Simulink® ソフトウェアによってシミュレーション結果のログが作成され、固定小数点ツールにこの結果が表示されます。
固定小数点のワード サイズとスケーリングで妥当な推奨値を使用して初期シミュレーションを実行し、シミュレーション結果を倍精度の実行と比較します。このタスクは、最適スケーリングを推奨することがいかに困難であるかを示します。
シミュレーション範囲データを使用した小数部の長さの推奨 — 固定小数点の反復的変換ワークフローを使用してモデルをオートスケールします。
固定小数点ツールは、倍精度のシミュレーション結果を使用して、適切に設定されたブロックの固定小数点スケーリングを推奨します。固定小数点ツールを使用すると、推奨スケーリングを選択的に適用することができます。この後で、モデルのアナログ プラントの入力と出力を調べることで、結果の品質を特定します。
フィードバック コントローラーのモデル例について
このチュートリアルの Simulink フィードバック設計モデルを開くには、MATLAB® コマンド ラインで「fxpdemo_feedback
」と入力します。
このモデルは次のブロックとサブシステムで構成されています。
参照
この Signal Generator ブロックは連続時間参照信号を生成します。これは矩形波を出力するように設定されています。
Sum
この Add ブロックはプラント出力を参照信号から抽出します。
ZOH
Zero-Order Hold ブロックは連続信号をサンプリングして保持します。このブロックは 0.01 秒ごとに信号を量子化するように設定されています。
Analog to Digital Interface
アナログからデジタル (A/D) インターフェイスは
double
を固定小数点データ型に変換する Data Type Conversion ブロックで構成されています。これはアナログ入力信号の振幅をデジタル化するハードウェアを表します。実際には、その特性は修正されます。Controller
デジタル コントローラーはハードウェア ターゲットで実行されているソフトウェアを表すサブシステムです。デジタル コントローラーの実現を参照してください。
Digital to Analog Interface
デジタルからアナログ (D/A) インターフェイスは固定小数点データ型を
double
に変換する Data Type Conversion ブロックで構成されています。これはデジタル化された信号をアナログ信号に変換するハードウェアを表します。実際には、その特性は修正されます。Analog Plant
アナログ プラントは伝達関数によって設定され、デジタル コントローラーによって制御されます。実際には、その特性は修正されます。
Scope
モデルにはプラント出力信号を表示する Scope ブロックが含まれています。
シミュレーションの設定
この種類の固定小数点フィードバック コントローラー シミュレーションを設定するには、以下の手順に従います。
すべての設計コンポーネントを識別します。
実際には、修正された特性を備えた設計コンポーネント (ハードウェア) と変更可能な特性を備えた設計コンポーネント (ソフトウェア) があります。このフィードバック設計では、主なハードウェア コンポーネントは A/D ハードウェア、D/A ハードウェア、およびアナログ プラントです。主なソフトウェア コンポーネントはデジタル コントローラーです。
プラントとコントローラーの理論モデルを開発します。
このチュートリアルのフィードバック設計では、プラントは伝達関数によって特徴付けられます。
このチュートリアルのデジタル コントローラー モデルは "z" 領域伝達関数によって記述され、直接型の実現によって実装されます。
プラントとコントローラーの動作を評価します。
ボード線図を使用してプラントとコントローラーの動作を評価します。これは、すべての数値、演算、および状態が倍精度であるため、理想的な評価です。
システムのシミュレーションを実行します。
Simulink ソフトウェアと Fixed-Point Designer™ ソフトウェアを使用してフィードバック コントローラー設計のシミュレーションを実行します。シミュレーション環境ではすべてのコンポーネント (ソフトウェア "および" ハードウェア) を、特性が固定されていないものとして処理することができます。
理想的なフィードバック設計
「固定小数点の制御設計スケーリング」モデルの開ループ (コントローラーとプラント) およびプラント専用ボード線図を、以下の図に示します。開ループのボード線図は連続時間、倍精度係数、ストレージの状態、および数学演算の理想的な世界で説明したデジタル コントローラーから得られます。
ボード線図は preload_feedback.m
という名前のスクリプトによって生成されるワークスペース変数を使用して作成されました。
デジタル コントローラーの実現
このシミュレーションでは、以下の図に示した固定小数点の直接型の実現を使用してデジタル コントローラーを実装します。このハードウェアでは、16 ビット プロセッサをターゲットにします。変数と係数は、特に数量が ROM またはグローバル RAM に格納されている場合は、一般に 16 ビットで表します。32 ビット数を使用できるのは、CPU レジスタまたはスタック内に一時的に存在する一時変数に限られます。
デジタル コントローラーの実現は次のブロックで構成されます。
Up Cast
Up Cast は A/D ハードウェアをデジタル コントローラーに接続する Data Type Conversion ブロックです。このブロックでは、A/D ハードウェアの出力のワード サイズが 16 ビット数 (基本データ型) の長さになるようにゼロを付加します。
Numerator Terms と Denominator Terms
これらの各 Discrete FIR Filter ブロックは CPU ターゲットで実行される重み付き総和を表します。計算のワード サイズと精度には、アキュムレータのワード サイズと精度が反映されます。Numerator Terms は FIR 分子係数を使用して最新の入力を乗算し累積します。Denominator Terms は FIR 分母係数を使用して最新の遅延出力を乗算し累積します。係数は基本データ型を使用して ROM に格納されます。最新の入力は基本データ型を使用してグローバル RAM に格納されます。
Combine Terms
Combine Terms は CPU 内のアキュムレータを表す Add ブロックです。このワード サイズと精度は RAM の 2 倍 (ダブル ビット) です。
Down Cast
Down Cast は CPU から数字を取り出し RAM に格納する Data Type Conversion ブロックです。ワード サイズと精度は基本データ型に戻される場合にアキュムレータの半分まで削減されます。
Prev Out
Prev Out はメモリ内のフィードバック信号を 1 つのサンプル期間ごとに遅延させる Unit Delay ブロックです。信号は基本データ型を使用してグローバル RAM に格納されます。
直接型の実現. コントローラーにより次の方程式が直接実装されます。
ここで、
u(k – 1) は前のタイム ステップからの入力を表します。
y(k) は現在の出力を表し、y(k – 1) は前のタイム ステップからの出力を表します。
bi は FIR 分子係数を表します。
ai は FIR 分母係数を表します。
y(k) 内の最初の加算は、アキュムレータの最新の入力と分子係数の乗算と累積を表します。y(k) 内の 2 番目の加算は、アキュムレータの最新の出力と分母係数の乗算と累積を表します。FIR 係数、入力および出力はすべて 16 ビット数 (基本データ型) で表されるため、これらの数字で乗算を行う場合は 32 ビットの出力 (アキュムレータ データ型) が生成されます。
モデルの数値的な動作の確認
各ブロックをスケーリングする場合の初期推奨は、モデルの各ブロック マスクで既に指定されています。このタスクは、最適な固定小数点スケーリングを推奨する場合の難易度を示します。この例では、固定小数点ツールの範囲収集ワークフローを使用して、モデルの動作を理想的な浮動小数点バージョンと比較します。
fxpdemo_feedback
モデルを開きます。固定小数点ツールを開きます。[アプリ] ギャラリーで、[固定小数点ツール] を選択します。
固定小数点ツールで、[新規] をクリックし、
[範囲の収集]
を選択します。範囲収集ワークフローを使用して、モデルの数値的な動作を確認し、理想的な浮動小数点バージョンと比較できます。
[設計対象のシステム (SUD)] で、解析するサブシステムを選択します。この例では、
[Controller]
を選択します。[範囲の収集モード] で、範囲の収集方法として [シミュレーション範囲] を選択します。
[シミュレーション入力] で、既定のモデル入力をシミュレーションに使用します。
[範囲の収集] ボタンの矢印をクリックして
[倍精度]
を選択します。[範囲の収集] ボタンをクリックし、シミュレーションを開始します。Simulink ソフトウェアはデータ型オーバーライド モードで
fxpdemo_feedback
モデルのシミュレーションを実行し、結果をBaselineRun
に格納します。データ型オーバーライドでは、倍精度データ型により固定小数点データ型をグローバルにオーバーライドできるため、量子化の影響を受けません。固定小数点ツールの [結果] スプレッドシートに実行結果が表示されます。BaselineRun
のコンパイルされたデータ型 ([CompiledDT]) 列には、モデルのブロックによってシミュレーション中にdouble
データ型が使用されたことが示されます。次に、モデルで指定された固定小数点データ型を使用してシステムのシミュレーションを実行します。[設定] ボタンの矢印をクリックして [指定したデータ型] を選択します。[組み込み型によるシミュレーション] をクリックします。
固定小数点ツールは現在指定されている固定小数点データ型を使用してモデルのシミュレーションを実行し、範囲情報を
EmbeddedRun
に格納します。収集された範囲はスプレッドシートの [シミュレーションの最小値] 列と [シミュレーションの最大値] 列で確認できます。固定小数点ツールで
Up Cast
ブロックの含まれる行が強調表示され、この結果に問題があることが示されます。[結果の詳細] ペインには、ブロックが 23 回飽和したことが示され、これはスケーリングの推測が不正確であることを示しています)。ヒント
[探索] タブを使用して結果を確認およびフィルターできます。
[結果の比較] をクリックしてシミュレーション データ インスペクターを開きます。
シミュレーション データ インスペクターで、比較する信号として
PlantOutput
を選択します。シミュレーション データ インスペクターは
BaselineRun
およびEmbeddedRun
のプラント出力に関連する信号をプロットします。EmbeddedRun
のプラント出力信号のプロットはスケーリングでの初期推奨を反映します。ボード線図設計は、理想的なBaselineRun
で表される、閉ループ システムに適合する線形応答を生成するように求められます。しかし、EmbeddedRun
の応答は非線形です。重大な量子化の影響により、非線形特性が生じます。固定小数点設計では、量子化の影響を許容レベルにまで下げるスケーリングを見つけることが重要な部分になります。
シミュレーション範囲データを使用した小数部の長さの推奨
自動データ型指定を使用すると、シミュレーションの全範囲をスパン中に出力データ型の最高精度を得ることができます。固定小数点ツールの固定小数点の反復的変換ワークフローで、シミュレーションの全範囲をスパン中に出力データ型の最高精度を確保できます。この過程はオートスケーリングとして知られています。
この例では、設計範囲情報が提供されないため、固定小数点ツールでのデータ型の推奨にシミュレーション範囲データを使用します。[シミュレーションの最小値/最大値に対する安全余裕 (%)] パラメーター値はシミュレーションの生データ値を乗算します。このパラメーターを 1 より大きい値に設定すると、固定小数点データ型を使用しているときにオーバーフローが発生する可能性が低くなります。固定小数点ツールによるデータ型推奨の計算方法の詳細については、固定小数点ツールによるデータ型の推奨方法を参照してください。
量子化の非線形効果により、固定小数点シミュレーションでは理想的な double ベースのシミュレーションとは異なる結果が生じます。固定小数点シミュレーションの信号は double シミュレーションの信号よりも大きい範囲または小さい範囲をカバーできます。範囲が大きくなると、オーバーフローや飽和が発生する可能性があります。安全余裕によってこの可能性は低くなりますが、シミュレーション精度の低下を招く可能性もあります。
メモ
シミュレーションの最大値と最小値に設計で意図された全操作範囲が含まれる場合は、固定小数点ツールによって有意な自動データ型指定の結果を得ることができます。
Controller
サブシステムをオートスケールします。このサブシステムは、ターゲット上で実行されているソフトウェアを表し、最適化を必要とします。
固定小数点ツールで、[新規] をクリックし、
[固定小数点の反復的変換]
を選択します。ヒント
固定小数点ツールでワークフローを切り替えると、設定と、ワークフローがアクティブな間に収集されたすべてのデータがクリアされます。モデルは現在の状態のままです。
[設計対象のシステム (SUD)] で、解析および変換するサブシステムとして
Controller
Subsystem を選択します。[範囲の収集モード] で、[シミュレーション範囲] を選択します。
[シミュレーション入力] で、既定のモデル入力をシミュレーションに使用します。
[準備] をクリックします。復元ポイントが作成され、設計対象のシステムが変換のために自動的に準備されます。
[範囲の収集] ボタンの矢印をクリックして
[倍精度]
を選択します。[範囲の収集] をクリックして、シミュレーションを開始します。Simulink ソフトウェアはデータ型オーバーライド モードで
fxpdemo_feedback
モデルのシミュレーションを実行し、結果をBaselineRun_2
に格納します。[変換] セクションで、[設定] ボタンをクリックします。[シミュレーションの最小値/最大値に対する安全余裕 (%)] パラメーターを
20
に設定します。その他すべてのパラメーターについては既定の設定を使用します。[データ型を推奨] をクリックします。
固定小数点ツールは、[固定小数点ツールによる変更に対して出力データ型の設定をロックする] パラメーターがオフになっているすべての固定小数点ブロックのスケーリングを解析します。
固定小数点ツールでは、シミュレーション値の全範囲を扱いつつ精度が最大限に高められるように、
BaselineRun_2
に格納された最小値と最大値を使用して各ブロックのデータ型を推奨します。ツールの [結果] スプレッドシートには推奨されたデータ型が表示されます。固定小数点ツールが指定するスケーリングを確認します。各ブロックの推奨スケーリングを受け入れることができます。[結果] スプレッドシートで、関連する [確定] チェック ボックスを選択します。既定の設定では、固定小数点ツールは現在のスケーリングとは異なるすべての推奨スケーリングを受け入れます。この例では、実行に関連する [Accept] チェック ボックスが Controller Subsystem の各ブロックに対して選択されていることを確認します。
[データ型を適用] ボタンをクリックします。
固定小数点ツールによって、前の手順で受け入れた推奨スケーリングが
Controller
Subsystem のブロックに適用されます。[検証] セクションで、[組み込み型によるシミュレーション] ボタンをクリックします。
Simulink では、適用した新しいスケーリングを使用して
fxpdemo_feedback
モデルをシミュレートします。このシミュレーションについての情報はEmbeddedRun_2
という実行名で格納されます。その後、固定小数点ツールには、固定小数点データのログを作成したブロックに関する情報が表示されます。EmbeddedRun_2
のコンパイルされたデータ型 ([CompiledDT]) 列には、Controller Subsystem のブロックによって固定小数点データ型が新しいスケーリングと共に使用されたことが示されます。[結果の比較] をクリックしてシミュレーション データ インスペクターを開きます。
シミュレーション データ インスペクターで、比較する信号として
PlantOutput
を選択します。シミュレーション データ インスペクターは、
BaselineRun_2
およびEmbeddedRun_2
のプラント出力に関連する信号とそれらの差をプロットします。固定小数点実行によって表現されるプラント出力信号は定常状態に達しますが、A/D 設計が最適でないために小さいリミット サイクルが存在します。