# Phased Array Toolbox Directivity Calculation

22 vues (au cours des 30 derniers jours)
Carl Steens le 3 Mai 2020
Hello,
I am trying to reconcile the outputs of the MATLAB Phased Array Toolbox directivity calculations with my textbook theory.
Given an array of 4 isotropic elements, I expect the peak directivity at boresight to be 6 dBi.
If I use the MATLAB function for a linear array, this pans out:
>> f = 3e8; lambda = 3e8/f;
>> element = phased.IsotropicAntennaElement();
>> array = phased.ULA('Element',element,'NumElements',4,'ElementSpacing', lambda/2);
>> directivity(array,f,0)
ans =
6.0240
However if I use the MATLAB function for a rectangular array, I do not get 6 dB:
>> f = 3e8; lambda = 3e8/f;
>> element = phased.IsotropicAntennaElement();
>> array = phased.URA('Element',element,'Size',[2 2],'ElementSpacing', lambda/2);
>> directivity(array,f,0)
ans =
7.0906
Am I missing something obvious here?
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponses (3)

Honglei Chen le 4 Mai 2020
It would be helpful if you could share which textbook theory you are referring too. Directivity is often used interchangeablly with the term gain but the gain referred to by antenna engineers are quite different than the gain referred to array signal processing engineers.
The gain for arrays ignal processing engineers are measured by signal to noise ratio between what we can achieve using an array and what we can acheive using a single element. In this case, when you have 4 elements, the signal to noise ratio gain is always 4 along boresight, which translates to 6 dB. To compue this gain, we can use phased.ArrayGain.
The gain for antenna engineers, or directivity when we assume efficiency is 1, measures how focused the power is radiated between an array and an isotropic antenna. This is what directivity() computes and the result is actualy in dBi, where i stands for isotropic (although I've see dB used in literature and probably also makes it more confusing). The computation of directivity actually consider not only the number of elements, but also how they are placed in the array. Therefore, different geometry could lead to different result. In your case, a ULA is istropic in elevation cut along boresight yet a URA will have a pencil beam around the boresight. So it does look like the URA is more focused than ULA, thus a higher directivity seems reasonable.
HTH
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Mike Susedik le 19 Août 2020
Differece between a linear array of 4 isotropic elements and a rectagular array, 2x2 of isotropic elements. The rectangular is focused in 2 planes, not just 1.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Jonathan Williams le 15 Mar 2022
Modifié(e) : Jonathan Williams le 15 Mar 2022
The answer to your question is in Van Trees, "Optimum Array Processing" section 4.1.1.2. There is no short answer, but it is correct that the directivity of a planar array is not the same as a linear array for the same number of elements. The derivation is complicated, but I have created a function that calculates the directivity of an arbitrary planar array per Van Trees, and so far it seems to produce the same answer as the array toolbox function.
function Directivity = directiv_planar(pos,fc,w)
% Calculates the directivity of an arbitrary planar (or linear) array
% Reference Van Trees section 4.1.1.2
% Inputs:
% w is a 1xN taper vector, assumed to be uniform if not provided
% The values are the amplitude tapers of the elements.
% pos is a 2xN vector of element 2x1 position vectors.
% Outputs:
% Directivity of the array
if nargin <3
w = ones(size(pos,2),1);
end
c = physconst('LightSpeed');
lambda = c/fc;
if sum(any(w<0))>0
return
end
v = w./abs(w);
P = zeros(size(pos,2),size(pos,2),2);
for i = 1:size(pos,2)
P(i,:,1) = pos(1,i) - pos(1,:);
P(i,:,2) = pos(2,i) - pos(2,:);
end
p = sqrt(sum(P.^2,3));
% the sinc function adds pi - sin(pi*x)/(pi*x)
B = sinc(2./lambda.*p);
% In case "sinc" is not available, this code implements it
% B=ones(size(x));
% i=find(x);
% B(i)=sin(pi*x(i))./(pi*x(i));
Directivity = 10*log10((abs((w'*v))^2)/(w'*B*w));
end
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Array Geometries and Analysis dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by