Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

固定小数点ツールを使用した数値的な動作の確認

この例では、固定小数点ツールを使用してモデルの浮動小数点データ型と固定小数点データ型を比較する方法を示します。範囲収集機能を使用して、さまざまな入力のモデルにおける数値的な動作を確認し、トラブルシューティングを行うことができます。

固定小数点の直接型フィルター モデルを開く

fxpdemo_direct_form2 モデルを開きます。このチュートリアルでは、Gain、Delay、Sum などの基本ブロックを使用して実装された固定小数点の直接型フィルターを使用します。モデルには矩形波入力をフィルターに供給する Signal Generator ブロックが含まれています。

モデルの設定

このチュートリアルでは、信号入力範囲のフィルターの動作について確認します。範囲収集用に複数のシミュレーション シナリオを指定するには、ベース ワークスペースまたはモデル ワークスペースで Simulink.SimulationInput オブジェクトを定義します。値の範囲に矩形波入力の振幅を指定する Simulink.SimulationInput オブジェクト simIn を定義します。

simIn(1:6) = Simulink.SimulationInput('fxpdemo_direct_form2'); 

simIn(1) = simIn(1).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','0.001');
simIn(2) = simIn(2).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','0.01');
simIn(3) = simIn(3).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','0.1');
simIn(4) = simIn(4).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','1');
simIn(5) = simIn(5).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','10');
simIn(6) = simIn(6).setBlockParameter('fxpdemo_direct_form2/Input',...
    'Amplitude','100');

信号の許容誤差を指定するには、Sum1 ブロックの出力で信号のログを有効にします。

Simulink.sdi.markSignalForStreaming('fxpdemo_direct_form2/Sum1',1,'on');

固定小数点ツールを開いて範囲を収集

  1. fxpdemo_direct_form2 モデルの [アプリ] タブで、[固定小数点ツール] を選択します。

  2. 固定小数点ツールで、[新規]、[範囲の収集] をクリックします。

  3. [設計対象のシステム (SUD)] で、fxpdemo_direct_form2 を選択します。

  4. [範囲の収集モード] で、範囲の収集方法として [シミュレーション範囲] を選択します。

  5. [シミュレーション入力] で、ベース ワークスペースで定義した Simulink.SimulationInput オブジェクトの simIn を選択します。

  6. システムの許容誤差を指定するには、[信号許容誤差] で、モデル内の信号のログが有効になっている任意の信号について、許容誤差を指定します。

    ログ記録した信号の相対誤差 ([相対許容誤差]) を 15% に設定します。

  7. [範囲の収集] で、[倍精度] を選択します。

    シミュレーションを通じて範囲を収集する場合、固定小数点ツールはモデルのデータ型を double でオーバーライドし、インストルメンテーションでモデルのシミュレーションを実行してモデルの各オブジェクトの最小値および最大値を収集します。データ型を single またはスケーリングされた double でオーバーライドするように選択したり、モデルに設定されている現在のデータ型オーバーライドを使用するように選択することもできます。

  8. [範囲の収集] ボタンをクリックします。

    Simulink® で、Simulink.SimulationInput オブジェクトで指定した入力矩形波の各振幅について 1 回ずつ、fxpdemo_direct_form2 モデルが 6 回シミュレートされます。固定小数点ツールで、固定小数点のインストルメンテーションが自動的に有効になり、モデル内のデータ型が double でオーバーライドされて浮動小数点のベースラインが収集されます。

    [ワークフロー ブラウザー] でシミュレーション シナリオを選択することで、各シミュレーションの範囲を個別に確認できます。

    [ワークフロー ブラウザー]BaselineRun ノードを選択すると、6 つのシミュレーション シナリオからマージした範囲が表示されます。

  9. [設定] をクリックし、[指定したデータ型] を選択します。

  10. [組み込み型によるシミュレーション] をクリックします。

    固定小数点ツールで、モデルで指定されている固定小数点データ型を使用して、各シミュレーション シナリオについて 1 回ずつモデルがシミュレートされます。[ワークフロー ブラウザー]EmbeddedRun ノードを選択すると、6 つのシミュレーション シナリオからマージした結果が表示されます。

    [ワークフロー ブラウザー] から、6 つのシミュレーション シナリオのうちで指定された許容誤差を満たしたのは EmbeddedRun_Scenario_4 だけだったことがわかります。オーバーフローした結果は赤で強調表示されています。

モデルの固定小数点の動作の確認

  1. さらに詳しく調査するために、固定小数点ツールの [探索] タブを選択します。[数値的問題][オーバーフロー] を選択し、[実行順序] をクリックします。

    オーバーフローした EmbeddedRun の結果のみが固定小数点ツールに表示され、ブロックの実行順序に基づいてリストが並べ替えられます。この例では、Gain4 ブロックで最初のオーバーフローが発生しています。

    [結果] スプレッドシートで任意の行をダブルクリックすると、モデルでそのブロックを強調表示できます。

  2. シミュレーション データ インスペクターを使用して、特定のシミュレーション シナリオについて、モデルの固定小数点と浮動小数点の動作を比較できます。たとえば、固定小数点ツールでは、EmbeddedRun_Scenario_3 が指定された許容誤差を満たさなかったことが示されています。この組み込み型実行を対応するシミュレーション シナリオの浮動小数点の動作と比較するには、EmbeddedRun_Scenario_3 を右クリックして [SDI を開く] を選択し、BaselineRun_Scenario_3 と比較します。

    シミュレーション データ インスペクターで、BaselineRun_Scenario_3EmbeddedRun_Scenario_3Sum1 ブロックの出力に関連付けられているログ信号、およびそれらの差とこの信号に指定されている許容誤差がプロットされます。

参考

| |