Main Content

Iridium Satellite Spot Beam Coverage on the US

This example shows how to generate and visualize Iridium satellite spot beams on the US map. The Iridium satellite antenna array is created using Phased Array System Toolbox. The satellite position is generated and viewed using Satellite Communications Toolbox. The spot beam coverage map is displayed as the antenna array is steered.


The Iridium satellite system is a low-Earth-orbit (LEO) satellite constellation system that provides high-quality voice and data communications. This system consists of 66 satellites distributed along six polar orbital planes. Each satellite’s main mission array (MMA) is a 120-element L-band uniform rectangular array (URA). The MMA can generate 48 fixed spot beams towards earth using analog beamforming technology.

Create an Iridium Satellite Main Mission Array

An Iridium satellite adopts a 12-by-10 element URA as its MMA. Configure the MMA using Uniform Rectangular Array.

% Iridium satellite frequency
freqLow = 1616e6;                                       % Hz
freqHigh = 1626.5e6;                                    % Hz
freq = (freqLow + freqHigh)/2;                          % Hz

% Determine the wavelength
lambda = physconst('LightSpeed')/freq;

% Define array size in row and column
nrow = 12;
ncol = 10;

% Define row and column element spacing
drow = lambda/2;
dcol = lambda/2;

% Configure Iridium 120-element MMA
iridiumArray = phased.URA(...
    'Size',[nrow ncol],...
    'ElementSpacing',[drow dcol],...
iridiumArray.Element.BackBaffled = true;

% View Iridium MMA

View the 3D directivity pattern of Iridium MMA.

% Plot 3D directivity pattern of Iridium MMA

Create Satellite Scenario

Create a satellite scenario using satelliteScenario (Satellite Communications Toolbox). Specify a start time and duration of 60s for the scenario.

% Define start and end time
startTime = datetime(2021,3,17,22,52,0);               % 17 March 2021 10:52 PM UTC
stopTime = startTime + minutes(1);                     % 17 March 2021 10:53 PM UTC
sampleTime = 60;                                       % s

% Configure satellite scenario
sc = satelliteScenario(startTime,stopTime,sampleTime);

Set Keplerian elements of an Iridium satellite such that the satellite passes above the US.

% Define the semimajor axis of the orbit of the satellite
semiMajorAxis = (6371 + 780)*1e3;                       % m

% Define the shape of the orbit of the satellite
eccentricity = 0;

% Define the inclination angle
inclination = 86.4;                                     % degrees

% Define the argument of periapsis 
argOfPeriapsis = 0;                                     % degrees

% Define the right ascension of ascending node
raan = 55;                                              % degrees

% Define the true anomaly
trueAnomaly = 38;                                       % degrees

Configure the Keplerian elements of the Iridium satellite using the satelliteScenarioViewer (Satellite Communications Toolbox) object.

% Configure Iridium satellite
iridiumSat = satellite(sc, semiMajorAxis, ...
    eccentricity, ...
    inclination, ...
    raan, ...
    argOfPeriapsis, ...
    trueAnomaly, ...
    Name = "Iridium Satellite", ...
    OrbitPropagator = "two-body-keplerian");

View satellite scenario by using satelliteScenarioViewer (Satellite Communications Toolbox).

% Satellite scenario
v = satelliteScenarioViewer(sc,ShowDetails=false); 

thumbnail_satelliteviewerUS Small.png

Configure Iridium Satellite 48 Spot Beam

The Iridium satellite has 48 spot beams. These beams are arranged in 4 tiers. The following figure shows the spot beam indices and the 4-tier structure with different tiers drawn in different colors.

thumbnail_iridiumSpotBeamConfig Small.png

% Number of spot beams
numSpotBeam = 48;

% Define 48 spot beam indices in 4 tiers
tier1 = [16,32,48];                                     % inner-most beams
tier2 = [13:15,29:31,45:47];                            % inner-middle beams
tier3 = [8:12,24:28,40:44];                             % outer-middle beams
tier4 = [1:7,17:23,33:39];                              % outer-most beams

% Define transmission parameters
maxRange = 5e6;                                         % m
transmitterPower = 11;                                  % watts
thetaoffset = [11,19,33,45];                            % degrees

% Define signal strength range
sigstrengthlow = -105;                                  % dBm
sigstrengthhigh = -95;                                  % dBm
sigstrengths = sigstrengthlow:sigstrengthhigh; 
sigcolors = [sigstrengthlow,sigstrengthhigh];

Display Iridium Satellite 48 Spot Beam Coverage on the US

The 48 spot beams are formed using transmit beamforming at the Iridium satellite. Configure steering vector of the Iridium array using phased.SteeringVector.

% Configure steering vector for spot beam beamforming
steeringvector = phased.SteeringVector("SensorArray",iridiumArray);

Obtain Iridium satellite position using states (Satellite Communications Toolbox) function of the satelliteScenarioViewer (Satellite Communications Toolbox) object.

% Obtain Iridium satellite position 
iridiumpos = states(iridiumSat,startTime,"CoordinateFrame","geographic");

Create the satellite as a txsite (Antenna Toolbox) in siteviewer (Antenna Toolbox), which supports terrestrial RF propagation analysis and visualization.

% Configure site viewer to view spot beams
viewer = siteviewer('Terrain','none');

% Loop beam index to plot 48 spot beams
for beamIdx = 1:numSpotBeam
    % Configure phi/theta angles for each spot beam
    if any(ismember(beamIdx,tier1))
        k = find(beamIdx == tier1);
        phi = 360/numel(tier1)*(k-1);                   % degrees
        theta = thetaoffset(1);                         % degrees
    elseif any(ismember(beamIdx,tier2))
        k = find(beamIdx == tier2);
        phi = 360/numel(tier2)*(k-1);                   % degrees
        theta = thetaoffset(2);                         % degrees
    elseif any(ismember(beamIdx,tier3))
        k = find(beamIdx == tier3);
        phi = 360/numel(tier3)*(k-1);                   % degrees
        theta = thetaoffset(3);                         % degrees
        k = find(beamIdx == tier4);
        phi = 360/numel(tier4)*(k-1);                   % degrees
        theta = thetaoffset(4);                         % degrees

    % Convert steering angle from phi/theta form to azimuth/elevation form
    azel = phitheta2azel([phi;theta]);

    % Set transmit beamforming weights for a spot beam
    sv = steeringvector(freq,azel);
    iridiumArray.Taper = sv';

    % Configure the transmit site for a spot beam
    spotbeam = txsite("Name","Iridium-Next Satellite Tx",...
        "Latitude",iridiumpos(1), ...
        "Longitude",iridiumpos(2), ...

    % Plot 3D beam pattern in animation

    % Display coverage map

thumbnail_4tierSpotBeamUS Small.png


This example shows how to create an antenna array using Phased Array System Toolbox. This example also shows how to generate a satellite scenario using Satellite Communications Toolbox. Through this example, you learned how to display different beams generated by an antenna array on a map.


[1] Attachment EngineeringStatement SAT-MOD-20131227-00148. Accessed 9 June. 2023.

[2] Attachment Exhibit A SAT-MOD-20131227-00148. Accessed 9 June. 2023.

[3] Manual for ICAO Aeronautical Mobile Satellite (Route) Service, Part 2-Iridium, Draft v4.0. Accessed 9 June. 2023.

[4] L. Yu, J. Wan, K. Zhang, F. Teng, L. Lei and Y. Liu, "Spaceborne Multibeam Phased Array Antennas for Satellite Communications," in IEEE Aerospace and Electronic Systems Magazine, vol. 38, no. 3, pp. 28-47, 1 March 2023, doi: 10.1109/MAES.2022.3231580.