exponenta event banner

Создание функции 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;
который дает график