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