このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
浮動小数点モデルから固定小数点モデルへの変換
この例では、以下の方法について説明します。
浮動小数点システムを同等の固定小数点表現に変換する。
固定小数点ツールによりシステム内の固定小数点データ型を指定するタスクが自動化されます。この例では、モデル オブジェクトの範囲データを、信号とパラメーター用に明示的に指定する設計の最小値と最大値、またはシミュレーション中に発生するログ最小値と最大値から収集します。これらの値に基づいて、ツールでは精度を最大化し範囲をカバーする固定小数点データ型を推奨します。ツールを使用すると、推奨されたデータ型を確認してから、モデル内のオブジェクトに選択的に適用することができます。
変換でサポートされないブロックをルックアップ テーブル近似で置き換えます。
変換の準備段階中に、固定小数点ツールは、固定小数点変換をサポートしないブロックを、Data Type Conversion ブロックで囲まれたサブシステム内に配置して分離します。ルックアップ テーブル オプティマイザーを使用して、サポートされないブロックをルックアップ テーブル近似で置き換えることができます。
これらの手順を視覚的に確認するには、ビデオをご覧ください。
モデルの設定
モデルを開き、固定小数点変換向けに設定します。
open_system('ex_fixed_point_workflow')
モデルは Source、固定小数点に変換する Controller Subsystem、およびサブシステム出力を可視化する Scope で構成されています。この方法でモデルを構成すると、システムに与える固定小数点データ型の影響を判定する場合に役立ちます。この方法を使用する場合は、サブシステムが対象のシステムであるため、サブシステムのみを変換します。Source または Scope を固定小数点に変換する必要はありません。
このように設定すると、入力を変更し複数のスティミュラスのシミュレーション データを収集できます。異なる入力範囲を使用してサブシステムの動作を調べ、固定小数点データ型をスケーリングすると、シミュレーション範囲全体に適応しながら最高精度を与えられます。
変換前と変換後とで動作を比較するには、設計対象のシステムの出力で信号のログを有効にします。
ph = get_param('ex_fixed_point_workflow/Controller Subsystem','PortHandles'); set_param(ph.Outport(1),'DataLogging','on') set_param(ph.Outport(2),'DataLogging','on')
変換するシステムの準備
モデルを固定小数点に変換するには、固定小数点ツールを使用します。
ex_fixed_point_workflow
モデルの [アプリ] ギャラリーで、[固定小数点ツール] を選択します。固定小数点ツールの [新規] ワークフローで、
[固定小数点の反復的変換]
を選択します。[設計対象のシステム (SUD)] で、固定小数点に変換するサブシステムを選択します。この例では、
[Controller Subsystem]
を選択します。[範囲の収集モード] で、範囲の収集方法として [シミュレーション範囲] を選択します。
[シミュレーション入力] に
Simulink.SimulationInput
オブジェクトを指定すると、その動作範囲全体にわたって設計を実行できます。この例では、[シミュレーション入力] を[既定のモデル入力を使用]
に設定します。システムの許容誤差を指定するには、テーブルの [信号許容誤差] で、モデル内の信号のログが有効になっている任意の信号について、許容誤差を指定します。詳細については、信号の許容誤差の指定を参照してください。
ログ記録した信号の相対誤差 ([相対許容誤差]) を 15% に設定します。
ツールストリップで [準備] をクリックします。固定小数点ツールは設計対象のシステムについて変換プロセスとの互換性をチェックし、モデルで見つかった問題をレポートします。可能な場合は、固定小数点ツールは互換性のない設定を自動的に変更します。詳細については、固定小数点ツールを使用した変換するシステムの準備を参照してください。
設計対象のサブシステムには Exp ブロックが含まれており、これは固定小数点データ型をサポートしていません。固定小数点ツールはこのブロックを Data Type Conversion ブロックで囲み、サブシステム内に配置します。サブシステムの残りの部分を固定小数点に変換するとき、このサブシステムを、関数
exp
のルックアップ テーブル近似で置き換えることができます。
範囲の収集
既定では、固定小数点ツールは、モデルに設定されている現在のデータ型オーバーライドを使用します。この例では、範囲収集実行時に、モデル内のデータ型を精度にオーバーライドします。
[範囲の収集] ボタンの矢印を展開して [倍精度] を選択します。
[範囲の収集] をクリックしてモデルをシミュレーションします。
BaselineRun
というタイトルの実行にこの範囲情報を保存します。収集された範囲はスプレッドシートの [SimMin] 列と [SimMax] 列、または [結果の詳細] ペインで確認できます。[シミュレーション データの可視化] ペインには、シミュレーション結果の別のビューも用意されています。固定小数点ツールの [探索] タブを選択して、スプレッドシートおよび可視化のデータの並べ替えやフィルターを行います。
データ型の変換
固定小数点ツールを使用し、実行 BaselineRun
に保存されている、倍精度のシミュレーション結果に基づいて適切に構成されたブロックに対する固定小数点データ型を推奨します。
ツールストリップの [変換] セクションで、[データ型の推奨] ボタンをクリックします。
固定小数点ツールは、[固定小数点ツールによる変更に対して出力データ型の設定をロックする] パラメーターが選択されていないすべての固定小数点ブロックのスケーリングを解析します。
固定小数点ツールは既定の推奨設定を使用して、語長が 16 ビットで小数部の長さが最良精度のデータ型を推奨し、スプレッドシートで結果を更新します。
ツールストリップの [変換] セクションで [設定] ボタンをクリックし、型を推奨する前に推奨設定を編集できます。
ツールでは、スプレッドシートの [ProposedDT] 列に推奨データ型が表示されます。
既定の設定では、推奨されるデータ型がオブジェクトの現在のデータ型と異なる各結果について [確定] チェック ボックスが選択されます。データ型を適用すると、ツールによってそれらの推奨データ型が設計対象のシステムに適用されます。
結果から問題が見つかった場合は解決し、各結果に対して推奨されたデータ型を受け入れるようにしてください。[シミュレーション データの可視化] ペインは、結果にオーバーフローまたはアンダーフローが含まれることを赤または黄色の三角形でそれぞれ示します。アンダーフローは数値的問題の原因となる可能性がありますが、無視しても安全な場合もあります。
固定小数点ツールは、推奨されたデータ型が別の型と競合する結果の場合、赤のアイコン で示します。この例では、競合のある結果はありません。詳細は、結果を調査して競合を解決を参照してください。
結果を調べ、問題がないことを確認したことで、推奨データ型をモデルに適用する準備ができました。[データ型を適用] をクリックし、推奨されたデータ型をモデルに書き込みます。
固定小数点ツールにより、設計対象のシステム内のブロックに推奨データ型が適用されます。
新しい設定の確認
次に、新しい固定小数点の設定を使用してモデルを再度シミュレートします。シミュレーション データ インスペクターのプロット機能を使用して、浮動小数点 BaselineRun
の実行結果を固定小数点の結果と比較します。
[組み込み型によるシミュレーション] をクリックします。固定小数点ツールは新しい固定小数点データ型を使用してモデルのシミュレーションを実行し、実行情報を
EmbeddedRun
というタイトルの新しい実行に保存します。その後、固定小数点ツールには、固定小数点データのログを作成したブロックに関する情報が表示されます。実行の [CompiledDT] 列には、Controller Subsystem の各ブロックで新しい固定小数点データ型が使用されることが示されます。
[シミュレーション データの可視化] ペインのヒストグラムを確認することで、オーバーフローまたは飽和がないことを検証します。オーバーフローと飽和には赤い三角形 が付いています。
ワークフロー ブラウザーには、許容誤差を指定したすべての信号がパスしたことが示されます。
[結果の比較] をクリックしてシミュレーション データ インスペクターを開きます。シミュレーション データ インスペクターで、ログ記録された信号の 1 つを選択して、固定小数点シミュレーションの動作を表示します。
サポートされていないブロックのルックアップ テーブル近似による置換
ワークフローの変換するシステムの準備の手順で、固定小数点ツールは、変換でサポートされていない Exp ブロックを Data Type Conversion ブロックで囲まれたサブシステム内に配置しました。この手順で、このサブシステムをルックアップ テーブル近似で置き換えます。
固定小数点ツールが変換のため分離したすべてのサブシステムのリストを取得するには、コマンド ラインで次のように入力します。
decoupled = DataTypeWorkflow.findDecoupledSubsystems('ex_fixed_point_workflow')
decoupled = 1×2 table ID BlockPath __ ____________________________________________________ 1 {'ex_fixed_point_workflow/Controller Subsystem/Exp'}
関数
DataTypeWorkflow.findDecoupledSubsystems
は、サポートされていないブロックを分離するために固定小数点ツールによって作成されたサブシステムすべてのブロック パスを含むテーブルを返します。ルックアップ テーブル オプティマイザーを開きます。[アプリ] ギャラリーで [ルックアップ テーブル オプティマイザー] を選択します。
ルックアップ テーブル オプティマイザーの [オブジェクティブ] ページで、[Simulink ブロックまたはサブシステム] を選択します。[次へ] をクリックします。
[ブロック情報] に、固定小数点ツールによって作成されたサブシステムへのパスをコマンド ラインからコピーしペーストします。
[モデルから現在の値を収集] ボタンをクリックすると、モデルのブロック線図が更新され、ルックアップ テーブル オプティマイザーが最適化のプロセスに必要な情報を自動的に収集できます。[次へ] をクリックします。
最適化で使用する制約を指定します。この例では、既定値を使用します。ルックアップ テーブルを作成するには、[最適化] をクリックします。[次へ] をクリックします。
[元の関数を置き換える] をクリックします。ルックアップ テーブル オプティマイザーは、Math Function
exp
ブロックを、ルックアップ テーブルの近似を含む新しいバリアント サブシステムに置き換えます。
ルックアップ テーブル近似によるシステムの動作の検証
設計対象のシステムが完全に変換されたところで、このシステムが、変換前に指定した許容誤差を依然として満たしていることを検証します。
固定小数点ツールのツールストリップの [検証] セクションで、[組み込み型によるシミュレーション] をクリックします。
固定小数点ツールは、ルックアップ テーブル近似を含むようになったモデルのシミュレーションを行い、結果を
EmbeddedRun_2
として保存します。[ワークフロー ブラウザー] には、指定された許容誤差をもつ信号が、ルックアップ テーブル近似を使用しているモデルでパスしていることが表示されます。