Сгенерируйте MEX-функцию, содержащую персистентные системные объекты

Иногда, удобно поместить Системные объекты в функции, которая должна много раз вызываться. Это устраняет издержки в создании новых экземпляров Системы object™ каждый раз, когда функция вызвана. Можно записать логику, которая создает Системный объект только однажды и объявляет, что он persistent. Например, предположите, что вы требуете ответа ULA с 11 элементами для нескольких различных углов падения и хотите построить тот ответ по сравнению с углом.

function plot_ULA_response
azangles = [-90:90];
elangles = zeros(size(azangles));
fc = 100e9;
c = physconst('LightSpeed');
N = size(azangles,2);
lambda = c/fc;
d = 0.4*lambda;
numelements = 11;
resp = zeros(1,N);
sIso = phased.IsotropicAntennaElement(...
    'FrequencyRange',[1,200]*1e9,...
    'BackBaffled',false);
sULA = phased.ULA('Element',sIso,...
    'NumElements',numelements,...
    'ElementSpacing',d,...
    'Taper',taylorwin(numelements).');
for n = 1:N
    x = get_ULA_response(sULA,fc,azangles(n),elangles(n));
    resp(n) = abs(x);
end
plot(azangles,20*log10(resp));
title('ULA Response');
xlabel('Angle (deg)');
ylabel('Response (db)');
grid;
end

function resp = get_ULA_response(sULA,fc,az,el)
persistent sAR;
c = physconst('LightSpeed');
if isempty(sAR)
    sAR = phased.ArrayResponse('SensorArray',sULA,...
        'PropagationSpeed',c,...
        'WeightsInputPort',false,...
        'EnablePolarization',false);
end
resp = step(sAR,fc,[az;el]);
end

Создать код, запуск codegen (MATLAB Coder), чтобы создать файл MEX plot_ULA_response_mex, и выполните файл MEX в командной строке:

codegen plot_ULA_response
plot_ULA_response_mex;
который дает к графику