Parforを用いてSimulink モデルを並列に実行する方法
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    O.E
 el 15 de Nov. de 2016
  
    
    
    
    
    Comentada: O.E
 el 16 de Nov. de 2016
            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と設定しているのですが、なぜ未定義となってしまうのでしょうか。
0 comentarios
Respuesta aceptada
  Jiro Doke
    
 el 15 de Nov. de 2016
        
      Editada: Jiro Doke
    
 el 15 de Nov. de 2016
  
      これは、 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 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Special Functions en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

