Main Content

Multi-Hop Satellite Communications Link Between Two Ground Stations

This example demonstrates how to set up a multi-hop satellite communications link between two ground stations. The first ground station is located in India (Ground Station 1), and the second ground station is located in Australia (Ground Station 2). The link is routed via two satellites (Satellite 1 and Satellite 2). Each satellite acts as a regenerative repeater. A regenerative repeater receives an incoming signal, and then demodulates, remodulates, amplifies, and retransmits the received signal. The times over the course of a day during which Ground Station 1 can send data to Ground Station 2 are determined.

Create Satellite Scenario

Use satelliteScenario to create a satellite scenario. Use datetime to define the start time and stop time of the scenario. Set the sample time to 60 seconds.

startTime = datetime(2020,8,19,20,55,0); % 19 August 2020 8:55 PM UTC
stopTime = startTime + days(1);          % 20 August 2020 8:55 PM UTC
sampleTime = 60;                         % seconds
sc = satelliteScenario(startTime,stopTime,sampleTime);

Launch Satellite Scenario Viewer

Use satelliteScenarioViewer to launch a Satellite Scenario Viewer.

satelliteScenarioViewer(sc);

Add the Satellites

Use satellite to add Satellite 1 and Satellite 2 to the scenario by specifying their Keplerian orbital elements corresponding to the scenario start time.

semiMajorAxis = 10000000;          % meters
eccentricity = 0;
inclination = 0;                   % degrees
rightAscensionOfAscendingNode = 0; % degrees
argumentOfPeriapsis = 0;           % degrees
trueAnomaly = 0;                   % degrees
sat1 = satellite(sc, ...
    semiMajorAxis, ...
    eccentricity, ...
    inclination, ...
    rightAscensionOfAscendingNode, ...
    argumentOfPeriapsis, ...
    trueAnomaly, ...
    "Name","Satellite 1", ...
    "OrbitPropagator","two-body-keplerian");
semiMajorAxis = 10000000;            % meters
eccentricity = 0;
inclination = 30;                    % degrees
rightAscensionOfAscendingNode = 120; % degrees
argumentOfPeriapsis = 0;             % degrees
trueAnomaly = 300;                   % degrees
sat2 = satellite(sc, ...
    semiMajorAxis, ...
    eccentricity, ...
    inclination, ...
    rightAscensionOfAscendingNode, ...
    argumentOfPeriapsis, ...
    trueAnomaly, ...
    "Name","Satellite 2", ...
    "OrbitPropagator","two-body-keplerian");

Add Gimbals to the Satellites

Use gimbal to add gimbals to the satellites. Each satellite consists of two gimbals on opposite sides of the satellite. One gimbal holds the receiver antenna and the other gimbal holds the transmitter antenna. The mounting location is specified in cartesian coordinates in the body frame of the satellite, which is defined by (xˆS,yˆS,zˆS), where xˆS, yˆS and zˆS are the roll, pitch and yaw axes respectively, of the satellite. The mounting location of the gimbal that holds the receiver is -yˆS+2zˆS meters and that of the gimbal that holds the transmitter is yˆS+2zˆS meters, as illustrated in the diagram below.

gimbalSat1Tx = gimbal(sat1, ...
    "MountingLocation",[0;1;2]);  % meters
gimbalSat2Tx = gimbal(sat2, ...
    "MountingLocation",[0;1;2]);  % meters
gimbalSat1Rx = gimbal(sat1, ...
    "MountingLocation",[0;-1;2]); % meters
gimbalSat2Rx = gimbal(sat2, ...
    "MountingLocation",[0;-1;2]); % meters

Add Receivers and Transmitters to the Gimbals

Each satellite consists of a receiver and a transmitter, constituting a regenerative repeater. Use receiver to add a receiver to the gimbals gimbalSat1Rx and gimbalSat2Rx. The mounting location of the receiving antenna with respect to the gimbal is zˆG meters, as illustrated in the diagram above. The receiver gain to noise temperature ratio is 3dB/K and the required Eb/No is 4 dB.

sat1Rx = receiver(gimbalSat1Rx, ...
    "MountingLocation",[0;0;1], ...      % meters
    "GainToNoiseTemperatureRatio",3, ... % decibels/Kelvin
    "RequiredEbNo",4);                   % decibels
