Main Content

Aircraft-to-Satellite Communication for ADS-B Out

This example examines the Automatic Dependent Surveillance–Broadcast (ADS-B) Out connectivity of a flight from JFK International Airport in New York to L.F. Wade International Airport in Bermuda. The ADS-B Out system can connect to a variety of targets including airports and the Iridium NEXT satellite constellation. As a result, even while the aircraft does not have a direct line of sight with any ground station due to the Earth curvature over open water, the satellite ADS-B connection allows the aircraft to still provide continuous attitude, GPS position, and status to all other aircraft and airports interested in the aircraft state. The ADS-B Out system responds to the strongest ADS-B update initiator. The omnidirectional antennas on the top and bottom of the aircraft broadcast out to initiate the ADS-B update.

This example consists of three main parts:

  1. Create the scenario containing an aircraft, airports, and Iridium satellite network.

  2. Perform access analysis to determine when the aircraft has line-of-sight access with the airports or satellites within the Iridium network.

  3. Perform link closure analysis of the ADS-B Out system with the airports and the satellites.

This example uses:

  • Satellite Communications Toolbox satelliteScenario object to analyze and visualize the results for the satellite, aircraft, and ground station.

  • (Optionally) You can also create satelliteScenario (Aerospace Toolbox) object using Aerospace Toolbox.

  • Satellite Communications Toolbox link and linkIntervals functions to determine communications links.

  • (Optionally) Phased Array System Toolbox phased.CosineAntennaElement (Phased Array System Toolbox) functions to approximate the 48-beam antenna pattern of the Iridium satellite.

For more information on the Iridium NEXT satellite constellation and network, see

Create Scenario

Create a satellite scenario. Specify a start date and duration for the scenario. Set the duration to equal to the flight time from New York to Bermuda, approximately 2 hours.

startTime = datetime(2023,10,9,7,10,0,TimeZone="America/New_York");
stopTime = startTime + hours(2) + minutes(2);
sampleTime = 10;                                      %seconds
sc = satelliteScenario(startTime,stopTime,sampleTime);
viewer = satelliteScenarioViewer(sc);


Set the airport properties to use in the scenario.

airportName = ["JFK International (New York)";...
    "L.F. Wade International (Bermuda)"];
airportLat = [40.6413;32.3634];
airportLon = [-73.7781;-64.7053];

Add the airports to the scenario using the groundStation function.

airports = groundStation(sc,airportLat,airportLon,Name=airportName);


Create a geoTrajectory (Sensor Fusion and Tracking Toolbox) System object™ from a set of waypoints and arrival times typical of a flight, taking off from JFK International Airport and landing at L.F. Wade International Airport. The geoTrajectory System object generates trajectories based on waypoints in geodetic coordinates. Set the flight time based on the scenario duration.

