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

조회 수: 1 (최근 30일)
O.E
O.E 2016년 11월 15일
댓글: O.E 2016년 11월 16일
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일
これは、 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
Jiro Doke
Jiro Doke 2016년 11월 15일
すみません。
sim のオプションが間違っていました。回答を修正しましたのでもう一度試してみてください。
O.E
O.E 2016년 11월 16일
無事動作いたしました。 丁寧な御回答ありがとうございました。

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Communications Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by