Conceptually the two approach is equivalent. The discrepancy you see is related to how you generate the custom antenna in your second approach. When you use the result from pattern, you essentially get only the magnitude data. However, even though the elements are isotropic, the response of an array has phase information in there. Therefore, instead of using
[embpattern, az, el] = pattern(subarray,fc);
ant_sub = phased.CustomAntennaElement('FrequencyVector',[10e9,50e9],...
'AzimuthAngles',az,...
'ElevationAngles',el,...
'MagnitudePattern',embpattern,...
'PhasePattern',zeros(size(embpattern)));
I would use the following code to generate the custom antenna element
az = -180:180;
el = -90:90;
embpattern = complex(zeros(numel(el),numel(az)));
subarrayresp = phased.ArrayResponse('SensorArray',subarray);
for m = 1:numel(el)
embpattern(m,:) = subarrayresp(fc,[az;el(m)*ones(size(az))]);
end
ant_sub = phased.CustomAntennaElement('FrequencyVector',[10e9,50e9],...
'AzimuthAngles',az,...
'ElevationAngles',el,...
'MagnitudePattern',mag2db(abs(embpattern)),...
'PhasePattern',angle(embpattern));
If you use this ant_sub in your program, you will see that the two approach give the same power level.
HTH
Best Answer