ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

導出範囲に基づくデータ型の推奨

この例では、指定した静的範囲に基づいて固定小数点データ型を推奨する方法を示します。派生範囲に基づいてデータ型を推奨すると、動作範囲全体にわたってアルゴリズムを実行するテスト ファイルを提供する必要がないというメリットがあります。このようなテスト ファイルは実行に非常に長い時間がかかることが多いため、代わりに派生範囲を使用すると時間を節約できます。

必要条件

この例を実行するには、次の製品をインストールしなければなりません。

  • MATLAB®

  • MATLAB Coder™

  • Fixed-Point Designer™

  • C コンパイラ

サポートされているコンパイラのリストは、「サポートされるコンパイラ」を参照してください。

C コードを生成する前に、C コンパイラを設定しなければなりません。「C コンパイラのセットアップ」を参照してください。

MathWorks® 製品のインストール方法の詳細は、MATLAB インストール ドキュメンテーションを参照してください。MATLAB がインストールされており、他にインストールされている MathWorks 製品を確認する場合は、MATLAB コマンド ウィンドウに ver と入力します。

新規フォルダーの作成と関連ファイルのコピー

  1. ローカル作業フォルダーを作成します。たとえば c:\coder\dti のようにします。

  2. docroot\toolbox\coder\examples フォルダーに変更します。MATLAB コマンド ラインで次のように入力します。

    cd(fullfile(docroot, 'toolbox', 'coder', 'examples')) 
  3. dti.m および dti_test.m ファイルをローカル作業フォルダーにコピーします。

    タイプ名前説明
    関数のコードdti.mMATLAB のエントリポイント関数
    テスト ファイルdti_test.mMATLAB スクリプト。次をテストします。 dti.m

 関数 dti

 関数 dti_test

コード生成の準備状態をチェック

現在の作業フォルダーで、関数 dti.m を右クリックします。コンテキスト メニューから [コード生成の準備状態をチェック] を選択します。

コード生成の準備状態ツールでは、コード内にコード生成でサポートされない機能や関数がないかどうかを調べることができます。このツールは関数 dti.m がコード生成に適しているかどうかをレポートします。

エントリポイント関数がコード生成に適していない場合は、このツールはサポートされない機能と関数を含むソース ファイルのリストをレポートします。また、このレポートは、MATLAB コードをコード生成に適した状態にするために必要な作業量を示します。データ型の推奨の前に、これらの問題を解決しなければなりません。詳細は、「コード生成エラーの検出とデバッグ」を参照してください。

MATLAB Coder プロジェクトの作成と設定

  1. この例のファイルを含む作業フォルダーに移動します。

  2. MATLAB の [アプリケーション] タブで [MATLAB Coder] を選択し、[MATLAB Coder プロジェクト] ダイアログ ボックスで [名前]dti.prj に設定します。

    または、MATLAB コマンド ラインに以下を入力します。

    coder -new dti.prj

    既定では、プロジェクトは MATLAB ワークスペースで開きます。

  3. プロジェクトの [概要] タブで、[ファイルの追加] リンクをクリックします。ファイル dti.m を選択し、[OK] をクリックしてファイルをプロジェクトに追加します。

入力タイプの定義

  1. プロジェクトの [概要] タブで、[タイプの自動定義] リンクをクリックします。

  2. [入力タイプの自動定義] ダイアログ ボックスで dti_test をテスト ファイルとして追加し、[実行] をクリックします。

    テスト ファイルが実行され、各入力信号のフィルターの出力が表示されます。

    MATLAB Coder はテスト ファイルから入力タイプを判断し、これらを表示します。

  3. [入力タイプの自動定義] ダイアログ ボックスで [次のタイプを使用] をクリックします。

    MATLAB Coderx のタイプを double(1x1) に設定します。

