Trouble in codegen customized antenna pattern

1 Ansicht (letzte 30 Tage)
Tor Viscor
Tor Viscor am 6 Mai 2021
Kommentiert: Tor Viscor am 11 Mai 2021
Hello,
I am trying to use codegen on a customized antenna pattern, basically this,
pattern = phased.CustomAntennaElement('AzimuthAngles',x.azim,'ElevationAngles',x.elev, ...
'MagnitudePattern',(x.pat_azEl),'PhasePattern',45*ones(size(x.pat_azEl)));
but I keep getting the following error message:
"??? Expression could not be reduced to a constant.", which points to line 1014 of the CustomAntennaElement.m function when setting the phase.
Does Matlab Coder not support custom antenna functions? Could anybody give me some advice please?
  1 Kommentar
Honglei Chen
Honglei Chen am 8 Mai 2021
Thansk for reporting this. We've idenfitied the issue and will fix it in a future release. Please see the ansewr below for a workaround.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Honglei Chen
Honglei Chen am 7 Mai 2021
I don't know how x is formed, but here is an example you can take a look, that generates the code. The main idea is to push pattern computation to a separate function and use coder.extrinsic to compute it first then save as a constant.
The main function looks like this
function pattern = phasedArrayWrapper()
coder.extrinsic('getPattern');
AzimuthAngles = -180:180;
ElevationAngles = -90:90;
MagnitudePattern = coder.const(getPattern(AzimuthAngles,ElevationAngles));
phasepattern = zeros(size(MagnitudePattern));
ant = phased.CustomAntennaElement('AzimuthAngles',AzimuthAngles,'ElevationAngles',ElevationAngles, ...
'MagnitudePattern',MagnitudePattern,'PhasePattern',phasepattern);
pattern = ant(3e8,[0;0]);
end
The supporting function, which needs to be on path, looks like below
function pat = getPattern(AzimuthAngles,ElevationAngles)
pat = mag2db(repmat(cosd(ElevationAngles)', ...
1,numel(AzimuthAngles)));
end
The codegen command is shown below
>> codegen phasedArrayWrapper
Code generation successful.
HTH
  1 Kommentar
Tor Viscor
Tor Viscor am 11 Mai 2021
Thanks for the answer.
I tried your way and also something similar,by saving the pattern information in a variable and loaded it in the main code for codegen. But both resulted in that error message. Could it be an issue with the pattern type I am trying to use in the custom antenna function?
Please see below:
% this is the pattern to be used in the custom antenna element function, saved in 'cosVar'
antenna = phased.CosineAntennaElement;
TRM = phased.ULA('NumElements',6,'Element',antenna,'ArrayAxis','y','ElementSpacing',lambda/2);
[pat_azEl,azim, elev ] = pattern(TRM,fc,-180:0.05:180,-90:0.05:90);
save('cosVar.mat','pat_azEl','azim','elev');
*************************************************************
coder.load('cosVar')
TRM_pattern = phased.CustomAntennaElement('AzimuthAngles',azim,'ElevationAngles',elev,'MagnitudePattern',(pat_azEl),'PhasePattern',0*ones(size(pat_azEl)));

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Antennas, Microphones, and Sonar Transducers finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by