Main Content

link

Add link analysis objects to transmitter

Since R2021a

Description

link(asset1,asset2,...,assetN) adds Link analysis objects defined by nodes asset1, asset2, and so on.

example

lnk = link(___,Name=Value) adds link analysis objects using additional parameters specified as name-value pairs.

lnk = link(___) adds link analysis objects and returns the vector link

Examples

collapse all

Create a satellite scenario object.

startTime = datetime(2020,11,25,0,0,0);
stopTime = startTime + days(1);
sampleTime = 60;                                     % seconds
sc = satelliteScenario(startTime,stopTime,sampleTime)
sc = 
  satelliteScenario with properties:

         StartTime: 25-Nov-2020
          StopTime: 26-Nov-2020
        SampleTime: 60
      AutoSimulate: 1
        Satellites: [1×0 matlabshared.satellitescenario.Satellite]
    GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
         Platforms: [1×0 matlabshared.satellitescenario.Platform]
           Viewers: [0×0 matlabshared.satellitescenario.Viewer]
          AutoShow: 1

Add a satellite to the scenario.

semiMajorAxis = 10000000;                                                                  % meters
eccentricity = 0;
inclination = 60;                                                                          % degrees
rightAscensionOfAscendingNode = 0;                                                         % degrees
argumentOfPeriapsis = 0;                                                                   % degrees
trueAnomaly = 0;                                                                           % degrees
sat = satellite(sc,semiMajorAxis,eccentricity,inclination,rightAscensionOfAscendingNode, ...
        argumentOfPeriapsis,trueAnomaly,Name="Satellite");

Add gimbals to the satellite. These gimbals enable the satellite receiver antenna to steer to the first ground station, and its transmitter antenna to steer to the second ground station.

gimbalrxSat = gimbal(sat);
gimbaltxSat = gimbal(sat);

Add a receiver to the first gimbal of the satellite.

gainToNoiseTemperatureRatio = 5;                                                        % dB/K
systemLoss = 3;                                                                         % dB
rxSat = receiver(gimbalrxSat,Name="Satellite Receiver",GainToNoiseTemperatureRatio= ...
    gainToNoiseTemperatureRatio,SystemLoss=systemLoss)
rxSat = 
  Receiver with properties:

                           Name:  Satellite Receiver
                             ID:  4
               MountingLocation:  [0; 0; 0] meters
                 MountingAngles:  [0; 0; 0] degrees
                        Antenna:  [1x1 satcom.satellitescenario.GaussianAntenna]
                     SystemLoss:  3 decibels
                PreReceiverLoss:  3 decibels
    GainToNoiseTemperatureRatio:  5 decibels/Kelvin
                   RequiredEbNo:  10 decibels
                 CoordinateAxes:  [1x1 matlabshared.satellitescenario.CoordinateAxes]

Add a transmitter to the second gimbal of the satellite.

frequency = 27e9;                                                                     % Hz
power = 20;                                                                           % dBW
bitRate = 20;                                                                         % Mbps
systemLoss = 3;                                                                       % dB
txSat = transmitter(gimbaltxSat,Name="Satellite Transmitter",Frequency=frequency, ...
    power=power,BitRate=bitRate,SystemLoss=systemLoss)
txSat = 
  Transmitter with properties:

                Name:  Satellite Transmitter
                  ID:  5
    MountingLocation:  [0; 0; 0] meters
      MountingAngles:  [0; 0; 0] degrees
             Antenna:  [1x1 satcom.satellitescenario.GaussianAntenna]
          SystemLoss:  3 decibels
           Frequency:  2.7e+10 Hertz
             BitRate:  20 Mbps
               Power:  20 decibel-watts
               Links:  [1x0 satcom.satellitescenario.Link]
      CoordinateAxes:  [1x1 matlabshared.satellitescenario.CoordinateAxes]

Specify the antenna specifications of the repeater.

