주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

Orbit Propagator Block을 사용한 위성군 모델링

이 예에서는 위성 위성군의 궤도를 전파하고, 개별 위성과 여러 지상국 간의 액세스 구간을 계산하고 시각화하는 방법을 보여줍니다. 여기에는 다음이 사용됩니다.

  • Aerospace Blockset™ Orbit Propagator 블록

  • Aerospace Toolbox satelliteScenario 객체

Orbit Propagator block

Aerospace Toolbox satelliteScenario 객체를 사용하면 이전에 생성된 타임스탬프가 찍힌 ephemeris 데이터를 timeseries 또는 timetable 객체에서 시나리오로 로드할 수 있습니다. 시나리오 시간 스텝에 맞춰 시나리오 개체에 데이터가 보간되므로 Simulink® 모델에서 생성된 데이터를 새로운 또는 기존 satelliteScenario 객체에 통합할 수 있습니다. 이 예제에서는 Aerospace Blockset Orbit Propagator 블록을 사용하여 Simulink에서 위성 위성군을 전파하고, 액세스 분석을 위해 기록된 ephemeris 데이터를 satelliteScenario 객체에 로드하는 방법을 보여줍니다.

미션 파라미터 및 위성군 초기 조건 정의

임무의 시작 날짜와 기간을 지정하세요. 이 예제에서는 MATLAB® 구조를 사용하여 미션 데이터를 구성합니다. 이러한 구조를 통해 나중에 예제에서 데이터에 접근하는 것이 더 직관적이 됩니다. 또한 글로벌 기반 작업 공간을 정리하는 데 도움이 됩니다.

mission.StartDate = datetime(2020, 11, 30, 22, 23, 24);
mission.Duration  = hours(24);

이 예에서의 위성군은 유럽의 GNSS(전역 항법 위성 시스템) 위성군인 갈릴레오와 유사하게 모델링된 워커-델타 위성군입니다. 이 위성군은 중간 지구 궤도(MEO)에 있는 24개의 위성으로 구성되어 있습니다.

워커-델타 위성군은 다음 표기법을 사용합니다.

i:T/P/F

여기서 각각은 다음과 같습니다.

i= 경사각

T= 총 위성 수

P= 등간격 기하 평면의 개수

F= 인접 평면의 위성 간 간격

워커-델타 위성군은 임무 수행에 필요한 위성 수를 최소화하면서 지구 전체의 기하학적 범위를 극대화하는 데 흔히 사용되는 솔루션입니다. 갈릴레오 항법 시스템은 29,599.8km 궤도에 있는 워커-델타 56:24/3/1 위성군(56도 각도로 기울어진 3개 평면에 24개 위성)입니다.

mission.StartDate의 위성군에 대한 케플러 궤도 요소를 지정합니다.

mission.Satellites.SemiMajorAxis  = 29599.8e3 * ones(24,1); % meters
mission.Satellites.Eccentricity   = 0.0005    * ones(24,1);
mission.Satellites.Inclination    = 56        * ones(24,1); % deg
mission.Satellites.ArgOfPeriapsis = 350       * ones(24,1); % deg

워커-델타 위성군의 궤도 평면의 승교점은 적도 주위의 360P 간격으로 균일하게 분포됩니다. 비행기당 위성의 수 S는 S=TP로 주어집니다. 총 24개의 위성이 있으므로 적도 주변에 120도 간격으로 8개의 위성으로 구성된 평면 3개가 됩니다. 각 궤도 평면의 위성은 360S 또는 45도 간격으로 분포됩니다.

mission.Satellites.RAAN               = sort(repmat([0 120 240], 1,8))'; % deg
mission.Satellites.TrueAnomaly        = repmat(0:45:315, 1,3)'; % deg

마지막으로, 인접한 궤도면 사이의 상대적인 각도 이동을 고려합니다. 위상 차이는 Δϕ=F*360T 또는 이 경우 15도로 주어집니다.

mission.Satellites.TrueAnomaly(9:16)  = mission.Satellites.TrueAnomaly(9:16)  + 15;
mission.Satellites.TrueAnomaly(17:24) = mission.Satellites.TrueAnomaly(17:24) + 30;

