Trouble in codegen customized antenna pattern

4 ビュー (過去 30 日間)
Tor Viscor
Tor Viscor 2021 年 5 月 6 日
コメント済み: Tor Viscor 2021 年 5 月 11 日
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 件のコメント
Honglei Chen
Honglei Chen 2021 年 5 月 8 日
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.

サインインしてコメントする。

回答 (1 件)

Honglei Chen
Honglei Chen 2021 年 5 月 7 日
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 件のコメント
Tor Viscor
Tor Viscor 2021 年 5 月 11 日
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)));

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeAntennas, Microphones, and Sonar Transducers についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by