Main Content

Simulink モデルからの C コードの生成

Simulink® Coder™ は、幅広いアプリケーションでの展開用に、Simulink モデルからスタンドアロンの C および C++ コードを生成します。Simulink Coder によりサポートされている DSP System Toolbox™ の機能の一覧については、Blocks Supported for C Code Generation を参照してください。

この例では、ex_codegen_dsp モデルから C コードを生成し、生成されたコードから実行可能ファイルをビルドします。実行可能ファイルは MATLAB® 環境内で実行できます。また、コードをパッケージ化して、MATLAB 製品および Simulink 製品がインストールされていない他の開発環境に移動することもできます。

モデルを開く

ex_codegen_dsp モデルは、ノイズの周波数成分を特徴付けるフィルターを同時に識別しながら、信号からノイズを除去するためのシンプルな適応フィルターを実装します。このモデルを開くには、MATLAB コマンド プロンプトで次のコマンドを入力します。

open_system('ex_codegen_dsp')

Snapshot of model diagram. There are two input blocks, Sine Wave block and the Random Source block. The output of the Sine Wave block is fed as the first input to the Time Scope block. The output of the Random Source block is fed to the Input signal port of the Normalized LMS Filter block. The same output is also lowpass filtered using a Lowpass Filter block. This lowpass filtered output is fed to the desired signal port of the LMS Filter block. The noisy lowpass filtered signal is added to the output of the Sine Wave and is fed to the second input port of the Time Scope block. The output of the Normalized LMS block subtracts from the noisy Sine Wave Signal and feeds the third input of the Time Scope block. The Error signal of the Normalized LMS block feeds the fourth input of the Time Scope block. The Weights computed by the LMS Filter block feed to the Array Plot block and stored to the workspace as the "filter_wts" parameter.

または、[DSP System] テンプレートを使用してモデルを作成することもできます。詳細については、信号処理モデル向け Simulink 環境の構成を参照してください。

コード生成用のモデルの構成

[コンフィギュレーション パラメーター] ダイアログ ボックスでコード生成設定を指定して、コード生成用のモデルを準備します。適切なソルバーとコード生成ターゲットを選択し、モデル コンフィギュレーションの実行効率性を確認します。これらの各手順の詳細については、モデル用 C コードの生成 (Simulink Coder)を参照してください。

モデルのシミュレート

モデルをシミュレートします。Time Scope には、入力信号とフィルター処理された信号の特性が表示されます。

Output of the Time Scope block. The first signal is the original sinusoidal signal. The second signal is the sinusoidal signal with low frequency noise. The third signal is the approximation of the input signal. The fourth signal is the error signal generated by the Normalized LMS filter block.

Array Plot には、LMS フィルターが効果的に適応されて信号からノイズを除去された最後の 32 個のフィルターの重みが表示されます。

The y-axis is labelled as Filter Weights and ranges from -0.2 to 0.6, x-axis is labelled as Number of Weights and ranges from 0 to 32.

これらの係数には、次のコマンドを使用してアクセスすることもできます。

filter_wts(:,:,1201)

モデルからのコードの生成

モデルからコードを生成する前に、まず現在のフォルダーへの書き込み権限があることを確認しなければなりません。

コードを生成するには、以下の変更を加えなければなりません。

  1. モデルのツールストリップの [モデル化] タブで [モデル設定] をクリックします。[Configuration Parameters] ダイアログ ボックスが開きます。[コード生成] タブに移動して、[コード生成のみ] パラメーターを選択し、[適用] をクリックします。

  2. モデルのツールストリップの [アプリ] タブで、ドロップダウン矢印をクリックします。[コード生成][Simulink Coder] をクリックします。モデル ウィンドウに [C コード] タブが表示されます。[C コード] タブで [コード生成] アイコン () をクリックします。