dishDiameter = 0.5;                                                                    % meters
apertureEfficiency = 0.5;
gaussianAntenna(txSat,DishDiameter=dishDiameter,ApertureEfficiency=apertureEfficiency);
gaussianAntenna(rxSat,DishDiameter=dishDiameter,ApertureEfficiency=apertureEfficiency);

Add two ground stations to the scenario.

gs1 = groundStation(sc,Name="Ground Station 1");
latitude = 52.2294963;                                              % degrees
longitude = 0.1487094;                                              % degrees
gs2 = groundStation(sc,latitude,longitude,Name="Ground Station 2");

Point gimbals of the satellite towards the two ground stations for the simulation duration.

pointAt(gimbaltxSat,gs2);
pointAt(gimbalrxSat,gs1);

Add gimbals to the ground stations. These gimbals enable the ground station antennas to steer towards the satellite.

gimbalgs1 = gimbal(gs1);
gimbalgs2 = gimbal(gs2);

Add a transmitter to ground station gs1.

frequency = 30e9;                                                                          % Hz
power = 40;                                                                                % dBW
bitRate = 20;                                                                              % Mbps
txGs1 = transmitter(gimbalgs1,Name="Ground Station 1 Transmitter",Frequency=frequency, ...
        Power=power,BitRate=bitRate);

Add a receiver to ground station gs2.

requiredEbNo = 14;                                                                     % dB
rxGs2 = receiver(gimbalgs2,Name="Ground Station 2 Receiver",RequiredEbNo=requiredEbNo);

Define the antenna specifications of the ground stations.

dishDiameter = 5;                                % meters
gaussianAntenna(txGs1,DishDiameter=dishDiameter);
gaussianAntenna(rxGs2,DishDiameter=dishDiameter);

Point gimbals of the ground stations towards the satellite for the simulation duration.

pointAt(gimbalgs1,sat);
pointAt(gimbalgs2,sat);

Add link analysis to transmitter txGs1.

lnk = link(txGs1,rxSat,txSat,rxGs2)
lnk = 
  Link with properties:

    Sequence:  [10 4 5 11]
    LineWidth:  2
    LineColor:  [0.3922 0.8314 0.0745]

Determine the times when ground station gs1 can send data to ground station gs2 via the satellite.

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

    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          1           25-Nov-2020 00:20:00    25-Nov-2020 00:40:00      1200         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          2           25-Nov-2020 03:19:00    25-Nov-2020 03:36:00      1020         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          3           25-Nov-2020 06:15:00    25-Nov-2020 06:36:00      1260         NaN          NaN   
    "Ground Station 1 Transmitter"    "Ground Station 2 Receiver"          4           25-Nov-2020 22:20:00    25-Nov-2020 22:38:00      1080         NaN          NaN   

Visualize the link by using the Satellite Scenario Viewer.

play(sc);

The example shows a scenario where the link and link intervals change with the change in inclination of the satellite.

startTime = datetime(2024,6,1,0,0,0);
stopTime = startTime + hours(4);
sampleTime = 60;% seconds
sc = satelliteScenario(startTime,stopTime,sampleTime);

Add satellite 1 to the scenario and a transmitter to it.

sat1 = satellite(sc,10e6,0,0,0,0,0,Name="Satellite 1");
txSat1 = transmitter(sat1,Name="Satellite 1 Transmitter");

Add satellite 2 to the scenario and a receiver to it.

sat2= satellite(sc,10e6,0,0,10,0,0,Name="Satellite 2");
rxSat2 = receiver(sat2,Name="Satellite 2 Receiver"); 

Add a ground station to the scenario.

latitude = 49.8728; % degrees
longitude = 8.6512; % degrees
gs = groundStation(sc,latitude,longitude,Name="Ground Station");

Point the two satellite at the ground station.

pointAt(sat1,gs)
pointAt(sat2,gs)

Add gimbals to the ground station.

gimbalrxGs = gimbal(gs);
gimbaltxGs = gimbal(gs);

Add transmitter and receiver to the ground station.