waypoints = [... % Latitude (deg), Longitude (deg), Altitude (meters)

timeOfArrival = duration([... % time (HH:mm:ss)

trajectory = geoTrajectory(waypoints,seconds(timeOfArrival),AutoPitch=true,AutoBank=true);

Output the latitude, longitude, and altitude (LLA) waypoints of the aircraft trajectory at the sample rate of the scenario.

LLA = lookupPose(trajectory,0:sc.SampleTime:max(seconds(timeOfArrival)));

Visualize the aircraft trajectory using geoplot.

geoplot(LLA(:,1), LLA(:,2), "b-")
geobasemap topographic;

Figure contains an axes object with type geoaxes. The geoaxes object contains an object of type line.

Add the aircraft to the scenario using the platform function. The platform function allows you to add platforms, such as aircraft, cars, or ships, to the scenario and perform access analysis with satellites, ground stations, and other platforms. Use the Visual3DModel property to add a visual representation of the aircraft to the scenario. For this example, use the NarrowBodyAirliner.glb file.

aircraft = platform(sc,trajectory, Name="Aircraft", Visual3DModel="NarrowBodyAirliner.glb");



The Iridium NEXT satellite network, launched between 2018 and 2019 [1], contains 66 active LEO satellites with:

  • Six orbital planes with an approximate inclination of 86.6 degrees and difference of RAAN of approximately 30 degrees between planes [1].

  • 11 satellites per orbital plane with an approximate difference in true anomaly of 32.7 degrees between satellites [1].

Add the active Iridium NEXT satellites to the scenario. Create the orbital elements for the satellites in the Iridium network and create the satellites using the satellite function.

numSatellitesPerOrbitalPlane = 11;
numOrbits = 6;

orbitIdx = repelem(1:numOrbits,1,numSatellitesPerOrbitalPlane);
planeIdx = repmat(1:numSatellitesPerOrbitalPlane,1,numOrbits);

RAAN = 180*(orbitIdx-1)/numOrbits;
trueanomaly = 360*(planeIdx-1 + 0.5*(mod(orbitIdx,2)-1))/numSatellitesPerOrbitalPlane;
semimajoraxis = repmat((6371 + 780)*1e3,size(RAAN)); % meters
inclination = repmat(86.4,size(RAAN)); % degrees
eccentricity = zeros(size(RAAN)); % degrees
argofperiapsis = zeros(size(RAAN)); % degrees

iridiumSatellites = satellite(sc,...
    Name="Iridium " + string(1:66)');

If you have a license for Aerospace Toolbox, you can also create the Iridium constellation using the walkerStar (Aerospace Toolbox) function.

As many satellites share common orbital planes, display the orbital path of only the first satellite in each plane.


Add conical sensors to the Iridium satellites to act as cameras to establish visual access between the satellites and the aircraft.

iridiumConicalSensors = conicalSensor(iridiumSatellites,"MaxViewAngle",125);

Aircraft Access Analysis

Determine access analysis between the aircraft, airports, and satellites using the scenario. Calculate the access interval between the aircraft and airports using the access and accessIntervals functions based on when the aircraft has line-of-sight access to the airport. JFK and L.F. Wade airports can see the aircraft during the first and last two hours of the flight, respectively. Otherwise the aircraft is blocked by the curvature of the Earth.

acAirport = access(aircraft,sc.GroundStations);
airportAccessIntvls = accessIntervals(acAirport)
airportAccessIntvls=2×8 table
      Source                    Target                   IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    __________    ___________________________________    ______________    ____________________    ____________________    ________    __________    ________

    "Aircraft"    "JFK International (New York)"               1           09-Oct-2023 11:10:00    09-Oct-2023 11:43:10      1990         NaN          NaN   
    "Aircraft"    "L.F. Wade International (Bermuda)"          1           09-Oct-2023 12:29:50    09-Oct-2023 13:12:00      2530         NaN          NaN   

Calculate a similar access analysis between the aircraft and the satellites based on the visibility of the aircraft within the conical sensors' field of view. This serves as a first-round approximation of the Iridium multi-beam antenna shown in the next section. The dashed lines in the viewer show the line-of-sight access from the aircraft body to the airports and satellites.

acSatellite = access(aircraft,iridiumConicalSensors);
satelliteAccessIntvls = accessIntervals(acSatellite);

Screenshot 2023-10-22 125530.png

[sSatellite,time] = accessStatus(acSatellite); 
satVisPlotData = double(sSatellite);
satVisPlotData(satVisPlotData == false) = NaN; % Hide invisible satellites.
satVisPlotData = satVisPlotData + (0:numel(iridiumSatellites)-1)'; % Add space to satellites to be stacked.

plot(time,satVisPlotData," .",Color="blue")
title("Satellite Visibility")
grid on
axis tight

Figure contains an axes object. The axes object with title Satellite Visibility, xlabel Time contains 66 objects of type line. One or more of the lines displays its values using only markers

The access intervals computation shows that the aircraft has continuous satellite communication access with the Iridium network when the aircraft is over the open ocean. Combined with the airport access, the aircraft has continuous line-of-sight access throughout the flight.

Aircraft Link Analysis

After establishing that the aircraft maintains a direct connection with either airports and the Iridium network throughout the flight, generate a link budget for the respective ground and satellite-based ADS-B Out systems. The ADS-B Out system uses the existing Mode A/C and S transponder antennas located on the top and bottom of the aircraft, respectively. ADS-B uses the Mode S of the transponder and operates the ADS-B Out on a frequency of 1090 MHz with a minimum effective isotropic radiated power (EIRP) of 125 Watts.

fADSB = 1090e6; % 1090 MHz

For this example, model the pair of Mode-S transponders as a single isotropic transmitter located near the top-front of the aircraft. The mounting location corresponds to the approximate location of the top mounted ADS-B transceiver on a typical commercial aircraft. Since an isotropic antenna has an effective gain of 0 dBi, setting the transmission amplifier power output to 125 Watts also results in a radiated power from the antenna of 125 Watts.

aircraftADSBAntenna = arrayConfig("Size",[1 1]); % Create an isotropic antenna element

aircraftADSBTransmitter = transmitter(aircraft, ...
    Antenna = aircraftADSBAntenna, ...
    Frequency = fADSB,...
    Power=10*log10(125),...     % ADS-B Out minimum as EIRP of 125 Watts
    Name="ADS-B Aircraft Transmitter");

Aircraft to Airport ADS-B Out Link

Add isotropic antennas and receivers to the airports.

% Airport Antenna 
airportADSBAntenna = arrayConfig("Size",[1 1]); % Create an isotropic antenna element
airportADSBReceiver = receiver(...
    airports, ...
    Antenna=airportADSBAntenna, ...    
    Name=airports.Name + " Receiver");

Aircraft to Satellite ADS-B Out Link

Using Satellite Communication Toolbox, you can model the antenna on the Iridium satellite as an isotropic antenna. If you have a license for Phased Array System Toolbox, you can model an approximation of the custom 48-beam antenna used by the Iridium NEXT satellites [2]. Use the drop-down list to select the antenna to model. The solid lines in the viewer show viable links from the aircraft antenna to the airports and satellites.

antennaType = "Isotropic";

Simulate Iridium Satellites Link with Isotropic Antennas

Create and add an isotropic antenna receiver to the Iridium satellites.

if antennaType == "Isotropic"
    % Create and add an isotropic antenna receiver to the Iridium satellites.
    satelliteADSBAntenna = arrayConfig("Size",[1 1]); % Add code comment    
    satelliteADSBReceiver = receiver(iridiumSatellites, ...
        Antenna=satelliteADSBAntenna, ...
        MountingAngles=[0,0,0], ...
        Name=iridiumSatellites.Name + " Receiver");

    % Play the scenario.

Screenshot 2023-10-22 122214.png

Simulate Iridium Satellites Link with Custom 48-Beam Antenna

Create and add a custom antenna element receiver to the Iridium satellites using the HelperCustom48BeamAntenna convenience function.

Note: The mounting angle matches the default frames of Phased Array System Toolbox and the Satellite Communications Toolbox.

if antennaType == "Custom 48-Beam"
    % Use Custom Antenna Element on 48-spot beam    
    satelliteADSBAntenna = HelperCustom48BeamAntenna(fADSB);
    satelliteADSBReceiver = receiver(iridiumSatellites, ...
        Antenna=satelliteADSBAntenna, ...
        MountingAngles=[0,-90,0], ...
        Name=iridiumSatellites.Name + " Receiver");

    % Play the scenario.

Screenshot 2023-10-22 124447.png

ADS-B Out Link Closure Times

Add ADS-B Out link analysis from the aircraft to airports and satellites.

lnkADSB = link(aircraftADSBTransmitter, [airportADSBReceiver, satelliteADSBReceiver]);

Plot the maximum margin for the link to any of the available receivers. The margin is the received Eb/No minus the required Eb/No for that receiver.

[eL,time] = ebno(lnkADSB);
marginADSB = eL - repmat([airportADSBReceiver.RequiredEbNo,satelliteADSBReceiver.RequiredEbNo]',[1,size(eL,2)]);
axis tight
grid on
ylabel("Margin (dB)");
title("ADS-B Out Link Margin vs. Time");

Figure contains an axes object. The axes object with title ADS-B Out Link Margin vs. Time, xlabel Time, ylabel Margin (dB) contains an object of type line.

Aircraft Chase View

Optionally, create a second viewer to follow or chase the aircraft and visualize the access and links relative to the aircraft body. The mouse can then be used to adjust the view of the aircraft as shown in the image.

aircraftViewer = satelliteScenarioViewer(sc);
aircraftViewer.Position = aircraftViewer.Position + [200 200 0 0]; % Reposition aircraft viewer
aircraftViewer.PlaybackSpeedMultiplier = 5;;


[1] Attachment EngineeringStatement SAT-MOD-20131227-00148. Accessed 17 Jan. 2023.

[2] Attachment Exhibit A SAT-MOD-20131227-00148. Accessed 17 Jan. 2023.