sat2Rx = receiver(gimbalSat2Rx, ...
    "MountingLocation",[0;0;1], ...      % meters
    "GainToNoiseTemperatureRatio",3, ... % decibels/Kelvin
    "RequiredEbNo",4);                   % decibels

Use gaussianAntenna to set the dish diameter of the receiver antennas on the satellites to 0.5 m. A Gaussian antenna has a radiation pattern that peaks at its boresight and decays radial-symmetrically based on a Gaussian distribution while moving away from boresight, as shown in the diagram below. The peak gain is a function of the dish diameter and aperture efficiency.

gaussianAntenna(sat1Rx, ...
    "DishDiameter",0.5); % meters
gaussianAntenna(sat2Rx, ...
    "DishDiameter",0.5); % meters

Use transmitter to add a transmitter to the gimbals gimbalSat1Tx and gimbalSat2Tx. The mounting location of the transmitting antenna with respect to the gimbal is zˆG meters, where (xˆG,yˆG,zˆG) define the body frame of the gimbal. The boresight of the antenna is aligned with zˆG. Both satellites transmit with a power of 15 dBW. The transmitter onboard Satellite 1 is used in the crosslink for sending data to Satellite 2 at a frequency of 30 GHz. The transmitter onboard Satellite 2 is used in the downlink to Ground Station 2 at a frequency of 27 GHz.

sat1Tx = transmitter(gimbalSat1Tx, ...
    "MountingLocation",[0;0;1], ... % meters
    "Frequency",30e9, ...           % hertz
    "Power",15);                    % decibel watts
sat2Tx = transmitter(gimbalSat2Tx, ...
    "MountingLocation",[0;0;1], ... % meters
    "Frequency",27e9, ...           % hertz
    "Power",15);                    % decibel watts

Like the receiver, the transmitter also uses a Gaussian antenna. Set the dish diameter of the transmitter antennas of the satellites to 0.5 m.

gaussianAntenna(sat1Tx, ...
    "DishDiameter",0.5); % meters
gaussianAntenna(sat2Tx, ...
    "DishDiameter",0.5); % meters

Add the Ground Stations

Use groundStation to add the ground stations at India (Ground Station 1) and Australia (Ground Station 2).

latitude = 12.9436963;  % degrees
longitude = 77.6906568; % degrees
gs1 = groundStation(sc, ...
    latitude, ...
    longitude, ...
    "Name","Ground Station 1");
latitude = -33.7974039;  % degrees
longitude = 151.1768208; % degrees
gs2 = groundStation(sc, ...
    latitude, ...
    longitude, ...
    "Name","Ground Station 2");

Add Gimbal to Each Ground Station

Use gimbal to add a gimbal to Ground Station 1 and Ground Station 2. The gimbal at Ground Station 1 holds a transmitter, and the gimbal at Ground Station 2 holds a receiver. The gimbals are located 5 meters above their respective ground stations, as illustrated in the diagram below. Consequently, their mounting locations are -5zˆGS meters, where (xˆGS,yˆGS,zˆGS) define the body axis of the ground stations. xˆGS, yˆGS and zˆGS always point North, East and down respectively. Therefore, the zˆGS component of the gimbals is -5 meters so that they are placed above the ground station and not below. Furthermore, by default, the mounting angles of the gimbal are such that their body axes (xˆG,yˆG,zˆG) are aligned with the parent (in this case, the ground station) body axes (xˆGS,yˆGS,zˆGS). As a result, when the gimbals are not steered, their zˆG axis points straight down, and so does the antenna attached to it using default mounting angles as well. Therefore, you must set the mounting pitch angle to 180 degrees, so that zˆG points straight up when the gimbal is not steered.

gimbalGs1 = gimbal(gs1, ...
    "MountingAngles",[0;180;0], ... % degrees
    "MountingLocation",[0;0;-5]);   % meters
gimbalGs2 = gimbal(gs2, ...
    "MountingAngles",[0;180;0], ... % degrees
    "MountingLocation",[0;0;-5]);   % meters

Add Transmitters and Receivers to Ground Station Gimbals

Use transmitter to add a transmitter to the gimbal at Ground Station 1. The uplink transmitter sends data to Satellite 1 at a frequency of 30 GHz and a power of 30 dBW. The transmitter antenna is mounted at zˆG meters with respect to the gimbal.

