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:
Create the scenario containing an aircraft, airports, and Iridium satellite network.
Perform access analysis to determine when the aircraft has line-of-sight access with the airports or satellites within the Iridium network.
Perform link closure analysis of the ADS-B Out system with the airports and the satellites.
This example uses:
Satellite Communications Toolbox
satelliteScenario
(Satellite Communications Toolbox) 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
(Satellite Communications Toolbox) andlinkIntervals
(Satellite Communications Toolbox) functions to determine communications links.(Optionally) Phased Array System Toolbox
phased.CosineAntennaElement
functions to approximate the 48-beam antenna pattern of the Iridium satellite.
For more information on the Iridium NEXT satellite constellation and network, see https://www.iridium.com/network/.
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);
Airports
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
(Satellite Communications Toolbox) function.
airports = groundStation(sc,airportLat,airportLon,Name=airportName);
Aircraft
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) 40.6289,-73.7738,3;... 40.6325,-73.7819,3;... 40.6341,-73.7852,44;... 40.6400,-73.7974,265;... 40.6171,-73.8618,1012;... 40.5787,-73.8585,1698;... 39.1452,-71.6083,11270;... 34.2281,-66.0839,11264;... 32.4248,-64.4389,970;... 32.3476,-64.4565,574;... 32.3320,-64.4915,452;... 32.3459,-64.5712,453;... 32.3610,-64.6612,18;... 32.3621,-64.6678,3;... 32.3639,-64.6777,3]; timeOfArrival = duration([... % time (HH:mm:ss) "00:00:00";... "00:00:20";... "00:00:27";... "00:00:43";... "00:01:47";... "00:02:21";... "00:21:25";... "01:32:39";... "01:54:27";... "01:55:47";... "01:56:27";... "01:57:48";... "01:59:49";... "01:59:55";... "02:00:15"]); 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-") geolimits([31,42],[-76,-63]); geobasemap topographic;
Add the aircraft to the scenario using the platform
(Satellite Communications Toolbox) 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"); camtarget(viewer,aircraft);
Satellites
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
(Satellite Communications Toolbox) 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,... semimajoraxis,eccentricity,inclination,RAAN,argofperiapsis,trueanomaly,... 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.
hide(iridiumSatellites.Orbit,viewer); show(iridiumSatellites(1:numSatellitesPerOrbitalPlane:end).Orbit,viewer);
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
(Satellite Communications Toolbox) and accessIntervals
(Satellite Communications Toolbox) 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)
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);
[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") yticks(1:5:66) yticklabels(iridiumSatellites.Name(1:5:66)) title("Satellite Visibility") grid on xlabel("Time") axis tight
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 MountingLocation=[8,0,-2.7],... 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"); pattern(airportADSBReceiver,fADSB,Size=1000);
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"); pattern(satelliteADSBReceiver,fADSB,Size=50000); % Play the scenario. play(sc); end
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"); pattern(satelliteADSBReceiver,fADSB,Size=200000); % Play the scenario. play(sc); end
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)]); figure; plot(time,max(marginADSB),"b") axis tight grid on xlabel("Time"); ylabel("Margin (dB)"); title("ADS-B Out Link Margin vs. Time");
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;
aircraftViewer.play();
camtarget(aircraftViewer,aircraft);
References
[1] Attachment EngineeringStatement SAT-MOD-20131227-00148. https://fcc.report/IBFS/SAT-MOD-20131227-00148/1031348. Accessed 17 Jan. 2023.
[2] Attachment Exhibit A SAT-MOD-20131227-00148. https://fcc.report/IBFS/SAT-MOD-20131227-00148/1031240. Accessed 17 Jan. 2023.