В этом примере показано, как запустить пакетные симуляции, не перекомпилировав сгенерированный код. Пример изменяет данные о входном сигнале и параметры модели путем чтения данных из MAT-файла. В первой части (шаги 1-5) десять наборов параметра создаются из модели Simulink® путем изменения фактора затухания передаточной функции. Десять наборов параметра сохранены в MAT-файл, и исполняемый файл RSim читает заданный набор параметра из файла. Во второй части (шаг 6-7) этого примера пять наборов щебетов данных сигнала создаются со все больше высокими частотами. В обеих частях исполняемый файл RSim запускает набор симуляций и создает выходные MAT-файлы, содержащие определенный результат симуляции. Наконец, составной объект запусков появляется в фигуре MATLAB®.
Чтобы быстро запустить несколько симуляций в окружении Simulink, рассмотрите использование быстрого акселератора вместо RSim. Смотрите то, Что Ускорение? (Simulink).
Убедитесь, что текущий каталог перезаписываем, потому что этот пример будет создавать файлы.
[stat, fa] = fileattrib(pwd); if ~fa.UserWrite disp('This script must be run in a writable directory'); return; end
Откройте модель и сконфигурируйте ее, чтобы использовать цель RSim. Для получения дополнительной информации о выполнении этого графически и подготовке другие связанные с целью опции RSim, посмотрите здесь.
mdlName = 'rtwdemo_rsimtf'; open_system(mdlName); cs = getActiveConfigSet(mdlName); cs.switchTarget('rsim.tlc',[]);
MAT-файл rsim_tfdata.mat требуется в локальной директории.
if ~isempty(dir('rsim_tfdata.mat')), delete('rsim_tfdata.mat'); end str1 = fullfile(matlabroot,'toolbox','rtw','rtwdemos','rsimdemos','rsim_tfdata.mat'); str2 = ['copyfile(''', str1, ''',''rsim_tfdata.mat'',''writable'')']; eval(str2);
Создайте исполняемый файл RSim для модели. Во время процесса сборки структурная контрольная сумма вычисляется для модели и встраивается в сгенерированный исполняемый файл. Эта контрольная сумма используется, чтобы проверять, что набор параметра, переданный исполняемому файлу, совместим с нею.
evalin('base','w = 70;') evalin('base','theta = 1.0;') disp('Building compiled RSim simulation.') rtwbuild(mdlName);
Building compiled RSim simulation. ### Starting build procedure for model: rtwdemo_rsimtf ### Successful completion of build procedure for model: rtwdemo_rsimtf
disp('Creating rtP data files') for i=1:10 % Extract current rtP structure using new damping factor. [rtpstruct]=evalin('base','rsimgetrtp(''rtwdemo_rsimtf'');'); savestr = strcat('save params',num2str(i),'.mat rtpstruct'); eval(savestr); evalin('base','theta = theta - .1;'); end disp('Finished creating parameter data files.')
Creating rtP data files Finished creating parameter data files.
figure for i=1:10 % Bang out and run a simulation using new parameter data runstr = ['.', filesep, 'rtwdemo_rsimtf -p params',num2str(i),'.mat', ' -v']; [status, result] = system(runstr); if status ~= 0, error(result); end % Load simulation data into MATLAB for plotting. load rtwdemo_rsimtf.mat; axis([0 1 0 2]); plot(rt_tout, rt_yout) hold on end
График показывает 10 симуляций, каждый использующий различный фактор затухания.
Временной вектор имеет 4 096 точек в конечном счете, мы хотим сделать работу с окнами и спектральный анализ на результатах симуляции.
dt = .001; nn = [0:1:4095]; t = dt*nn; [m,n] = size(t); wlo = 1; whi = 4; omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n];
Создание .mat файлы с данными о щебете.
disp('This part of the example illustrates a sequence of 5 plots. Each') disp('plot shows an input chirp signal of certain frequency range.') for i = 1:5 wlo = whi; whi = 3*whi; % keep increasing frequencies omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n]; % In a real application we recommend shaping the chirp using % a windowing function (hamming or hanning window, etc.) % This example does not use a windowing function. u = sin(omega.*t); tudata = [t;u]; % At each pass, save one more set of tudata to the next % .mat file. savestr = strcat('save sweep',num2str(i),'.mat tudata'); eval(savestr); % Display each chirp. Note that this is only input data. % Simulations have not been run yet. plotstr = strcat('subplot(5,1,',num2str(i),');'); eval(plotstr); plot(t,u) pause(0.3) end
This part of the example illustrates a sequence of 5 plots. Each plot shows an input chirp signal of certain frequency range.
Замените исходные данные сигнала (rsim_tfdata.mat) на файлы sweep1.mat, sweep2.mat и так далее.
disp('Starting batch simulations.') for i = 1:5 % Bang out and run the next set of data with RSim runstr = ['.', filesep, 'rtwdemo_rsimtf -f rsim_tfdata.mat=sweep', ... num2str(i),'.mat -v -tf 4.096']; [status, result] = system(runstr); if status ~= 0, error(result); end % Load the data to MATLAB and plot the results. load rtwdemo_rsimtf.mat plotstr = strcat('subplot(5,1,',num2str(i),');'); eval(plotstr); plot(rt_tout, rt_yout); axis([0 4.1 -3 3]); end zoom on % cleanup evalin('base','clear w theta') disp('This part of the example illustrates a sequence of 5 plots. Each plot') disp('shows the simulation results for the next frequency range. Using the') disp('mouse, zoom in on each signal to observe signal amplitudes.') close_system(mdlName, 0);
Starting batch simulations. This part of the example illustrates a sequence of 5 plots. Each plot shows the simulation results for the next frequency range. Using the mouse, zoom in on each signal to observe signal amplitudes.