gs1Tx = transmitter(gimbalGs1, ...
    "Name","Ground Station 1 Transmitter", ...
    "MountingLocation",[0;0;1], ... % meters
    "Frequency",30e9, ...           % hertz
    "Power",30);                    % decibel watts

Use gaussianAntenna to set the dish diameter of the transmitter antenna to 2 m.

gaussianAntenna(gs1Tx, ...
    "DishDiameter",2); % meters

Use receiver to add a receiver to the gimbal at Ground Station 2 to receive downlink data from Satellite 2. The receiver gain to noise temperature ratio is 3 dB/K and the required Eb/No is 1 dB. The mounting location of the receiver antenna is zˆG meters with respect to the gimbal.

gs2Rx = receiver(gimbalGs2, ...
    "Name","Ground Station 2 Receiver", ...
    "MountingLocation",[0;0;1], ...      % meters
    "GainToNoiseTemperatureRatio",3, ... % decibels/Kelvin
    "RequiredEbNo",1);                   % decibels

Use gaussianAntenna to set the dish diameter of the receiver antenna to 2 m.

gaussianAntenna(gs2Rx, ...
    "DishDiameter",2); % meters

Set Tracking Targets for Gimbals

For the best link quality, the antennas must continuously point at their respective targets. The gimbals can be steered independent of their parents (satellite or ground station), and configured to track other satellites and ground stations. Use pointAt to set the tracking target for the gimbals so that:

  • The transmitter antenna at Ground Station 1 points at Satellite 1

  • The receiver antenna aboard Satellite 1 points at Ground Station 1

  • The transmitter antenna aboard Satellite 1 points at Satellite 2

  • The receiver antenna aboard Satellite 2 points at Satellite 1

  • The transmitter antenna aboard Satellite 2 points at Ground Station 2

  • The receiver antenna at Ground Station 2 points at Satellite 2

pointAt(gimbalGs1,sat1);
pointAt(gimbalSat1Rx,gs1);
pointAt(gimbalSat1Tx,sat2);
pointAt(gimbalSat2Rx,sat1);
pointAt(gimbalSat2Tx,gs2);
pointAt(gimbalGs2,sat2);

When a target for a gimbal is set, its zˆG axis will track the target. Since the antenna is on zˆG and its boresight is aligned with zˆG, the antenna will also track the desired target.

Add Link Analysis and Visualize Scenario

Use link to add link analysis to the transmitter at Ground Station 1. The link is of regenerative repeater-type that originates at gs1Tx and ends at gs2Rx, and is routed via sat1Rx, sat1Tx, sat2Rx and sat2Tx.

lnk = link(gs1Tx,sat1Rx,sat1Tx,sat2Rx,sat2Tx,gs2Rx);

The Satellite Scenario Viewer automatically updates to display the entire scenario. Use the viewer as a visual confirmation that the scenario has been set up correctly. The green lines represent the link and confirm that the link is closed.

Determine Times When Link is Closed and Visualize Link Closures

Use the linkIntervals method to determine the times when the link is closed. The linkIntervals method outputs a table of the start and stop times of link closures that represent the intervals during which Ground Station 1 can send data to Ground Station 2. Source and Target are the first and last nodes in the link. If one of Source or Target is on a satellite, StartOrbit and EndOrbit provide the orbit count of the source or target satellite that they are attached directly or via gimbals, starting from the scenario start time. If both Source and Target are attached to a satellite, StartOrbit and EndOrbit provide the orbit count of the satellite to which Source is attached. Since both Source and Target are attached to ground stations, StartOrbit and EndOrbit are NaN.

linkIntervals(lnk)
ans=6×8 table
                Source                          Target               IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    ______________________________    ___________________________    ______________    ____________________    ____________________    ________    __________    ________

    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          1           19-Aug-2020 20:55:00    19-Aug-2020 21:20:00      1500         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          2           19-Aug-2020 23:38:00    20-Aug-2020 00:21:00      2580         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          3           20-Aug-2020 09:34:00    20-Aug-2020 09:50:00       960         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          4           20-Aug-2020 12:26:00    20-Aug-2020 12:58:00      1920         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          5           20-Aug-2020 15:25:00    20-Aug-2020 16:05:00      2400         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          6           20-Aug-2020 18:28:00    20-Aug-2020 19:13:00      2700         NaN          NaN   

