Main Content

推定速度とメモリの管理

周波数応答推定を高速化する方法

周波数応答推定において最も時間がかかる操作は Simulink® モデルのシミュレーションです。次のいずれかの方法を使用して、推定の高速化を試みることができます。

  • シミュレーション停止時間の短縮

  • アクセラレータ モードの指定

  • 並列計算の使用

シミュレーション停止時間の短縮

周波数応答推定の実行に要する時間は、シミュレーション停止時間によって異なります。

シミュレーション停止時間を取得するには、モデル線形化器[線形解析ワークスペース] で入力信号を選択します。シミュレーション時間は [変数プレビュー] に表示されます。

MATLAB® コードを使用して、入力信号からシミュレーション停止時間を取得するには、次を行います。

tfinal = getSimulationTime(input) 

ここで input は入力信号です。シミュレーション終了時間 tfinal は、周波数応答推定の所要時間を示します。

信号プロパティを変更することで、シミュレーション時間を短縮できます。

入力信号アクション注意
Sinestream

特に低周波数において、周波数ごとの周期数 NumPeriods を減らします。

正確な周波数応答推定を得るために、モデルは定常状態でなければなりません。周期数を減らすと、定常状態に到達するのに十分な長さのモデルを励起しない可能性があります。

チャープ

信号のサンプル時間 Ts またはサンプル数 NumSamples を減らします。

推定された応答の周波数分解能は、サンプル数 NumSamples によって異なります。サンプル数を減らすと、推定された周波数応答の周波数分解能が低くなります。

入力信号の変更の詳細については、推定用の入力信号の変更を参照してください。

アクセラレータ モードの指定

Simulink でラピッド アクセラレータ モードまたはアクセラレータ モードを指定して、周波数応答推定の高速化を試みることができます。

詳細については、アクセラレーションとはを参照してください。

並列計算の使用

以下のような状況で、並列計算を使用して周波数応答推定の高速化を試みることができます。

  • モデルに複数の入力がある。

  • 単入力モデルが sinestream 入力信号を使用し、ここで、SimulationOrder プロパティが値 'OneAtATime' をもつ。

    このオプションの設定の詳細については、frest.Sinestream のリファレンス ページを参照してください。

このような状況の場合、周波数応答推定では複数のシミュレーションを実行します。Parallel Computing Toolbox™ ソフトウェアをインストールしている場合は、これらの複数のシミュレーションを複数の MATLAB セッション (MATLAB ワーカーの "プール") に対して並列に実行できます。

並列計算の使用の詳細については、並列計算を使用した推定の高速化を参照してください。

並列計算を使用した推定の高速化

並列計算に対する MATLAB の設定

並列計算を使用すると、複数のシミュレーションを実行する周波数応答推定を高速化できます。モデル線形化器 および frestimate では並列計算を使用できます。並列計算を使用して周波数応答の推定を実行する場合、ソフトウェアは使用可能な並列プールを使用します。使用可能な並列プールがなく、Parallel Computing Toolbox 基本設定で [Automatically create a parallel pool] が選択されている場合、ソフトウェアはそれらの設定を使用して並列プールを開始します。

モデルの依存関係を自動的に検出し、それらを一時的に並列プール ワーカーに追加するようにソフトウェアを設定できます。ただし、検出されないファイルおよびパスの依存関係にワーカーがアクセスできるようにするために、同じものを指定するクラスター プロファイルを作成します。モデルの最適化に使用される並列プールは、このクラスター プロファイルに関連付けなければなりません。クラスター プロファイルの作成の詳細については、クラスター プロファイルの追加と変更 (Parallel Computing Toolbox)を参照してください。

特定のクラスター プロファイルを使用する並列プールを手動で開くには、次を使用します。

parpool(MyProfile)

MyProfile はクラスター プロファイルの名前です。

モデル線形化器で並列計算を使用した周波数応答の推定

並列計算の設定を行ったら、モデル線形化器アプリを使用して、Simulink モデルの周波数応答を推定できます (並列計算に対する MATLAB の設定を参照)。

  1. モデル線形化器[推定] タブで [追加オプション] をクリックします。

  2. [周波数応答の推定のオプション] ダイアログ ボックスの [並列オプション] タブで [推定中に並列プールを使用] を選択します。

  3. (オプション) [パスの依存関係を追加] をクリックします。

    [フォルダーの参照] ダイアログ ボックスで、モデル パスの依存関係を追加するディレクトリに移動して選択します。

    [OK] をクリックします。

    ヒント

    または、[モデル パスの依存関係] リストに手動でパスを指定します。改行で区切ることによって、複数のパスを指定できます。

  4. (オプション) [モデルからパスの依存関係の同期を取る] をクリックします。

    Simulink モデルのモデル パスの依存関係を検出し、[モデル パスの依存関係] リスト ボックスに追加します。

並列計算を使用した周波数応答の推定 (MATLAB コード)

