主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

固定小数点の自動変換

固定小数点への自動変換機能

浮動小数点のMATLAB®コードを固定小数点コードに変換するには,MATLAB编码器™アプリを使用するか,コマンドラインで関数codegen-float2fixedオプションを使用します。シミュレーション範囲データまたは派生(スタティックとも呼ばれる)範囲データのいずれかまたは両方に基づいてデータ型を推奨するよう選択できます。

静的範囲を手動で入力できます。手動で入力された範囲はシミュレーション範囲より優先され,アプリはデータ型を推奨する際にこれらの範囲を使用します。さらに,アプリによって変更されないように推奨型を変更してロックすることができます。詳細は,推奨されたデータ型のロックを参照してください。

サポートされているMATLABの機能と関数のリストは,固定小数点の自動変換でサポートされるMATLAB言語機能(定点设计器)を参照してください。

固定小数点の変換では,以下を実行できます。

  • コードカバレッジの結果により,テストファイルが目的のアルゴリズムの動作範囲のすべてに対応していることを確認。

  • 既定の語長に基づいた小数部の長さの推奨。

  • 既定の小数部の長さに基づいた語長の推奨。

  • 0または正の整数の最適化。

  • シミュレーションの最小値/最大値データに対する安全余裕の指定。

  • 推奨されたデータ型でプロジェクトをビルドできるかどうかの検証。

  • 固定小数点型を適用してテストファイルを実行し,数値をテスト。

  • 各変数で使用されるビットのヒストグラムの表示。

  • オーバーフローの検出。

コードカバレッジ

既定では,アプリはコードカバレッジ結果を表示します。テストファイルは、シミュレーション範囲が正確になるよう、動作範囲全体に対してアルゴリズムを実行しなければなりません。推奨される固定小数点データ型の性質は、テスト ファイルが適切な精度でアルゴリズムの動作範囲をどの程度カバーしているかによって決まります。

コードカバレッジの結果を確認すると,テストファイルがアルゴリズムを適切に実行しているか検証できます。コードカバレッジが適切でない場合、テスト ファイルを変更するか、テスト ファイルを追加してカバレッジを大きくします。1 回の実行で複数のテスト ファイルをシミュレートすると、累積カバレッジが表示されます。一方、複数のテスト ファイルを指定して 1 つずつ実行すると、最後に実行したファイルのカバレッジが表示されます。

コードの左側に色分けされたカバレッジ バーが表示されます。

次の表では色分けを説明します。

カバレッジバーの色 意味

以下のいずれかに該当します。

  • エントリポイント関数が複数回実行され、コードが 1.回を超えて実行される。

  • エントリポイント関数が 1.回実行され、コードが 1.回実行される。

さまざまな緑の色調は,行の実行回数の各範囲を示しています。最も濃い緑の色調は,最大の範囲を示しています。

オレンジ エントリポイント関数が複数回実行され,コードが1回実行される。
コードが実行されない。

カバレッジバーの上にカーソルを置くと,色の強調表示がコード上に拡大されます。コードの各セクションにそのセクションの実行回数が表示されます。

テストファイルが目的の動作範囲全体でアルゴリズムをテストしていることを検証するには,コードカバレッジの結果を確認します。

カバレッジバーの色 作業
コードのセクションがカバレッジの表示よりも頻繁に実行されることを想定する場合,MATLABコードまたはテストファイルを変更します。
オレンジ これは初期化コード(永続変数の初期化など)の想定された動作です。コードが1回を超えて実行されることを想定する場合,MATLABコードまたはテストファイルを変更します。
レッド 実行されないコードがエラー条件である場合,これは許容できる動作です。コードが実行されることを想定する場合,MATLABコードまたはテストファイルを変更します。コードが保守的に作成されていて上限と下限があり,テストファイルを変更してもこのコードにアクセスできない場合は,静的最小値と静的最大値を追加します。派生範囲の計算を参照してください。

既定の設定では,コードカバレッジはオンです。テストファイルのカバレッジが適切であると確認できた場合のみオフにしてください。コード カバレッジをオフにするとシミュレーションの速度が向上します。コード カバレッジをオフにするには、[固定小数点に変換]ページで,次の操作を実行します。

  1. [解析]矢印をクリックします。

  2. [コードカバレッジを表示)チェックボックスをオフにします。

データ型の推奨

アプリは、計算された範囲と、語長または小数部の長さの設定に基づいて固定小数点データ型を推奨します。範囲はシミュレーション範囲データと派生範囲データ (静的範囲とも呼ばれる) のいずれかまたは両方に基づいて計算されます。シミュレーションを実行して派生範囲を計算した場合、アプリはシミュレーション範囲と派生範囲をマージします。

メモ

MATLABクラスには,派生範囲に基づいてデータ型を推奨することはできません。