Use play to visualize the scenario simulation from its start time to stop time. The green lines disappear whenever the link cannot be closed.

play(sc);

Plot Link Margin at Ground Station 2

The link margin at a receiver is the difference between the energy per bit to noise power spectral density ratio (Eb/No) at the receiver and its RequiredEbNo. For successful link closure, the link margin must be positive at all receiver nodes. Higher the link margin, better the link quality. To calculate the link margin at final node, that is, Ground Station 2 Receiver, use ebno to get the Eb/No history at the Ground Station 2 Receiver, and subtract its RequiredEbNo from this quantity to get the link margin. Also, use plot to plot the calculate link margin.

[e, time] = ebno(lnk);
margin = e - gs2Rx.RequiredEbNo;
plot(time,margin,"LineWidth",2);
xlabel("Time");
ylabel("Link Margin (dB)");
grid on;

The gaps in the plot imply that the link was broken before reaching the final node in the link, or the line of sight between final node and the node before it, that is, Satellite 2, was broken. At all other times, the link margin is positive. This implies that Satellite 2 Transmitter power and Ground Station 2 Receiver sensitivity are always sufficient. It also implies that the margin is positive at all other hops of the link.

Modify Required Eb/No and Observe Effect on Link Intervals

Increase the RequiredEbNo of the receiver at Ground Station 2 from 1 dB to 10 dB and recompute the link intervals. Increasing RequiredEbNo essentially reduces the sensitivity of Ground Station 2 Receiver. This negatively impacts the resultant link closure times. The number of closed link intervals drops from six to five, and the duration of the closed link intervals is shorter.

gs2Rx.RequiredEbNo = 10; % decibels
linkIntervals(lnk)
ans=5×8 table
                Source                          Target               IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    ______________________________    ___________________________    ______________    ____________________    ____________________    ________    __________    ________

    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          1           19-Aug-2020 20:55:00    19-Aug-2020 21:18:00      1380         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          2           19-Aug-2020 23:43:00    20-Aug-2020 00:15:00      1920         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          3           20-Aug-2020 12:30:00    20-Aug-2020 12:58:00      1680         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          4           20-Aug-2020 15:29:00    20-Aug-2020 16:05:00      2160         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          5           20-Aug-2020 18:32:00    20-Aug-2020 19:13:00      2460         NaN          NaN   

Additionally, the increase in RequiredEbNo negatively impacts the link margin. To observe this, recompute and plot the new link margin, and compare it with the previous plot. The link margin has reduced in general, implying that the link quality has gone down as a result of reducing the sensitivity of the receiver by increasing RequiredEbNo. At certain instances, the link margin is negative, signifying that there are times when the link does get broken at Ground Station 2 Receiver, even if it has line of sight to Satellite 2. This implies that the link closure is sometimes limited by the link margin, as opposed to just the line of sight between adjacent nodes.

[e, newTime] = ebno(lnk);
newMargin = e - gs2Rx.RequiredEbNo;
plot(newTime,newMargin,"r",time,margin,"b","LineWidth",2);
xlabel("Time");
ylabel("Link Margin (dB)");
legend("New link margin","Old link margin","Location","north");
grid on;

Next Steps

This example demonstrated how to set up a multi-hop regenerative repeater-type link and how to determine the times when the link is closed. The link closure times are influenced by the link margin at each receiver in the link. The link margin is the difference between energy per bit to noise power spectral density ratio (Eb/No) at the receiver and the required Eb/No. The Eb/No at a receiver is a function of:

  • Orbit and pointing mode of satellites holding the transmitters and receivers

  • Position of ground stations holding the transmitters and receivers

  • Position, orientation, and pointing mode of the gimbals holding the transmitters and receivers

  • Position and orientation of the transmitters and receivers with respect to their parents

  • Specifications of the transmitters - power, frequency, bit rate, and system loss

  • Specifications of the receivers - gain to noise temperature ratio, required Eb/No, and system loss

  • Specifications of the transmitter and receiver antennas, such as dish diameter and aperture efficiency for a Gaussian antenna

Modify the above parameters and observe their impact on the link to perform different types of what-if analyses.

See Also

Objects

Functions

Related Examples

More About