위성군 노드를 표로 표시합니다.

ConstellationDefinition = table(mission.Satellites.SemiMajorAxis, ...
    mission.Satellites.Eccentricity, ...
    mission.Satellites.Inclination, ...
    mission.Satellites.RAAN, ...
    mission.Satellites.ArgOfPeriapsis, ...
    mission.Satellites.TrueAnomaly, ...
    'VariableNames', ["a (m)", "e", "i (deg)", "Ω (deg)", "ω (deg)", "ν (deg)"])
ConstellationDefinition=24×6 table
     a (m)        e       i (deg)    Ω (deg)    ω (deg)    ν (deg)
    ________    ______    _______    _______    _______    _______

    2.96e+07    0.0005      56           0        350          0  
    2.96e+07    0.0005      56           0        350         45  
    2.96e+07    0.0005      56           0        350         90  
    2.96e+07    0.0005      56           0        350        135  
    2.96e+07    0.0005      56           0        350        180  
    2.96e+07    0.0005      56           0        350        225  
    2.96e+07    0.0005      56           0        350        270  
    2.96e+07    0.0005      56           0        350        315  
    2.96e+07    0.0005      56         120        350         15  
    2.96e+07    0.0005      56         120        350         60  
    2.96e+07    0.0005      56         120        350        105  
    2.96e+07    0.0005      56         120        350        150  
    2.96e+07    0.0005      56         120        350        195  
    2.96e+07    0.0005      56         120        350        240  
    2.96e+07    0.0005      56         120        350        285  
    2.96e+07    0.0005      56         120        350        330  
      ⋮

궤도 전파 모델 열기 및 구성

포함된 Simulink 모델을 엽니다. 이 모델에는 출력 포트에 연결된 Orbit Propagator 블록이 포함되어 있습니다. Orbit Propagator 블록은 벡터화를 지원합니다. 이를 통해 Block Parameters 창에서 초기 조건 배열을 지정하거나 set_param를 사용하여 단일 블록에서 여러 위성을 모델링할 수 있습니다. 이 모델에는 대시보드 Callback button이 포함된 "Mission Analysis and Visualization" 섹션도 포함되어 있습니다. 이 버튼을 클릭하면 모델이 실행되고, Orbit Propagator 블록에 정의된 위성이나 위성군을 포함하는 글로벌 기반 작업 공간에 새로운 satelliteScenario 객체가 생성되고, 새로운 시나리오에 대한 Satellite Scenario Viewer 창이 열립니다. 이 동작에 대한 소스 코드를 보려면 콜백 버튼을 더블 클릭하세요. "Mission Analysis and Visualization" 섹션은 새로운 satelliteScenario 객체를 생성하는 독립형 워크플로이며, 이 작성된 예제의 일부로 사용되지 않습니다.

mission.mdl = "OrbitPropagatorBlockExampleModel";
open_system(mission.mdl);

Orbit Propagator block example model

모델의 Orbit Propagator 블록에 대한 경로를 정의합니다.

mission.Satellites.blk = mission.mdl + "/Orbit Propagator";

위성 초기 조건을 설정합니다. 이전 섹션에서 정의한 케플러 궤도 요소 집합을 할당하려면 set_param를 사용합니다.

set_param(mission.Satellites.blk, ...
    startDate = num2str(juliandate(mission.StartDate)), ...
    stateFormatNum = "Orbital elements", ...
    orbitType      = "Keplerian", ...
    semiMajorAxis  = "mission.Satellites.SemiMajorAxis", ...
    eccentricity   = "mission.Satellites.Eccentricity", ...
    inclination    = "mission.Satellites.Inclination", ...
    raan           = "mission.Satellites.RAAN", ...
    argPeriapsis   = "mission.Satellites.ArgOfPeriapsis", ...
    trueAnomaly    = "mission.Satellites.TrueAnomaly");

블록의 위치 및 속도 출력 포트를 지구중심고정 프레임인 ITRF(국제 지상 기준 프레임)을 사용하도록 설정합니다.

set_param(mission.Satellites.blk, ...
    centralBody  = "Earth", ...
    outportFrame = "Fixed-frame");