並列計算の設定を行ったら、Simulink モデルの周波数応答を推定できます (並列計算に対する MATLAB の設定を参照)。

  1. Simulink モデルが実行する必要があるファイルへのパスを見つけます。"パスの依存関係" と呼ばれます。

    dirs = frest.findDepend(model)

    dirs は、参照モデル、データ ファイル、S-Function などのパスの依存関係を含む文字ベクトルの cell 配列です。

    このコマンドの詳細については、frest.findDepend を参照してください。

    モデルの依存関係の詳細については、モデル依存関係の解析および依存関係アナライザーの範囲と制限を参照してください。

  2. (オプション) dirs にすべてのパスの依存関係が含まれていることを確認します。不足しているパスがある場合、次のように dirs に追加します。

    dirs = vertcat(dirs,'\\hostname\C$\matlab\work')
  3. (オプション) すべてのワーカーに dirs のパスへのアクセス権があることを確認します。

    ローカル ドライブにいずれかのパスがある場合は、すべてのワーカーがローカル ドライブにアクセスできるように指定します。たとえば、次のコマンドは、C ドライブへのすべての参照をすべてのワーカーがアクセスできる等価のネットワーク アドレスに変換します。

    dirs = regexprep(dirs,'C:/','\\\\hostname\\C$\\')

  4. 並列計算を有効にし、frestimateOptions コマンドを使用して options オブジェクトを作成し、モデルのパスの依存関係を指定します。

    options = frestimateOptions('UseParallel','on','ParallelPathDependencies',dirs)

    ヒント

    すべての推定に対して並列計算を有効にするには、MATLAB 基本設定のグローバル設定 ["frestimate" コマンドを使用する場合は並列プールを使用する] チェック ボックスをオンにします。モデルにパスの依存関係がある場合は、推定を開始する前に、パスの依存関係を指定する独自の周波数応答オプションのオブジェクトを作成しなければなりません。

  5. 周波数応答を推定します。

    [sysest,simout] = frestimate('model',io,input,options)

並列計算を使用して推定を高速化する例については、並列計算を使用した周波数応答推定の高速化を参照してください。

周波数応答推定時のメモリの管理

周波数応答推定は、シミュレーションのデータが使用可能なメモリを超えると終了します。メモリ不足は、次のような状況で発生します。

  • モデルが長いシミュレーション中にデータのログを実行する。1e-3 rad/s の周波数で 4 つの周期をもつ sinestream 入力信号は、Simulink シミュレーションを 25,000 秒間実行します。To Workspace ブロックを使用して信号のログを作成する場合、この長さのシミュレーション時間ではメモリの問題が発生する可能性があります。

  • 5 Hz の周波数でシミュレートする (1 周期につき 0.2 秒のシミュレーション)、出力ポイントの離散サンプル時間 1e-8 秒のモデルが、1 周期につき 0.21e8=2 百万サンプルのデータを出す。通常、このデータ量には 300 MB 以上のストレージが必要です。

周波数応答推定中のメモリの問題を回避するには、次の手順に従います。

  1. Simulink モデルでの信号のログを無効にします。信号のログを作成するモデル コンポーネントを特定して信号のログを無効にする方法の詳細については、信号ログを使用した信号データの保存を参照してください。

  2. 次の節にリストされている 1 つ以上のアクションを試してください。

  3. 推定を繰り返します。

メモリの問題を回避するためのモデル固有の方法

メモリの問題を回避するには、モデル タイプに応じて、次の表にリストされている 1 つ以上のアクションを実行してください。

モデル タイプアクション
出力ポイントで指定された高速の離散サンプル時間をもつモデル

出力ポイントで Rate Transition ブロックを挿入してサンプル レートを下げると、ログ データの量が少なくなります。推定を行う前に、線形化出力ポイントを Rate Transition ブロックの出力に移動します。レート変換の結果、元の出力ポイントの場所にエイリアシングがないことを確認します。

サンプル レートの決定の詳細については、サンプル時間情報の表示を参照してください。推定に時間がかかる場合は、周波数応答推定を高速化する方法を参照してください。

多入力多出力ポイントをもつモデル (MIMO モデル)

メモリの問題を回避するための入力信号固有の方法

メモリの問題を回避するには、入力信号タイプに応じて、次の表にリストされている 1 つ以上のアクションを実行してください。

入力信号タイプアクション
Sinestream
  • 周波数応答が必要でない入力信号から低周波数を削除します。

  • sinestream 信号を変更し、SimulationOrder オプションを OneAtATime に設定して、各周波数を個別に推定します。次に sysest = frestimate(model,io,input) などのシミュレートされた時間応答の出力データを要求しない frestimate 構文を使用して推定します。

  • 並列計算を使用して、独立したシミュレーションを異なるコンピューターで並列に実行します。並列計算を使用した推定の高速化を参照してください。

  • fselect を使用して、入力信号を複数の信号に分割します。frestimate を使用して、各信号の周波数応答を個別に推定します。次に、fcat を使用して結果を結合します。

チャープ

frest.Chirp を使用して元の信号のスイープ周波数範囲を小さなセクションに分割する個別の入力信号を作成します。frestimate を使用して、各信号の周波数応答を個別に推定します。次に、fcat を使用して結果を結合します。

乱数推定を行う前に NumSamples を変更して、乱数入力信号のサンプル数を減らします。時間応答にノイズが多いを参照してください。