固定小数点の変換

  1. プロジェクトの [概要] タブの [固定小数点の変換] ペインで、[ビルド時に固定小数点に変換] を選択します。

    まず固定小数点データ型を定義しなければならないことがプロジェクトに示されます。

  2. [固定小数点の変換] ペインの [固定小数点型の定義と検証] をクリックします。

    [固定小数点の変換] ウィンドウが開き、エントリポイント MATLAB 関数用にインストルメント化された MEX 関数が生成されます。MEX 関数の生成後、コードに含まれる変数についてコンパイルされた情報 (データ型、サイズ、実数/複素数) が表示されます。詳細は、「変数情報の表示と変更」を参照してください。

    MEX 関数の生成が失敗した場合は、エラー メッセージのリンクが表示され、ビルドの問題の原因となったコードに移動できるようになります。固定小数点の変換に対応していない関数がコードに含まれている場合は、それらの関数が [関数の置き換え] タブに表示されます。詳細は、「シミュレーションの実行」を参照してください。

  3. [固定小数点の変換] ウィンドウの [変数] タブで、入力 u_in[静的最小値] を選択して、-1 に設定します。次に、[静的最大値]1 に設定します。

    派生範囲情報を計算するには、すべての入力変数の静的最小値および最大値を少なくとも指定しなければなりません。または、ハードウェア ターゲットによって使用されるデータ型がわかっている場合は、推奨されたデータ型をその型と一致させます。

  4. [派生した範囲を計算] ボタンをクリックします。

    範囲解析によって派生範囲が計算され、[変数] タブに表示されます。これらの派生範囲を使用して、既定の型推奨設定に基づく固定小数点型が変数ごとに推奨され、[推奨された型] 列に表示されます。[型の検証] オプションが有効になります。

    関数 dti で、出力 clip_status の最小値は -2、最大値は 2 です。

    % Compute Output
    if (u_state > limit_upper)
        y = limit_upper;
        clip_status = -2;
    elseif (u_state >= limit_upper)
        y = limit_upper;
        clip_status = -1;
    elseif (u_state < limit_lower)
    	y = limit_lower;
        clip_status = 2;
    elseif (u_state <= limit_lower)
    	y = limit_lower;
        clip_status = 1;   
    else        
        y = u_state;
        clip_status = 0;
    end
    

    範囲を派生させると、固定小数点の変換ツールによって関数が解析され、clip_status のこれらの最小値と最大値が計算されます。

    このツールでは、[派生範囲のクイック解析] オプションを選択できるほか、解析に非常に長い時間がかかる場合にタイムアウトを指定するオプションもあります。詳細は、「派生した範囲の計算」を参照してください。

  5. 推奨された型を使用してビルドを検証するには、[型の検証] をクリックします。

    推奨された型が検証されて、"検証が成功しました" というメッセージが表示され、[数値のテスト] オプションが有効になります。固定小数点データ型が検証されたことがプロジェクトに示されます。

    検証時にエラーまたは警告が発生した場合は、[型の検証の出力] タブに表示されます。詳細は、「型の検証」を参照してください。

  6. テスト ファイルを実行して固定小数点 MATLAB コードをテストします。[数値のテスト] をクリックして [比較プロット用の入力と出力を記録] を選択し、[数値のテスト] ボタンをクリックします。

    入力型を定義するために使用したテスト ファイルが実行され、固定小数点 MATLAB コードがテストされます。オプションでテスト ファイルを追加し、数値のテスト用に複数のテスト ファイルを実行することを選択できます。浮動小数点と固定小数点の両方のシミュレーションが実行され、出力変数 y および clip_status の誤差が計算されます。比較プロット用に入力と出力のログを作成するように選択しているため、スカラー出力ごとに追加的なプロットが 1 つ生成されます。

    以下に関するプロットが表示されます。

    • 浮動小数点の入力および出力信号

    • 固定小数点の入力および出力信号

    • 浮動小数点実行と固定小数点実行間の差異を示した出力 y および clip_status

    y に関する浮動小数点実行と固定小数点実行の間の最大差異は 5% 未満です。この例では、この誤差が許容可能なため、固定小数点 C コードを生成できます。

    誤差が許容可能でない場合は、固定小数点データ型または元のアルゴリズムを変更します。詳細は、「数値のテスト」を参照してください。

固定小数点 C コードの生成

  1. MATLAB Coder プロジェクトで [ビルド] タブを選択します。

  2. このタブで [出力タイプ][C/C++ スタティック ライブラリ] に設定します。

    既定の出力ファイル名は dti です。

  3. [ビルド] をクリックし、既定のプロジェクト設定を使用してライブラリを生成します。

    MATLAB Coder はプロジェクトをビルドし、C スタティック ライブラリとサポート ファイルを既定のサブフォルダー codegen/lib/dti_FixPt に生成します。

  4. 生成されたコードを表示するには、[レポートの表示] をクリックします。

    コード生成レポートが開き、dti_FixPt.c に対する生成コードが表示されます。生成された C コードでは、変数に固定小数点データ型が代入されています。

この情報は役に立ちましたか?