전파기를 구성합니다. 이 예에서는 지구의 편평도를 고려하여 위성 궤적 계산에 2차 구역 고조파 섭동을 포함하는 Oblate ellipsoid (J2) 전파기를 사용합니다.

set_param(mission.Satellites.blk, ...
    propagator   = "Numerical (high precision)", ...
    gravityModel = "Oblate ellipsoid (J2)", ...
    useEOPs      = "off");

set_param를 사용하여 모델 수준 솔버 설정을 적용합니다. 수치 전파기를 사용할 때 최상의 성능과 정확성을 얻으려면 가변 단계 솔버를 사용하세요.

set_param(mission.mdl, ...
    SolverType = "Variable-step", ...
    SolverName = "VariableStepAuto", ...
    RelTol     = "1e-6", ...
    AbsTol     = "1e-7", ...
    StopTime   = string(seconds(mission.Duration)));

모델 출력 포트 데이터를 시계열 객체의 데이터 세트로 저장합니다.

set_param(mission.mdl, ...
    SaveOutput = "on", ...
    OutputSaveName = "yout", ...
    SaveFormat = "Dataset");

모델 실행 및 위성 Ephemerides 수집

모델을 시뮬레이션합니다.

mission.SimOutput = sim(mission.mdl);

모델 출력 데이터 구조에서 위치 및 속도 데이터를 추출합니다.

mission.Satellites.TimeseriesPosECEF = mission.SimOutput.yout{1}.Values;
mission.Satellites.TimeseriesVelECEF = mission.SimOutput.yout{2}.Values;

timeseries 객체에서 미션의 시작 데이터를 설정합니다.

mission.Satellites.TimeseriesPosECEF.TimeInfo.StartDate = mission.StartDate;
mission.Satellites.TimeseriesVelECEF.TimeInfo.StartDate = mission.StartDate;

timeseries 객체에는 24개 위성 모두의 위치 및 속도 데이터가 포함되어 있습니다.