派生範囲の解析は非スカラー変数ではサポートされていません。

静的範囲を手動で入力できます。手動で入力された範囲はシミュレーション範囲より優先され,アプリはデータ型を推奨する際にこれらの範囲を使用します。推奨された型を変更し,ツールによって変更されないようにロックすることもできます。詳細は,推奨されたデータ型のロックを参照してください。

シミュレーションの実行

固定小数点の変換中,エントリポイントMATLABファイル用にインストルメント化された墨西哥人関数がアプリによって生成されます。エラーが発生せずにビルドが完了すると,アプリによりコード内の関数と変数のコンパイルされた情報(型,サイズおよび実数/複素数)が表示されます。ローカル関数に移動するには,[関数]タブをクリックします。ビルドエラーが発生すると,ビルドの問題が発生したコード行へのリンクを示すエラーメッセージが表示されます。シミュレーションを実行する前にこれらのエラーに対処しなければなりません。MATLABエディターでリンクを使用して問題のコード行に移動し、コードを変更して問題を修正します。固定小数点変換でサポートされない関数がコードに使用されている場合、それらが[関数の置き換え]タブに表示されます。関数の置換を参照してください。

シミュレーションを実行する前に,実行するテストファイル(複数可)を指定します。シミュレーションを実行すると,アプリはテストファイルを実行し,インストルメント化された墨西哥人関数を呼び出します。MATLABの設計コードを変更した場合,アプリはテストファイルを実行する前に更新された墨西哥人関数を自動的に生成します。

テストファイルが正常に実行された場合,シミュレーションの最小値と最大値および推奨された型が[変数]タブに表示されます。手動で変数の静的範囲を入力する場合,手動で入力した範囲がシミュレーション範囲より優先されます。推奨された型を手動で入力するかヒストグラムを使用して変更すると,アプリによって変更されないようにデータ型がロックされます。

テストファイルが正常に実行されなかった場合,エラーが[出力]タブに表示されます。

テストファイルによってアルゴリズムが動作範囲全体にわたって実行されなければなりません。推奨される固定小数点データ型の品質は,テストファイルが適切な精度でアルゴリズムの動作範囲をどの程度カバーしているかによって決まります。テストファイルを追加して,シミュレーション中に1つを超えるテストファイルを選択して実行できます。複数のテストファイルを実行する場合,シミュレーションの結果はアプリによってマージされます。

オプションで,ヒストグラムのデータを記録するよう選択できます。シミュレーションの実行後,各変数のヒストグラムを表示できます。詳細は,ヒストグラムのデータの記録を参照してください。

派生範囲の計算

派生範囲に基づいてデータ型を推奨すると,動作範囲全体にわたってアルゴリズムを実行するテストファイルを提供する必要がないというメリットがあります。一般に,このようなテストファイルの実行には時間がかかります。アプリでは,スカラー変数のみについて派生範囲を計算できます。

派生範囲を計算し,これらの範囲に基づいてデータ型を推奨するには,すべての入力変数に対して,静的最小値と最大値または推奨データ型を指定します。解析結果を向上させるために,他の変数にはできるだけ多くの静的範囲情報を入力してください。範囲を手動で入力するか,シミュレーション範囲をプロモートして静的範囲として使用できます。手動で入力した静的範囲は常にシミュレーション範囲より優先されます。

ハードウェアターゲットの使用するデータ型が既知の場合,この型と一致するように推奨されるデータ型を設定します。手動で入力されたデータ型は,アプリで変更されないようにロックされます。アプリはこれらのデータ型を使用して入力の最小値と最大値を計算し、他の変数の範囲を派生させます。詳細は、推奨されたデータ型のロックを参照してください。

(派生範囲の計算)を選択した場合,アプリは派生範囲の解析を実行してMATLABアルゴリズムの変数の静的範囲を計算します。解析が完了すると,[変数]タブに静的範囲が表示されます。実行により,派生範囲として+/-Infが作成された場合は,すべての永続変数の範囲を定義することを検討してください。

オプションで,(派生範囲のクイック解析]を選択できます。このオプションを使用すると,アプリはより高速に静的解析を実行します。計算された範囲は必要以上に大きい場合があります。このオプションは,静的解析に時間がかかりすぎる場合に選択してください。

プロジェクトの派生範囲の解析に時間がかかっている場合は、オプションでタイムアウトを設定できます。タイムアウト時間に到達するとアプリは解析を中止します。

推奨されたデータ型のロック

推奨されたデータ型をロックすることで,アプリによる変更を防げます。次のいずれかの方法で行います。

  • アプリで、推奨データ型を手動で設定。

  • ツールによって推奨された型を右クリックして[計算値をロック]を選択。

