Le Leivre.com

Antenna Range Measurement

In order to practically measure the field strength from an antenna over its entire sphere of radiation, a reference measurement antenna must appear to hover above all the spherical coordinates of the AUT (Antenna Under Test). This can be achieved many ways, but this paper will detail one specific case.
The reference measurement antenna will remain fixed and will probe both H and V polarisations.
The AUT will be mounted on a turntable within a turntable. This will allow the antenna to rotate +/- 90 Degrees in the XZ plane (inclination φ) and a full 360 Degrees in the XY plane (rotation θ)
Antenna Range Setup

For every setting of Inclination, the will be a full sweep of rotation. A typical scenario would be -90 to +90 in 10 Degree steps of inclination (19 Slices) each with a full rotation of 360 Degrees in 1 degree steps (361 measurements). The total number of data points would be 19*361 = 6859. Here is a representation of all of the measurement points on the sphere scaled to a unit circle.
antenna_great_circle

A more common representation for easy analysis and 3D radiation pattern plotting uses spherical coordinates. We must convert this special case of inclination and rotation to true azimuth-elevation spherical coordinates and this can be achieved using the following formulae.
equation1

Furthermore, to account for the fact the asin( ) will produce only +/- 90 degrees of azimuth, a correction must be applied to achieve coverage of the rear hemisphere. Simply:
If (rotation > +90°) az = +180° – az
If (rotation < -90°) az = -180° – az
The next Figure shows how the unit sphere is covered by azimuth- elevation coordinates.
Each azimuth ring in the figure is at a different elevation ranging from -90° to +90°.
The antenna is not actually measured this way as it becomes obvious that less sphere coverage is achieved due to there being a greater concentration of points at the poles.
antenna Az El

Example Azimuth, Elevation and 3D plots (4 element antenna)
These plots demonstrate the output from the described procedure. They were drawn using MATLAB which was also used to perform the coordinate conversion.
Elevation slice (az = 0°)
antenna Az El

Azimuth Slice (el = 0°)
antenna Az El

3D pattern.
antenna Az El

MATLAB Code

%Import the file: Antenna range uses the following
%representation: rotation -90 to +90 and az -180 to 180
DELIMITER = ' ';
HEADERLINES = 1;
A = importdata('D:\Data\antenna.dat', DELIMITER, HEADERLINES);
 
%Create new variables in the base workspace from those fields.
rot = A.data(:,1);
dE = A.data(:,2);
dH = A.data(:,4);
 
%Choose the data to plot. In this case sum both polarisations for full
%copolar field
r = 10 .* log10((10.^(dE ./ 10 )) + (10 .^ (dH ./ 10 )));
 
%Scale to zero if not already
rmax = max(r);
r = r - rmax;
 
%Create rotational data as this table is not explicitly in the file
z = ones(361,1);
z = z * -90;
inc = [z;z+10;z+20;z+30;z+40;z+50;z+60;z+70;z+80;z+90;z+100;z+110;z+120;z+130;z+140;z+150;z+160;z+170;z+180];
 
%Convert all to radians
inc = inc * pi/180;
rot = rot * pi/180;
 
%Calculate the elevation from the rotation and azimuth
el = asin(-sin(inc) .* sin(rot));
 
%Calculate the azimuth from the inclination and rotation and elevation
%Ensure inverse sin doesn't see greater than 1 due to bad rounding
az = asin( cos(inc) .* sin(rot) ./ (cos(el) + 0.0000000001) );
 
%Correct for quadrant of azimuth lost by the inverse sin
form = 1:6859
    ifrot(m) > (pi/2)
        az(m) = pi - az(m);
   elseifrot(m) < (-pi/2)
        az(m) = - pi - az(m);
    end
end
 
%Scale so as to remove the negative numbers not tolerated by surface.
%Also remove any detail less than -40dB to aid visibility
r = r + 40;
form = 1:6859
   if r(m) < 0
        r(m) = 0;
    end
end
 
%Polar Elevation plot from 0 to -40dB
figure('Position',[700 200 400 400]);
set(gcf,'Name','Elevation Slice','NumberTitle','off');
polar(rot(1:361)',r(1:361)','-r');
 
%Polar Azimuth plot from 0 to -40dB
figure('Position',[700 700 400 400]);
set(gcf,'Name','Azimuth Slice','NumberTitle','off');
polar(rot(3250:3610)',r(3250:3610)','-r');
 
%3D Plot initialisation
MOVFIG = figure('Position',[20 600 640 480]);
set(gcf,'Name','3D Polar plot','NumberTitle','off');
 
 
%Develop a uniform grid in 2 degree steps for az and el
azs = -180*pi/180;
azi = 2*pi/180;
aze = 180*pi/180;
els = -90*pi/180;
eli = 2*pi/180;
ele = 90*pi/180;
[Az_m El_m] = meshgrid(azs:azi:aze,els:eli:ele);
 
%Interpolate the nonuniform gain data onto the uniform grid
Zi = griddata(az,el,r,Az_m,El_m,'cubic');
 
%Generate the cartesian coordinates
[x y z] = sph2cart(Az_m,El_m,Zi);
 
%Plot surface and colour according to Zi
surf(x,y,z,Zi)
 
%colourmap and colorbar
colormap(jet(1024));
%c_vect = [0 40];
%caxis(c_vect);
%colorbar
 
%OpenGL renderer lighting and shading
set(gcf,'renderer','OpenGL',   'resize','off');
lighting phong
shading interp
set(gcf,'color',[0.6 0.6 0.6]);
 
%Light Source 1 and 2
g = light;
p = light;
set(g,'Style','infinite',    'position',[1 1 1]);
set(p,'Style','infinite',    'position',[-1 -1 -1]);
 
%Other items
material shiny
axis off vis3d
box off
view([45,0])
drawnow
 
%Create movie if you wish
nFrames = 180;
mov(1:nFrames) = struct('cdata',[],  'colormap',[]);
fork = 1:nFrames
  view([k*2,0])
   mov(k) = getframe(gcf);
end
movie2avi(mov, 'Ant_movie2.avi', 'compression', 'none', 'fps',30, 'colormap', 'jet');