В этом примере показано, как запустить симуляции пакета без перекомпиляции сгенерированного кода. Пример изменяет данные входного сигнала и параметры модели путем считывания данных из MAT-файла. В первой части (шаги 1-5) десять наборов параметров создаются из модели Simulink ® путем изменения коэффициента затухания передаточной функции. Десять наборов параметров сохраняются в MAT-файле, а исполняемый файл RSim считывает указанный набор параметров из файла. Во второй части (этап 6-7) этого примера пять наборов щебет сигнальных данных создаются с все больше высокими частотами. В обеих частях исполняемый файл RSim запускает набор симуляций и создает выходные MAT-файлы, содержащие определенный результат симуляции. Наконец, композит запусков появляется на рисунке MATLAB ®.
Чтобы быстро запустить несколько симуляций в окружение Simulink, рассмотрите использование быстрого ускорителя вместо RSim. Смотрите, что такое ускорение?.
Убедитесь, что текущая директория доступна для записи, поскольку этот пример будет создавать файлы.
[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',[]);
В локальной директории требуется rsim_tfdata.mat 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.') slbuild(mdlName);
Building compiled RSim simulation. ### Starting build procedure for: rtwdemo_rsimtf ### Successful completion of build procedure for: rtwdemo_rsimtf Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== rtwdemo_rsimtf Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.8879s
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 симуляций, каждая с использованием другого коэффициента затухания.
Временной вектор имеет 4096 точек в случае, если мы хотим сделать оконный и спектральный анализ результатов моделирования.
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.