モデルがコードの生成を終了すると、[コード生成レポート] が表示され、生成コードを検査できます。ビルド プロセスにより、現在の MATLAB 作業フォルダーに ex_codegen_dsp_grt_rtw という名前の新しいサブフォルダーが作成されることに注目してください。このサブフォルダーには、生成された C ソース コードを含むファイルを含めて、コード生成プロセスによって作成されたすべてのファイルが含まれています。生成コードの表示の詳細については、モデル用 C コードの生成 (Simulink Coder)を参照してください。

生成コードのビルドと実行

C/C++ コンパイラの設定

実行可能ファイルをビルドするには、サポートされている C コンパイラを設定しなければなりません。現在のリリースでサポートされているコンパイラの一覧については、Supported and Compatible Compilers を参照してください。

コンパイラを設定するには、MATLAB コマンド プロンプトで次のコマンドを実行します。

mex –setup

生成されたコードのビルド

コンパイラを設定したら、コンパイル済みコードをビルドおよび実行できます。現在、ex_codegen_dsp モデルはコードのみを生成するように設定されています。生成されたコードをビルドするには、まず以下の変更を加えなければなりません。

  1. モデルのツールストリップの [モデル化] タブで [モデル設定] をクリックします。[Configuration Parameters] ダイアログ ボックスが開きます。[コード生成] タブに移動して、[コード生成のみ] パラメーターをクリアし、[適用] をクリックします。

  2. モデルのツールストリップの [C コード] タブで、[ビルド] アイコン () をクリックします。

コード ジェネレーターが実行可能ファイルをビルドし、[コード生成レポート] を生成します。コード ジェネレーターは実行可能ファイルを作業フォルダーに配置します。Windows では、実行可能ファイルは ex_codegen_dsp.exe です。Linux では、実行可能ファイルは ex_codegen_dsp です。

生成されたコードの実行

生成されたコードを実行するには、MATLAB コマンド プロンプトで次のコマンドを入力します。

!ex_codegen_dsp

生成コードを実行すると、モデルのシミュレーションによって生成された変数と同じ変数を含む MAT ファイルが作成されます。MAT ファイル内の変数には、rt_ という接頭辞をもつ名前が付きます。生成されたコードを実行した後は、MATLAB プロンプトで次のコマンドを入力して、MAT ファイルから変数を読み込むことができます。

load ex_codegen_dsp.mat

これで、生成コードの変数とモデル シミュレーションの変数を比較できるようになりました。生成コードからの最後の一連の係数にアクセスするには、MATLAB プロンプトで次のように入力します。

rt_filter_wts(:,:,1201)

filter_wts(:,:,1201)rt_filter_wts(:,:,1201) の係数が一致していることに注目してください。

実行可能ファイルのビルドと実行の詳細については、モデル用 C コードの生成 (Simulink Coder)を参照してください。

他の開発環境へのコードの移動

Simulink モデルからコードを生成したら、Pack-and-Go ユーティリティを使用して他の開発環境にコードを移動できます。開発環境に MATLAB 製品および Simulink 製品がない場合は、このユーティリティを使用します。

Pack-and-Go ユーティリティは、コード生成後のビルド プロセスをカスタマイズするためのツールと、実行可能ファイル イメージをビルドするためにファイルを検出してパッケージ化するための関数 packNGo (Simulink Coder) を使用します。ファイルは圧縮ファイルにパッケージ化され、標準の zip ユーティリティを使用して移動および解凍できます。

ユーザー インターフェイスまたはコマンド ライン インターフェイスを使用してコードをパッケージ化できます。コマンド ライン インターフェイスでは、コードのパッケージ化の詳細をより細かく制御できます。これらの各方法の詳細については、生成コードの移動または共有 (Simulink Coder)を参照してください。

この例から生成された C コードと実行可能ファイルをパッケージ化する方法の例については、Relocate Code Generated from a Simulink Model to Another Development Environmentを参照してください。

関連するトピック

外部の Web サイト