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

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

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;
который приводит к графику