Parforを用いてSimulink モデルを並列に実行する方法

1BitΔΣADCのSimulink モデルをParforを利用してローカルで並列実行したいと考えています。 シミュレーション時間を0~Tsimまでとし、入力信号(Sin波)の振幅をAとして並列実行し、 出力データをTo workspace (OUT_DATA)に出力しようと考えています。
%%%%%%%%%%パラメータ設定 %%%%%%%%%%%%%%%%
Sp=2^14; %サンプル点数
Ts=1; %サンプリング周期
OSR=64; %オーバーサンプリングレーシオ
fb=(1/Ts)/(2*OSR); %帯域 (OSR=fclk/(2*fb)) fb=fclk/(2*OSR))
fsin=fb/2; %信号帯域の半分の周波数の信号を使ってシミュレーション
Tsim=(Sp)*Ts; %システムのシミュレーション時間
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
J = [0,1,2,3,4,5.6]; % モデルに引き渡すパラメータの組
parfor i = 1:length(J)
A = J(i); % 使用するパラメータ
  sim('dsm')
B(i) = transpose(OUT_DATA);
end
このようにプログラムを組んだのですが、 ″ブロック線図 'dsm' では、[コンフィギュレーション パラメーター] ダイアログ内の 'StopTime' に指定された式 'Tsim' の評価中にエラーが発生しました: 関数または変数 'Tsim' が未定義です。″
とエラーが表示され実行することができませんでした。TsimはTsim=(Sp)*Tsと設定しているのですが、なぜ未定義となってしまうのでしょうか。

 채택된 답변

Jiro Doke
Jiro Doke 2016년 11월 15일
편집: Jiro Doke 2016년 11월 15일

4 개 추천

これは、 parfor 内でループの外の変数が見えていないから起きます。一番簡単な対処法はループ内のコードを一つの関数としてまとめる方法です。
実際に dsim のモデル内でどの変数が必要か分かりませんが、仮に A, fsin, Tsim が使われている場合、それらを入力として受け付ける関数を書きます。
J = [0,1,2,3,4,5.6]; % モデルに引き渡すパラメータの組
parfor i = 1:length(J)
B{i} = simModel(J(i),fsin,Tsim);
end
%%%%%
function B = simModel(A,fsin,Tsim)
simOut = sim('dsm','SrcWorkspace','current');
OUT_DATA = get(simOut,'OUT_DATA'); % シミュレーション出力オブジェクトから抽出
B = transpose(OUT_DATA);
end
%%%%%
sim は既定の設定でベースワークスペースの変数を参照するため、関数内で実行するには SrcWorkspace current に設定する必要があります。また、それを行うと出力データはシミュレーション出力オブジェクトに格納されるので、抽出する必要があります。
参考:

댓글 수: 3

O.E
O.E 2016년 11월 15일
返答ありがとうございます。
コードを書き換え実行いたしましたが ブロック線図 'dsm' では、[コンフィギュレーション パラメーター] ダイアログ内の 'StopTime' に指定された式 'Tsim' の評価中にエラーが発生しました: 関数または変数 'Tsim' が未定義です。
parfor i = 1:length(J)
の二つのエラーが発生して動きませんでした。 また、A,fsin,Tsimは使用されていない可能性がありますといった警告が出ています。
Jiro Doke
Jiro Doke 2016년 11월 15일
すみません。
sim のオプションが間違っていました。回答を修正しましたのでもう一度試してみてください。
O.E
O.E 2016년 11월 16일
無事動作いたしました。 丁寧な御回答ありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Special Functions에 대해 자세히 알아보기

질문:

O.E
2016년 11월 15일

댓글:

O.E
2016년 11월 16일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by