주요 콘텐츠

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

궤도 전파기 블록을 이용한 위성군 모델링

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

  • Aerospace Blockset™ Orbit Propagator 블록

  • Aerospace Toolbox satelliteScenario 객체

Orbit Propagator block

Aerospace Toolbox satelliteScenario 객체를 사용하면 시계열 또는 타임테이블 객체로부터 이전에 생성된 타임스탬프가 포함된 ephemeris 데이터를 시나리오에 불러올 수 있습니다. 시나리오 객체 내에서 데이터는 시나리오 시간 스텝에 맞춰 보간 처리됩니다. 이를 통해 Simulink® 모델에서 생성된 데이터를 신규 또는 기존 satelliteScenario 객체에 통합할 수 있습니다. 이 예제는 Simulink에서 Aerospace Blockset Orbit Propagator 블록을 사용하여 위성군을 전파하고, 기록된 ephemeris 데이터를 액세스 분석을 위해 satelliteScenario 객체에 로드하는 방법을 보여줍니다.

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

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

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

이 예제의 위성군은 유럽 GNSS(글로벌 항법 위성 시스템) 위성군인 Galileo와 유사하게 모델링된 Walker-Delta 위성군입니다. 이 위성군은 중간 지구 궤도(MEO)에 있는 24개의 위성으로 구성되어 있습니다.

Walker-Delta 위성군은 다음과 같은 표기법을 사용합니다:

i:T/P/F

여기서

i= 경사각

T= 위성 총 수

P= 균등 간격의 기하학적 평면 수

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

Walker-Delta 위성군은 임무 수행에 필요한 위성 수를 최소화하면서 지구 상공의 기하학적 범위를 극대화하는 데 흔히 사용되는 솔루션입니다. 갈릴레오 항법 시스템은 29,599.8km 궤도에 위치한 Walker-Delta 56:24/3/1 위성군(3개의 평면에 56도 경사각으로 배치된 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

Walker-Delta 위성군의 궤도면 승교점들은 적도를 중심으로 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을 포함하는 "임무 분석 및 시각화" 섹션도 포함됩니다. 이 버튼을 클릭하면 모델이 실행되고, Orbit Propagator 블록에서 정의된 위성 또는 위성군을 포함하는 새 satelliteScenario 객체가 글로벌 기본 작업 공간에 생성되며, 새 시나리오에 대한 위성 시나리오 뷰어 창이 열립니다. 이 작업의 소스 코드를 보려면 콜백 버튼을 두 번 클릭하십시오. "임무 분석 및 시각화" 섹션은 새 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차 원형 조화 섭동(second order zonal harmonic perturbations)을 포함하는 Oblate ellipsoid (J2) 전파기를 사용하여 지구의 편평도(oblateness)를 고려합니다.

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;

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

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

시계열 객체에는 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);

ECEF 위치 및 속도 시계열 객체를 사용하여 satellite 메서드로 위성 시나리오에 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 데이터에서 추가된 위성은 StartOrbit 및 StopOrbit 값을 표시하지 않습니다.

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   
      ⋮

위성 시나리오 보기

시나리오의 3D 뷰어 창을 엽니다. 뷰어 창에는 이 예제에서 앞서 정의한 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  

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

참고 문헌

[1] Wertz, James R, David F. Everett 및 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

참고 항목

블록

객체