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