ロックされたデータ型は識別しやすいように太字で表示されます。以下のいずれかの方法で型のロックを解除できます。

  • 手動で上書き。

  • 右クリックして[変更を元に戻す]を選択。この場合,選択された型のみロックが解除されます。

  • 右クリックして[すべての変数の変更を元に戻す]を選択。これにより,ロックされているすべての推奨されたデータ型のロックが解除されます。

関数の表示

固定小数点変換プロセスの[固定小数点に変換]のステップでは,プロジェクトの関数のリストを左ペインで表示できます。このリストには関数の特殊化とクラスメソッドも含まれます。リストから関数を選択すると,その関数またはクラスメソッドのMATLABコードがコードウィンドウに表示され,使用する変数が[変数]タブに表示されます。

変換後、左側のペインに、元のアルゴリズムの固定小数点バージョンを含む出力ファイルのリストも表示されます。関数が特殊化されていない場合、変換後の固定小数点のファイル名は、元の関数名に固定小数点を示す接尾辞を付けたものになります。たとえば、ex_2ndOrder_filter.mの固定小数点バージョンはex_2ndOrder_filter_fixpt.mです。

クラス

アプリでは,クラスとそのメソッドのそれぞれについての情報が表示されます。たとえば,静的メソッドMAX_VALUEとメソッド下一个をもつクラス计数器を考えます。

クラスを選択する場合,[変数]タブにクラスとそのプロパティがアプリによって表示されます。

メソッドを選択する場合,メソッドによって使用される変数のみがアプリによって表示されます。

特殊化

関数が特殊化されている場合,アプリは特殊化をそれぞれリストし,順番に番号を付けます。たとえば,サブ関数喷火および酒吧を異なる入力の型を使用して複数回呼び出す関数dutを考えます。

函数Y = dut(u, v) tt1 = foo(u);Tt2 = foo([u v]);tt3 = foo(复杂(u, v));魔法石,第1章= bar (u);Ss2 = barslast ([u v]);ss3 =酒吧(复杂(u, v));Y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3);结束函数y=foo(u)y=u*2;结束函数Y = bar(u) Y = u * 4;结束

最上位の関数を選択する場合,アプリは[変数]タブにすべての変数を表示します。

ツリー ビューを選択する場合、アプリは各特殊化への呼び出しの行番号も表示します。

特殊化の1つを選択すると,その特殊化が使用する変数だけが表示されます。

生成された固定小数点コードでは,固定小数点の各特殊化の番号が[ソースコード]リストにある番号に一致しているので,コードの浮動小数点バージョンと固定小数点バージョンを簡単に比較できます。たとえば,foo > 1に対して生成される固定小数点関数にはfoo_s1という名前が付きます。

変数の表示

[変数]タブには[ナビゲーション]ペインで選択した関数の各変数に関する以下の情報が表示されます。

  • [型]——MATLABアルゴリズムで使用される変数の元のデータ型。

  • [シミュレーションの最小値)[シミュレーションの最大値]——シミュレーション中に変数に代入される最小値と最大値。

    シミュレーションの最小値と最大値は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが,その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。

  • [静的最小値][静的最大値]——静的最小値と最大値。

    派生範囲を計算し,これらに基づいてデータ型を推奨するには,すべての入力変数に静的最小値および最大値を指定します。解析結果を向上させるために,他の変数にはできるだけ多くの静的範囲情報を入力してください。

    派生範囲の計算時,アプリは静的解析を実行してコード内の変数の静的範囲を計算します。解析が完了すると静的範囲が表示されます。計算結果は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが,その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。

  • [0または正の整数)——シミュレーション中に変数に代入される値がすべて整数かどうか。

    アプリは変数が常に0または正の整数であるかどうかを判定します。このフィールドは変更できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが,その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。

  • 指定された語長(または小数部の長さ)の推奨された固定小数点データ型。推奨されたデータ型では数字类型表記が使用されます。たとえば,numerictype(12) 1, 16日は語長が16で小数部の長さが12の符号付き固定小数点型を表します。数字类型(0,16,12)は語長が 16で小数部の長さが 12の符号なし固定小数点型を表します。

    アプリはデータ型を式に適用しないので,式に対する推奨型は表示されません。代わりに,元のデータ型が表示されます。

コードペインでカーソルを変数名に移動させて,変数の情報を表示および編集することもできます。

Ctrl + Fキーを使用してMATLABコード内および[変数]タブ上で変数を検索できます。アプリによってコード内の出現場所が強調表示され、[変数]タブ上に指定された名称で変数のみが表示されます。

MATLABクラスの情報の表示

