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

Иногда удобно помещать системные объекты внутрь функции, которая должна вызываться многократно. Это устраняет накладные расходы при создании новых экземпляров системного object™ при каждом вызове функции. Можно записать логику, которая создает объект System только один раз и объявляет его 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) для создания файла MEXplot_ULA_response_mexи выполните mex-файл в командной строке:

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