mission.Satellites.TimeseriesPosECEF
  timeseries

  Common Properties:
            Name: ''
            Time: [57x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [24x3x57 double]
        DataInfo: [1x1 tsdata.datametadata]

  More properties, Methods

위성 Ephemerides를 satelliteScenario O 객체에 로드

분석을 위한 satellite scenario 객체를 생성합니다.

scenario = satelliteScenario(mission.StartDate, mission.StartDate + hours(24), 60);

satellite 메서드를 사용하여 ECEF 위치 및 속도 timeseries 객체에서 24개 위성을 모두 위성 시나리오에 추가합니다.

sat = satellite(scenario, mission.Satellites.TimeseriesPosECEF, mission.Satellites.TimeseriesVelECEF, ...
    CoordinateFrame="ecef", Name="GALILEO " + (1:24))
sat = 
  1x24 Satellite array with properties:

    Name
    ID
    PhysicalProperties
    ConicalSensors
    Gimbals
    Transmitters
    Receivers
    Accesses
    Eclipse
    GroundTrack
    Orbit
    CoordinateAxes
    OrbitPropagator
    MarkerColor
    MarkerSize
    ShowLabel
    LabelFontColor
    LabelFontSize
    Visual3DModel
    Visual3DModelScale

disp(scenario)
  satelliteScenario with properties:

             StartTime: 30-Nov-2020 22:23:24
              StopTime: 01-Dec-2020 22:23:24
            SampleTime: 60
          AutoSimulate: 1
    CentralBodyOptions: [1×1 Aero.satellitescenario.CentralBodyOptions]
            Satellites: [1×24 matlabshared.satellitescenario.Satellite]
        GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
             Platforms: [1×0 matlabshared.satellitescenario.Platform]
               Viewers: [0×0 matlabshared.satellitescenario.Viewer]
              AutoShow: 1

위성의 그래픽 속성 설정

각 궤도 평면에 있는 위성을 동일한 궤도 색상으로 설정합니다.

set(sat(1:8), MarkerColor="#FF6929");
set(sat(9:16), MarkerColor="#139FFF");
set(sat(17:24), MarkerColor="#64D413");
orbit = [sat(:).Orbit];
set(orbit(1:8), LineColor="#FF6929");
set(orbit(9:16), LineColor="#139FFF");
set(orbit(17:24), LineColor="#64D413");

시나리오에 지상국 추가

정확한 위치 데이터를 제공하려면 지구상 임의의 위치에서 언제나 위성군에 속한 위성 중 최소 4개에 액세스할 수 있어야 합니다. 이 예에서는 세 개의 MathWorks® 위치를 사용하여 1일 분석 기간 동안 지구의 다른 지역에 대한 총 위성군 접근성을 비교합니다.

  • 미국 매사추세츠주 네이틱(42.30048°, -71.34908°)

  • 독일, 뮌헨(48.23206°, 11.68445°)

  • 방갈로르, 인도(12.94448°, 77.69256°)

gsUS = groundStation(scenario, 42.30048, -71.34908, ...
    MinElevationAngle=10, Name="Natick");
gsUS.MarkerColor = "red";
gsDE = groundStation(scenario, 48.23206, 11.68445, ...
    MinElevationAngle=10, Name="Munchen");
gsDE.MarkerColor = "red";
gsIN = groundStation(scenario, 12.94448, 77.69256, ...
    MinElevationAngle=10, Name="Bangalore");
gsIN.MarkerColor = "red";


figure
geoscatter([gsUS.Latitude gsDE.Latitude gsIN.Latitude], ...
    [gsUS.Longitude gsDE.Longitude gsIN.Longitude], "red", "filled")
geolimits([-75 75], [-180 180])
title("Ground Stations")

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

지상국에서 위성까지의 액세스(가시선 가시성) 계산

access 방법을 사용하여 지상국과 각 위성 사이의 가시선을 계산합니다.

accessUS = access(gsUS, sat);
accessDE = access(gsDE, sat);
accessIN = access(gsIN, sat);

이전 예제에서 할당한 궤도 평면 색상과 일치하도록 액세스 색상을 설정합니다.

set(accessUS, LineWidth="1");
set(accessUS(1:8), LineColor="#FF6929");
set(accessUS(9:16), LineColor="#139FFF");
set(accessUS(17:24), LineColor="#64D413");

set(accessDE, LineWidth="1");
set(accessDE(1:8), LineColor="#FF6929");
set(accessDE(9:16), LineColor="#139FFF");
set(accessDE(17:24), LineColor="#64D413");

set(accessIN, LineWidth="1");
set(accessIN(1:8), LineColor="#FF6929");
set(accessIN(9:16), LineColor="#139FFF");
set(accessIN(17:24), LineColor="#64D413");

각 지상국과 위성군의 모든 위성 간의 전체 액세스 테이블을 테이블로 볼 수 있습니다. 간격 시작 시간을 기준으로 액세스 구간을 정렬합니다. ephemeris 데이터에서 추가된 위성에는 시작 궤도 및 정지 궤도 값이 표시되지 않습니다.

intervalsUS = accessIntervals(accessUS);
intervalsUS = sortrows(intervalsUS, "StartTime", "ascend")
intervalsUS=40×8 table
     Source        Target       IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    ________    ____________    ______________    ____________________    ____________________    ________    __________    ________

    "Natick"    "GALILEO 1"           1           30-Nov-2020 22:23:24    01-Dec-2020 04:04:24     20460         NaN          NaN   
    "Natick"    "GALILEO 2"           1           30-Nov-2020 22:23:24    01-Dec-2020 01:24:24     10860         NaN          NaN   
    "Natick"    "GALILEO 3"           1           30-Nov-2020 22:23:24    30-Nov-2020 22:57:24      2040         NaN          NaN   
    "Natick"    "GALILEO 12"          1           30-Nov-2020 22:23:24    01-Dec-2020 00:00:24      5820         NaN          NaN   
    "Natick"    "GALILEO 13"          1           30-Nov-2020 22:23:24    30-Nov-2020 23:05:24      2520         NaN          NaN   
    "Natick"    "GALILEO 18"          1           30-Nov-2020 22:23:24    01-Dec-2020 04:00:24     20220         NaN          NaN   
    "Natick"    "GALILEO 19"          1           30-Nov-2020 22:23:24    01-Dec-2020 01:42:24     11940         NaN          NaN   
    "Natick"    "GALILEO 20"          1           30-Nov-2020 22:23:24    30-Nov-2020 22:46:24      1380         NaN          NaN   
    "Natick"    "GALILEO 11"          1           30-Nov-2020 22:25:24    01-Dec-2020 00:18:24      6780         NaN          NaN   
    "Natick"    "GALILEO 17"          1           30-Nov-2020 22:50:24    01-Dec-2020 05:50:24     25200         NaN          NaN   
    "Natick"    "GALILEO 8"           1           30-Nov-2020 23:20:24    01-Dec-2020 07:09:24     28140         NaN          NaN   
    "Natick"    "GALILEO 7"           1           01-Dec-2020 01:26:24    01-Dec-2020 10:00:24     30840         NaN          NaN   
    "Natick"    "GALILEO 24"          1           01-Dec-2020 01:40:24    01-Dec-2020 07:12:24     19920         NaN          NaN   
    "Natick"    "GALILEO 14"          1           01-Dec-2020 03:56:24    01-Dec-2020 07:15:24     11940         NaN          NaN   
    "Natick"    "GALILEO 6"           1           01-Dec-2020 04:05:24    01-Dec-2020 12:14:24     29340         NaN          NaN   
    "Natick"    "GALILEO 23"          1           01-Dec-2020 04:10:24    01-Dec-2020 08:03:24     13980         NaN          NaN   
      ⋮

intervalsDE = accessIntervals(accessDE);
intervalsDE = sortrows(intervalsDE, "StartTime", "ascend")
intervalsDE=40×8 table
     Source         Target       IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    _________    ____________    ______________    ____________________    ____________________    ________    __________    ________

    "Munchen"    "GALILEO 2"           1           30-Nov-2020 22:23:24    01-Dec-2020 04:34:24     22260         NaN          NaN   
    "Munchen"    "GALILEO 3"           1           30-Nov-2020 22:23:24    01-Dec-2020 01:58:24     12900         NaN          NaN   
    "Munchen"    "GALILEO 4"           1           30-Nov-2020 22:23:24    30-Nov-2020 23:05:24      2520         NaN          NaN   
    "Munchen"    "GALILEO 10"          1           30-Nov-2020 22:23:24    30-Nov-2020 23:58:24      5700         NaN          NaN   
    "Munchen"    "GALILEO 19"          1           30-Nov-2020 22:23:24    01-Dec-2020 01:36:24     11580         NaN          NaN   
    "Munchen"    "GALILEO 20"          1           30-Nov-2020 22:23:24    01-Dec-2020 00:15:24      6720         NaN          NaN   
    "Munchen"    "GALILEO 21"          1           30-Nov-2020 22:23:24    30-Nov-2020 22:28:24       300         NaN          NaN   
    "Munchen"    "GALILEO 9"           1           30-Nov-2020 22:34:24    01-Dec-2020 02:22:24     13680         NaN          NaN   
    "Munchen"    "GALILEO 18"          1           30-Nov-2020 22:41:24    01-Dec-2020 02:31:24     13800         NaN          NaN   
    "Munchen"    "GALILEO 1"           1           30-Nov-2020 23:05:24    01-Dec-2020 06:42:24     27420         NaN          NaN   
    "Munchen"    "GALILEO 16"          1           30-Nov-2020 23:29:24    01-Dec-2020 04:47:24     19080         NaN          NaN   
    "Munchen"    "GALILEO 15"          1           01-Dec-2020 00:50:24    01-Dec-2020 07:27:24     23820         NaN          NaN   
    "Munchen"    "GALILEO 17"          1           01-Dec-2020 01:05:24    01-Dec-2020 03:00:24      6900         NaN          NaN   
    "Munchen"    "GALILEO 8"           1           01-Dec-2020 01:57:24    01-Dec-2020 08:25:24     23280         NaN          NaN   
    "Munchen"    "GALILEO 14"          1           01-Dec-2020 02:36:24    01-Dec-2020 10:19:24     27780         NaN          NaN   
    "Munchen"    "GALILEO 7"           1           01-Dec-2020 04:35:24    01-Dec-2020 09:43:24     18480         NaN          NaN   
      ⋮

intervalsIN = accessIntervals(accessIN);
intervalsIN = sortrows(intervalsIN, "StartTime", "ascend")
intervalsIN=31×8 table
      Source          Target       IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    ___________    ____________    ______________    ____________________    ____________________    ________    __________    ________

    "Bangalore"    "GALILEO 3"           1           30-Nov-2020 22:23:24    01-Dec-2020 05:12:24     24540         NaN          NaN   
    "Bangalore"    "GALILEO 4"           1           30-Nov-2020 22:23:24    01-Dec-2020 02:59:24     16560         NaN          NaN   
    "Bangalore"    "GALILEO 5"           1           30-Nov-2020 22:23:24    01-Dec-2020 00:22:24      7140         NaN          NaN   
    "Bangalore"    "GALILEO 9"           1           30-Nov-2020 22:23:24    01-Dec-2020 03:37:24     18840         NaN          NaN   
    "Bangalore"    "GALILEO 10"          1           30-Nov-2020 22:23:24    01-Dec-2020 00:09:24      6360         NaN          NaN   
    "Bangalore"    "GALILEO 16"          1           30-Nov-2020 22:23:24    01-Dec-2020 08:44:24     37260         NaN          NaN   
    "Bangalore"    "GALILEO 21"          1           30-Nov-2020 22:23:24    30-Nov-2020 23:25:24      3720         NaN          NaN   
    "Bangalore"    "GALILEO 22"          1           30-Nov-2020 22:23:24    30-Nov-2020 22:58:24      2100         NaN          NaN   
    "Bangalore"    "GALILEO 15"          1           01-Dec-2020 00:17:24    01-Dec-2020 11:16:24     39540         NaN          NaN   
    "Bangalore"    "GALILEO 2"           1           01-Dec-2020 00:25:24    01-Dec-2020 07:10:24     24300         NaN          NaN   
    "Bangalore"    "GALILEO 22"          2           01-Dec-2020 00:48:24    01-Dec-2020 05:50:24     18120         NaN          NaN   
    "Bangalore"    "GALILEO 21"          2           01-Dec-2020 01:32:24    01-Dec-2020 08:29:24     25020         NaN          NaN   
    "Bangalore"    "GALILEO 1"           1           01-Dec-2020 03:06:24    01-Dec-2020 07:17:24     15060         NaN          NaN   
    "Bangalore"    "GALILEO 20"          1           01-Dec-2020 03:36:24    01-Dec-2020 12:38:24     32520         NaN          NaN   
    "Bangalore"    "GALILEO 14"          1           01-Dec-2020 05:48:24    01-Dec-2020 13:29:24     27660         NaN          NaN   
    "Bangalore"    "GALILEO 19"          1           01-Dec-2020 05:53:24    01-Dec-2020 17:06:24     40380         NaN          NaN   
      ⋮

위성 시나리오 보기

시나리오의 3차원 뷰어 창을 엽니다. 뷰어 창에는 이 예에서 앞서 정의한 24개 위성과 3개 지상국이 모두 포함되어 있습니다. 각 지상국과 위성 사이에는 해당 액세스 구간 동안 선이 그어집니다. ShowDetails 이름-값 쌍을 false로 설정하여 위성과 지상국에 대한 세부 정보를 숨깁니다. 지상국 위치에 대한 위성 궤도와 레이블을 표시합니다.

viewer3D = satelliteScenarioViewer(scenario, ShowDetails=false);
show(sat.Orbit);
gsUS.ShowLabel = true;
gsUS.LabelFontSize = 11;
gsDE.ShowLabel = true;
gsDE.LabelFontSize = 11;
gsIN.ShowLabel = true;
gsIN.LabelFontSize = 11;

지상국 간 액세스 비교

accessStatus 메서드를 사용하여 각 위성과 지상국 간의 접근 상태를 계산합니다. 출력 배열의 각 행은 위성군의 위성에 해당합니다. 각 열은 시나리오의 시간 스텝에 해당합니다. True 값은 위성이 해당 특정 시간 샘플에서 항공기에 액세스할 수 있음을 나타냅니다. accessStatus의 두 번째 출력에는 시나리오의 시간 스텝이 포함되어 있습니다. 1일 분석 기간 동안 각 지상국에 대한 누적 액세스를 표시합니다.

[statusUS, timeSteps] = accessStatus(accessUS);
statusDE = accessStatus(accessDE);
statusIN = accessStatus(accessIN);

% Sum cumulative access at each timestep
statusUS = sum(statusUS, 1);
statusDE = sum(statusDE, 1);
statusIN = sum(statusIN, 1);

subplot(3,1,1);
stairs(timeSteps, statusUS);
title("Natick to GALILEO")
ylabel("# of satellites")
subplot(3,1,2);
stairs(timeSteps, statusDE);
title("München to GALILEO")
ylabel("# of satellites")
subplot(3,1,3);
stairs(timeSteps, statusIN);
title("Bangalore to GALILEO")
ylabel("# of satellites")

Figure contains 3 axes objects. Axes object 1 with title Natick to GALILEO, ylabel # of satellites contains an object of type stair. Axes object 2 with title München to GALILEO, ylabel # of satellites contains an object of type stair. Axes object 3 with title Bangalore to GALILEO, ylabel # of satellites contains an object of type stair.

비교를 위해 각 지상국에 대한 액세스 구간 측정 항목을 표로 수집합니다.

statusTable = [table(height(intervalsUS), height(intervalsDE), height(intervalsIN)); ...
    table(sum(intervalsUS.Duration)/3600, sum(intervalsDE.Duration)/3600, sum(intervalsIN.Duration)/3600); ...
    table(mean(intervalsUS.Duration/60), mean(intervalsDE.Duration/60), mean(intervalsIN.Duration/60)); ...
    table(mean(statusUS, 2), mean(statusDE, 2), mean(statusIN, 2)); ...
    table(min(statusUS), min(statusDE), min(statusIN)); ...
    table(max(statusUS), max(statusDE), max(statusIN))];
statusTable.Properties.VariableNames = ["Natick", "München", "Bangalore"];
statusTable.Properties.RowNames = ["Total # of intervals", "Total interval time (hrs)",...
    "Mean interval length (min)", "Mean # of satellites in view", ...
    "Min # of satellites in view", "Max # of satellites in view"];
statusTable
statusTable=6×3 table
                                    Natick    München    Bangalore
                                    ______    _______    _________

    Total # of intervals                40        40          31  
    Total interval time (hrs)       167.88    169.95      180.42  
    Mean interval length (min)      251.82    254.93      349.19  
    Mean # of satellites in view     7.018    7.1041      7.5337  
    Min # of satellites in view          5         5           5  
    Max # of satellites in view          9        10           9  

워커-델타 위성군은 경도에 따라 균등하게 분포되어 있습니다. 네이틱과 뮌헨은 비슷한 위도에 위치해 있으므로 위성군에 대한 접근성 특성이 매우 비슷합니다. 방갈로르는 적도에 더 가까운 위도에 위치하고, 개별 액세스 구간 수가 적음에도 불구하고 시야에 들어오는 위성의 평균 수가 가장 많고, 전체 간격 시간이 가장 길며, 평균 간격 지속 시간도 가장 깁니다(약 95분). 모든 위치는 GNSS 삼변측량에 필요하므로 항상 최소 4개의 위성을 시야에 확보해야 합니다.

참고 문헌

[1] Wertz, James R, David F. Everett, and Jeffery J. Puschell. Space Mission Engineering: The New Smad. Hawthorne, CA: Microcosm Press, 2011. Print.

[2] Beech, Theresa W., Sefania Cornana, Miguel B. Mora. A Study of Three Satellite Constellation Design Algorithms. 14th International Symposium on Space Flight Dynamics, Foz do Iguaçu, Brazil 1999.

[3] The European Space Agency: Galileo Facts and Figures. https://www.esa.int/Applications/Navigation/Galileo/Facts_and_figures

참고 항목

블록

객체