このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
コマンド ラインでの単精度の C コードの生成
この例では、単精度の C コードを倍精度の MATLAB® コードからコマンド ラインで生成する方法について示します。
前提条件
この例を実行するには、次の製品をインストールします。
MATLAB
MATLAB Coder™
Fixed-Point Designer™
C コンパイラ
サポートされるコンパイラを参照してください。
mex -setup
を使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。
フォルダーの作成と関連ファイルのコピー
ローカルの作業フォルダー (例:
c:\ex_2ndOrder_filter
) を作成します。docroot\toolbox\fixpoint\examples
フォルダーに移動します。MATLAB コマンド ラインで以下のように入力します。cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
ex_2ndOrder_filter.m
およびex_2ndOrder_filter_test.m
ファイルをローカル作業フォルダーにコピーします。種類 名前 説明 関数のコード ex_2ndOrder_filter.m
MATLAB のエントリポイント関数 テスト ファイル ex_2ndOrder_filter_test.m
ex_2ndOrder_filter.m
をテストする MATLAB スクリプト
入力引数の型の決定
入力引数 x
の型を決定するには、coder.getArgTypes
を使用してテスト ファイル ex_2ndOrder_filter_test.m
を実行します。
types = coder.getArgTypes('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter');
テスト ファイルが実行され、各入力信号のフィルターの出力が表示されます。coder.getArgTypes
は x
の入力型を 1 行 256 列の double とすることを決定します。
単精度の MEX を生成して実行し、数値的動作を検証
単精度の C コードを生成する前に、生成された単精度コードの動作の検証に使用できる単精度の MEX 関数を生成します。単精度の MEX コードが必要であることを示すには、
-singleC
オプションを使用します。codegen -singleC ex_2ndOrder_filter -args types -report
MEX の生成中に、コード ジェネレーターによって単精度変換の問題が検出されます。C/C++ コードを生成する前に、この問題を解決します。この例には単精度変換の問題はありません。
生成された MEX は単精度と倍精度の入力を受け入れます。同じテスト ファイルを使用して、倍精度の MATLAB 関数と単精度の MEX 関数を実行できます。単精度の MEX 関数を呼び出すためにテスト ファイルを変更する必要はありません。
テスト ファイル
ex_2ndOrder_filter_test.m
を実行します。このファイルは倍精度の MATLAB 関数ex_2ndOrder_filter.m
を呼び出します。ex_2ndOrder_filter_test
テスト ファイルが実行され、各入力信号のフィルターの出力が表示されます。
倍精度の関数
ex_2ndOrder_filter
の呼び出しを単精度の関数ex_2ndOrder_filter_mex
の呼び出しで置き換えてテスト ファイルex_2ndOrder_filter_test
を実行します。coder.runTest('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter')
テスト ファイルが実行され、各入力信号のフィルターの出力が表示されます。単精度の MEX 関数は倍精度の MATLAB 関数と同じ結果を生成します。
単精度の C コードの生成
C のスタティック ライブラリ、ダイナミック ライブラリまたは実行可能ファイルを生成するためのコード構成オブジェクトを作成します。
cfg = coder.config('lib');
単精度の C コードを生成するには、
-singleC
オプションを使用してcodegen
を呼び出します。コード生成レポートの生成を有効にします。codegen -config cfg -singleC ex_2ndOrder_filter -args {types{1}} -report
生成された単精度の C コードの表示
C コード生成についてのコード生成レポートを表示するには、[レポートの表示] リンクをクリックします。
[生成されるコード] ペインで、ex_2ndOrder_filter.c
をクリックします。
倍精度変数は C コード内に
float
型をもちます。インデックス
i
は整数です。
潜在的なデータ型の問題の表示
単精度コードを生成する場合、codegen
を使用して潜在的なデータ型の問題をコード生成レポートで強調表示できます。codegen
で倍精度演算を削除できない場合、演算を行う MATLAB 式がレポートで強調表示されます。
[コードの洞察] タブをクリックします。[潜在的なデータ型の問題] を展開します。倍精度演算がないということは、倍精度演算が残っていないことを示します。
参考
codegen
| coder.config
| coder.getArgTypes
| coder.runTest