アプリによって以下が表示されます。

  • MATLABクラスのコードおよびクラスメソッドのコードカバレッジ(コードウィンドウ内)。[固定小数点に変換]ページの[ソースコード]リストを使用して表示するクラスまたはクラスメソッドを選択します。クラスメソッドを選択する場合、アプリはコード ウィンドウでメソッドを強調表示します。

  • MATLABクラスについての情報 ([変数]タブ内)。

ヒストグラムのデータの記録

ヒストグラムのデータを記録するには,次の手順に従います。

  • [固定小数点に変換]ページで[解析]矢印をクリックします。

  • [ヒストグラムデータを記録]を選択します。

  • [範囲の解析]をクリックします。

シミュレーションの終了後に変数のヒストグラムを表示するには、[変数]タブで,その変数の(推奨された型)フィールドをクリックします。

ヒストグラムは,推奨されるデータ型および推奨されるデータ型がカバーするシミュレーション値の割合を示します。ビットの重みがX軸出現割合がY軸に沿って表示されます。ヒストグラムの各ビンはバイナリワード中のビットに対応しています。たとえば,このヒストグラムではnumerictype(14) 1日16日型の変数の範囲を表示します。

以下の操作により,推奨されるデータ型の変更による影響を表示することもできます。

  • ヒストグラムウィンドウ内で境界ボックスの端をドラッグして,推奨されるデータ型を変更。

  • [符号付き]を選択または選択解除。

自動変換によって推奨された型に戻すためには、ヒストグラム ウィンドウ内でをクリックします。

関数の置換

MATLABコードで固定小数点に対応していない関数を使用している場合,これらの関数が[関数の置き換え]タブに一覧表示されます。サポートされていない関数を、カスタム関数とルックアップ テーブルのどちらに置き換えるかを指定できます。

このリストから関数の置換を追加したり削除したりできます。関数に対して関数の置換を入力すると、プロジェクトの作成時に置換関数が使用されます。置換を入力しない場合、関数には元の MATLAB コード内で指定された型が使用されます。

メモ

このテーブルを使用して関数名を置換することが可能ですが、引数パターンを置換することはできません。

コード生成の準備状態のスクリーニングが無効になっている場合,[関数の置き換え]タブでサポートされていない関数が不完全または正しくならない場合があります。この場合,手動で関数を追加します。MATLAB编码器アプリでのコード生成の準備状態のスクリーニングを参照してください。

型の検証

コードを固定小数点に変換すると,推奨される固定小数点データ型を使用してビルドが検証されます。検証に合格すると,固定小数点型MATLABアルゴリズムの数値的な動作のテストの準備が整います。

検証時にエラーまたは警告が発生した場合は,[出力]タブに表示されます。エラーまたは警告が発生した場合,以下を行ってください。

  • [変数]タブで、推奨される型および手作業で修正した型を確認し、それらが有効であることを検証します。

  • [関数の置き換え]タブで,サポートされていない関数に対して関数の置換を行ったことを確認します。

数値のテスト

固定小数点へのコードの変換と推奨される固定小数点データ型の検証の後,[テスト]をクリックし,固定小数点MATLABアルゴリズムの動作を検証します。既定では,テストファイルを追加して入力を定義した場合またはシミュレーションを実行した場合は,アプリはこのテストファイルを使用して数値をテストします。オプションで,テストファイルを追加し,1つを超えるテストファイルを選択して実行することもできます。アプリは生成された固定小数点MATLABコードを元の浮動小数点MATLABコードの数値的な動作と比較します。比較プロットの入力と出力を記録するように選択した場合は,アプリは各スカラー出力の追加プロットを生成します。このプロットは浮動小数点と固定小数点の結果およびこれらの差を示します。非スカラー出力についてはエラー情報のみを示します。

固定小数点シミュレーション後に数値的な結果が所要の精度を満たさない場合は,固定小数点データ型の設定を修正し,型の検証と数値的なテストの手順を繰り返します。必要な結果を得るには,これらのステップを複数回繰り返す必要がある場合があります。

オーバーフローの検出

数値のテストを行う場合,[スケーリングされた双を使用してオーバーフローを検出)を選択するとオーバーフローの検出が有効になります。このオプションが選択されている場合,変換アプリは推奨された固定小数点型のスケーリングされた双バージョンを使用してシミュレーションを実行します。スケーリングされた双は,倍精度浮動小数点のデータを格納するため,演算を全範囲で実行します。また,固定小数点設定も維持されるため,計算が固定小数点型の範囲から外れた場合にレポートすることが可能です。

アプリによってオーバーフローが検出された場合,[オーバーフロー]タブに次が表示されます。

  • オーバーフローした変数と式のリスト

  • 各変数のオーバーフローの量に関する情報

  • コードウィンドウ内の変数または式へのリンク

元のアルゴリズムがスケーリングされた双を使用している場合,それらの式のオーバーフロー情報もアプリによって提供されます。

参考

オーバーフローの検出