rxGs = receiver(gimbalrxGs,Name="Ground Station Receiver");
txGs = transmitter(gimbaltxGs,Name="Ground Station Transmitter");

Point ground station transmitter and receiver to the satellite.

pointAt(gimbalrxGs,sat1)
pointAt(gimbaltxGs,sat2)

Calculate the link between the ground station and satellites.

lnk1 = link(txSat1,rxGs,txGs,rxSat2)
lnk1 = 
  Link with properties:

    Sequence:  [2 8 9 4]
    LineWidth:  2
    LineColor:  [0.3922 0.8314 0.0745]

Find the link intervals.

linkIntervals(lnk1)
ans=1×8 table
             Source                      Target            IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    _________________________    ______________________    ______________    ____________________    ____________________    ________    __________    ________

    "Satellite 1 Transmitter"    "Satellite 2 Receiver"          1           01-Jun-2024 02:10:00    01-Jun-2024 02:14:00      240           1            1    

Link interval from lnk1 shows that a valid link exists from satellit1 to satellite2 going through the ground station for a period of 7560 seconds.

Update the scenario so that satellites are pointing at each other.

pointAt(sat1,sat2)
pointAt(sat2,sat1)

Calculate the link interval for lnk1 with the updated scenario.

linkIntervals(lnk1)
ans =

  0×8 empty table

    Source    Target    IntervalNumber    StartTime    EndTime    Duration    StartOrbit    EndOrbit
    ______    ______    ______________    _________    _______    ________    __________    ________

The linkInterval from lnk1 shows no intervals exist for the duration of the scenario as the ground station is no longer pointed at by either satellite antenna.

Create a new link object, lnk2, from satellite 1 directly to satellite 2

lnk2 = link(txSat1,rxSat2)
lnk2 = 
  Link with properties:

    Sequence:  [2 4]
    LineWidth:  2
    LineColor:  [0.3922 0.8314 0.0745]

Calculate the link interval for lnk2 in the updated scenario.

linkIntervals(lnk2)
ans=1×8 table
             Source                      Target            IntervalNumber     StartTime           EndTime           Duration    StartOrbit    EndOrbit
    _________________________    ______________________    ______________    ___________    ____________________    ________    __________    ________

    "Satellite 1 Transmitter"    "Satellite 2 Receiver"          1           01-Jun-2024    01-Jun-2024 04:00:00     14400          1            2    

Shows a link interval over the entire scenario because the satellites are pointed at each other for the entire scenario

Input Arguments

collapse all

Adds link analysis objects defined by asset nodes, specified as a scalar or vector. The asset type must be either a transmitter object or a receiver object. asset1 must always be a transmitter and assetN must always be a receiver object.

  • If the asset in a given node is scalar, every link analysis object uses the same asset for that node position.

  • If the asset in a given node is vector, the asset length must equal the number of link analysis objects.

  • If there are more than 2 inputs, you create a multi-hop link model and each transmitter and receiver must be passed in an alternating order like tx1,rx1,tx2,rx2. Here the assets with the same id numbers must belong to the same satellite or ground station. Each multi-hop is also a separate sequence of dimensions [1,n].

Each link analysis object uses the corresponding element of the asset vector for that node location. The IDs of ASSET1, ASSET2, ASSET3, and so on, specify the Sequence of the link. These objects must belong to the same satelliteScenario object. Each link analysis object is added to the Link property of the corresponding transmitter in ASSET1.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: LineWidth=2.5 sets the line width of the field of view to 2.5 pixels.

Satellite scenario viewer, specified as a scalar, vector, or array of satelliteScenarioViewer objects. If the AutoSimulate property of the scenario is false, adding a satellite to the scenario disables any previously available timeline and playback widgets.

Output Arguments

collapse all

Link analysis object between input objects, returned as either a scalar or a row vector.

Note

When AutoSimulate of the satellite scenario is false, you can call link only when the SimulationStatus is NotStarted. Otherwise, you must call the restart function to erase the simulation data and reset the SimulationStatus to NotStarted.

Version History

Introduced in R2021a