# phased.URA objects with 'ArrayNormal' set to other than default cause directivity and gain calculations to be inaccurate.

3 views (last 30 days)
Jonathan Williams on 18 Mar 2022
Edited: Gyan Vaibhav on 28 Feb 2024
Create an array using the option to specify a different array normal than the default, which is the x-axis.
fc = 2.95e9;
c = physconst('LightSpeed');
M = 8; % Number of elements on each row
N = 8; % Number of elements on each column
dx = c/fc/2;
dy = dx;
array = phased.URA([N M],[dx dy],'ArrayNormal','z');
Calculate the directivity and gain and the answers will be large negative numbers.
D = directivity(array,fc,0);
gain = phased.ArrayGain("SensorArray",array);
g = gain(fc,[0;0]);
Seems like a flaw in the toolbox?

Gyan Vaibhav on 28 Feb 2024
Edited: Gyan Vaibhav on 28 Feb 2024
Hi Jonathan,
It seems like you're working with MATLAB's Phased Array System Toolbox to create a uniform rectangular array (URA) and calculate its directivity and gain. The code you've provided is mostly correct for setting up the array and the calculations, but there are a few considerations to keep in mind:
1. When you define the array normal as the 'z' axis, you're effectively orienting the broadside of the array along the z-axis. This means that the main lobe of the radiation pattern will be directed along the z-axis, and not in the x-y plane.
2. The directivity function calculates the directivity of the array at a given frequency and direction. The direction is specified in azimuth and elevation angles (in degrees), where the default direction is broadside (azimuth = 0°, elevation = 0°).
3. Similarly, you would need to calculate gain too.
I tried and saw that, when you remove the array normal property, you get the same values as when you pass the angles to the directivity and gain functions, which should be the expected output.
Here is the modified code.
fc = 2.95e9;
c = physconst('LightSpeed');
M = 8; % Number of elements on each row
N = 8; % Number of elements on each column
dx = c/fc/2;
dy = dx;
array = phased.URA([N M],[dx dy],'ArrayNormal','z');
% Calculate directivity at broadside (azimuth = 0, elevation = 90)
D = directivity(array,fc,[0;90]);
% Create an ArrayGain object
gain = phased.ArrayGain('SensorArray',array);
% Calculate gain at broadside (azimuth = 0, elevation = 90)
g = gain(fc,[0;90]);
Go through the following documentations to know more about these functions:
Hope this helps.
Thanks

### Categories

Find more on Array Geometries and Analysis in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!