Simulinkシミュレーションコマンドの応用


リセット中は、スクリプトでmdlモデルの実行を動的に制御します.スクリプトを作成する過程で、いくつかのコマンドが特によく使われます(open_system,find_system,set_param,get_param,close_system).ここでは、それらの使い方をまとめます.
  • open_system

  • この関数の形式は多く、よく使われるものは次のとおりです.
     
    open_system('sys')
    open_system('blk')
    open_system('blk', 'force')
    open_system('blk', 'parameter')
    open_system('blk', 'mask')
    open_system('blk', 'OpenFcn')
    open_system('sys', 'destsys', 'replace')
    open_system('sys', 'destsys', reuse')

     
    sysで指定したシステムモデルまたはサブシステムウィンドウを開きます.例:
    model='fir'; % モデル名%オープンモデルopen_system(model);  
  • find_system

  • この関数の使用方法:
     
     
    find_system(sys, 'c1', cv1, 'c2', cv2,...'p1', v1, 'p2', v2,...),             、  、 、           。

     
     
     
     
     
    sysがパス名またはパス名cell arrayの場合find_Systemは、検索したオブジェクトのパス名のcell arrayを返します.
    sysがハンドルまたはハンドルベクトルである場合find_システムは、検出されたオブジェクトのハンドルベクトルを返します.
    また、find_システムでは「SearchDepth」などの検索方法を設定できますが、これらの設定オプションを利用して、柔軟にオブジェクトを検索できます.例:
    %パラメータを変更する必要があるモジュールQam_blocks=find_system(model,'lookundermasks','all','regexp','on','C','.*'); 
    モジュールを深くカプセル化し、正規表現を使用して変数「C」を含むすべてのモジュールのパス名を検索できるようにする.blocksはcell arrayです.
  • set_param

  • この関数の使用方法:set_param(object,paramName 1,Value 1,...,paramName N,Value)は、システムまたはモジュールパラメータの値を設定するために使用されます.
    一般的に、多くのモジュールの同じパラメータに対して同じ値を大規模に設定する(多くのモジュールにパラメータCがあり、モデルシステム全体のCの値が一致するなど)、
    一般的にはfind_を先に使いますシステムはこれらのモジュールの位置を見つけて、set_paramはこれらのモジュールのパラメータを対応する値に設定します.例:
    %QAMマッピングパラメータfor temp=1:length(Qam_blocks)set_を設定param(Qam_blocks{temp},'C',num2str(C(c_m))); end 
    set_の場合param関数は、パラメータの値ValueNが一般的にstringタイプに変換されることに注意してください.
  • get_system

  • この関数の一般的な使用方法:
    paramValue = get_param(object, paramName)paramValues = get_param(objectCellArray, paramName)paramValue = get_param(objectHandle, paramName)paramValue = get_param(0, paramName)paramStruct = get_param(object, 'ObjectParameters')
    paramCellArray = get_param(object, 'DialogParameters')
    とset_paramに対応して、パラメータの値を取得します.
  • close_system

  • この関数の使用方法:
     
    close_system
    close_system('sys')
    close_system('sys', saveflag)
    close_system('sys', 'newname')
    close_system('sys', 'newname','ErrorIfShadowed', true)
     open_system     ,    Simulink         。
      ,Simulink         :add_block,delete_block  ,                  。
    ebn0=10:2:30;  % EbN0
    C=5:8;  % QAM    ,C=6  128QAM,    。
    model='fir';  %     
    % weight=[0.5];
    
    % interp_option={'linear','gaussian','cubic spline','dft','general'};   %          
    interp_option={'general'};   %          
    
    error_fir=ones(length(interp_option),11);   
    % BER    ,    linear   BER,    gaussian   BER,    cubic
    % spline   BER,    dft   BER,           +     BER
    
    record_fir=cell(length(C),2);
    %       (C)           BER
    %      C,     error_isi_fir(         ).
    
    %     
    open_system(model);
    
    
    %          
    Qam_blocks=find_system(model,'lookundermasks','all','regexp','on','C','.*');
    EbNo_blocks=find_system(model,'RegExp','on','SearchDepth','1','EbNo','.*');
    interp_blocks=find_system(model,'RegExp','on','SearchDepth','1','flag','.*');
    
    
    for c_m=1:length(C)
        for interp_m=1:length(interp_option)
            
            %   QAM    
            for temp=1:length(Qam_blocks)
                set_param(Qam_blocks{temp},'C',num2str(C(c_m)));
            end
            
            %       
            for temp=1:length(interp_blocks)
                set_param(interp_blocks{temp},'flag',interp_option{interp_m});
            end
            
            for ebn0_m=1:length(ebn0)
                
                %   EbN0
                for temp=1:length(EbNo_blocks)
                    set_param(EbNo_blocks{temp},'EbNo',num2str(ebn0(ebn0_m)));
                end
                
                %   model
                sim(model);
                error_fir(interp_m,ebn0_m)=ber_fir(1);
            end
        end
        record_fir{c_m,1}=C(c_m);
        record_fir{c_m,2}=error_fir;
    end
    
    %   model
    close_system(model,0);