このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
スタンドアロン実行可能ファイルの生成と UDP を使用した通信
この例では、MATLAB® Coder™ を使用してストリーミング統計用のスタンドアロン実行可能ファイルを生成し、MATLAB® 内で実行されるユーザー インターフェイス (UI) を使用して生成された実行可能ファイルを調整する方法を示します。
はじめに
DSP System Toolbox™ に用意されている大半のアルゴリズムでは、MATLAB Coder を使用した C コード生成がサポートされています。
MATLAB Coder のオプションの 1 つに、端末またはコマンド プロンプトから直接起動することで MATLAB 環境の外部で実行できるスタンドアロン実行可能ファイルの生成があります。
調整可能なアルゴリズムでは、UI を使用して実行時にアルゴリズムを操作することが望まれます。これを実行する方法の 1 つは、UDP 経由で情報を送受信することです。
この例では、UDP を使用して、実行時に MATLAB と生成されたスタンドアロン実行可能ファイルの間で情報を交換します。分散、バイアスおよび指数の重み付けの値が MATLAB から実行可能ファイルに送信されます。実際のランダムな信号と平均、RMS および分散の推定値がスタンドアロン実行可能ファイルから MATLAB に送り返され、プロットされます。
アーキテクチャ例
この例のアーキテクチャは主に 2 つのセクションで構成されます。
streamingStatsCodegenExampleApp
:分散、バイアスおよび指数の重み付けの値を変更するためのユーザー インターフェイス (UI) を作成する MATLAB 関数。この関数は、スタンドアロン実行可能ファイルから受信したデータのプロットも行います。HelperStreamingStatsEXEProcessing
:これは、スタンドアロン実行可能ファイルの生成元の関数です。この関数は、指定されたバイアスと分散のランダムな信号を生成し、その信号の平均、RMS および分散の推定値を計算します。ノイズ信号と計算された統計は UDP 経由で送信され、プロットされます (またはさらに処理されます)。また、シミュレーション中の任意の時点で、MATLAB UI のスライダーの変更に応答できます。
コードの生成と実行可能ファイルのビルド
MATLAB Coder を使用して、ストリーミング統計アルゴリズム コードから読み取り可能なスタンドアロン C コードを生成できます。UDP を使用するため、生成コードと実行可能ファイルには追加の依存関係が存在します。これらは、MATLAB インストールの /bin ディレクトリに含まれています。
スクリプト HelperStreamingStatsGenerateEXE
を実行すると、MATLAB Coder が起動して、HelperStreamingStatsEXEProcessing
に提示されるアルゴリズム コードから自動的に C コードとスタンドアロン実行可能ファイルを生成します。
例の実行
実行可能ファイルを生成したら、関数 streamingStatsCodegenExampleApp
を実行して実行可能ファイルおよびシミュレーションと対話するように設計されたユーザー インターフェイス (UI) を起動します。UI ではパラメーターを調整でき、結果はシミュレーションにすぐに反映されます。たとえば、シミュレーションの実行中に [分散] のスライダーを動かすと、プロットされるノイズ信号と RMS および分散の推定値に影響します。
また、UI には 2 つのボタンがあり、[シミュレーションの一時停止] は、もう一度このボタンを押すまでシミュレーションを保留します。[シミュレーションの中止] ボタンをクリックするとシミュレーションを終了できます。
スレッド
スタンドアロン実行可能ファイルは別のプロセスとして実行されます。つまり、統計の計算と同時にグラフィックスを実行できます。このアプローチは、グラフィックスを伴う高性能計算に適しています。
実行可能ファイルの手動による呼び出し
実行可能ファイルは、system
コマンドを使用して MATLAB 内から起動する代わりに、端末またはコマンド プロンプトから手動で起動することもできます。この実行可能ファイルには UDP 呼び出しが含まれるため、適切な動作のためには DLL がパス上になければなりません。詳細については、How To Run a Generated Executable Outside MATLABを参照してください。
Copyright 2016-2021The MathWorks, Inc.