Иногда, удобно поместить Системные объекты в функции, которая должна много раз вызываться. Это устраняет издержки в создании новых экземпляров Системы object™ каждый раз, когда функция вызвана. Можно записать логику, которая создает Системный объект только однажды и объявляет, что он persistent
. Например, предположите, что вы требуете ответа ULA с 11 элементами для нескольких различных углов падения и хотите построить тот ответ по сравнению с углом.
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
создать файл MEX plot_ULA_response_mex
, и выполните файл MEX в командной строке:
codegen plot_ULA_response
plot_ULA_response_mex;