Generate MEX Function Containing Persistent System Objects
Sometimes, it is convenient to put System objects inside a function that is to be
called many times. This eliminates the overhead in creating new instances of a
System object™ each time the function is called. You can write logic which creates the
System object just once and declares it to be persistent
. For
example, suppose you require the response of an 11-element ULA for several different
arrival angles and want to plot that response versus angle.
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 = sAR(fc,[az;el]); end
To create the code, run codegen
(MATLAB Coder)to create the MEX-file
plot_ULA_response_mex
, and execute the mex-file at the command
line:
codegen plot_ULA_response
plot_ULA_response_mex;