주요 콘텐츠

Satellite

위성 시나리오의 위성

R2021a 이후

    설명

    Satellite는 satellite scenario 객체의 위성을 정의합니다.

    생성

    Satellite 객체는 satelliteScenario 객체의 satellite 함수를 사용하여 만들 수 있습니다.

    속성

    모두 확장

    이 속성은 satellite 함수를 호출할 때만 설정할 수 있습니다. satellite 함수를 호출한 후에는 이 속성은 읽기 전용입니다.

    위성 이름으로, 'Name'과 함께 string형 스칼라, string형 벡터, 문자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열 중 하나가 쉼표로 구분되어 지정됩니다.

    • 위성을 하나만 추가하는 경우 Name을 string형 스칼라나 문자형 벡터로 지정합니다.

    • 위성을 여러 개 추가하는 경우 Name을 string형 스칼라, 문자형 벡터, string형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정합니다. string형 스칼라나 문자형 벡터로 추가된 모든 위성에는 동일한 지정된 이름이 할당됩니다. string형 벡터나 문자형 벡터로 구성된 셀형 배열의 요소 개수는 추가되는 위성의 개수와 같아야 합니다. 각 위성에는 벡터나 셀형 배열에서 해당하는 이름이 할당됩니다.

    위성 시나리오에 위성을 추가할 때의 디폴트 값은 다음과 같습니다.

    • 케플러 궤도 요소, TLE 파일 사용 시 — "Satellite ID", 여기서 ID는 위성 시나리오가 할당합니다.

    • SEM almanac 파일이나 RINEX GPS 내비게이션 데이터 사용 시 — "PRN:prnValue", 여기서 prnValue는 SEM almanac 파일에 지정된 대로 위성의 의사 랜덤 잡음(pseudorandom noise) 코드를 나타내는 정수입니다.

    • RINEX Galileo 내비게이션 데이터 사용 시 — "GAL Sat IF: id", 여기서 "id"는 RINEX 내비게이션 데이터에 정의된 Galileo 위성의 위성 ID입니다.

    • 타임테이블 - timetable 객체의 변수 이름입니다.

    • 시계열 - timeseries 객체의 이름이 채워진 경우 해당 이름, 그렇지 않은 경우 "Satellite ID"(ID는 위성 시나리오가 할당함)입니다.

    데이터형: string

    이 속성은 시뮬레이터가 내부적으로 설정하며 읽기 전용입니다.

    시뮬레이터가 할당한 Satellite ID로, 양의 스칼라로 지정됩니다.

    이 속성은 conicalSensor를 호출할 때만 설정할 수 있습니다. conicalSensor 함수를 호출한 후에는 이 속성은 읽기 전용입니다.

    Satellite에 연결된 원뿔형 센서로, 원뿔형 센서로 구성된 행 벡터로 지정됩니다.

    이 속성은 gimbal을 호출할 때만 설정할 수 있습니다. gimbal을 호출한 후에는 이 속성은 읽기 전용입니다.

    Satellite에 연결된 짐벌로, 'Gimbals'와 함께 Gimbal 객체로 구성된 행 벡터가 쉼표로 구분되어 지정됩니다.

    이 속성은 transmitter 함수를 호출할 때만 설정할 수 있습니다. transmitter 함수를 호출한 후에는 이 속성은 읽기 전용입니다.

    Satellite에 연결된 송신기로, Transmitter 객체로 구성된 행 벡터로 지정됩니다.

    이 속성은 receiver를 호출할 때만 설정할 수 있습니다. receiver 함수를 호출한 후에는 이 속성은 읽기 전용입니다.

    satellite에 연결된 수신기로, Receiver 객체로 구성된 행 벡터로 지정됩니다.

    이 속성은 access를 호출할 때만 설정할 수 있습니다. access를 호출한 후에는 이 속성은 읽기 전용입니다.

    액세스 분석 객체로, Access 객체로 구성된 행 벡터로 지정됩니다.

    이 속성은 groundTrack을 호출할 때만 설정할 수 있습니다. groundTrack을 호출한 후에는 이 속성은 읽기 전용입니다.

    Satellite의 지상 궤적으로, GroundTrack 객체로 구성된 행 벡터로 지정됩니다.

    이 속성은 coordinateAxes를 호출할 때만 설정할 수 있습니다. coordinateAxes를 호출한 후에는 이 속성은 읽기 전용입니다.

    좌표축 트라이어드(triad) 그래픽 객체로, CoordinateAxes 객체로 지정됩니다.

    이 속성은 orbit을 호출할 때만 설정할 수 있습니다. orbit을 호출한 후에는 이 속성은 읽기 전용입니다.

    위성의 궤도 시각화 파라미터로, Orbit 객체로 지정됩니다.

    데이터형: char | string

    satellite 객체 생성 시 이 속성을 설정할 수 있으며, 설정하면 이 속성은 읽기 전용이 됩니다.

    위성 위치와 속도를 전파하는 데 사용되는 궤도 전파기의 이름으로, 다음 옵션 중 하나로 지정됩니다.

    • timetable형, table형, timeseries또는 tscollection을 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 "ephemeris"입니다.

    • SEM almanac 파일이나 GPS 내비게이션 메시지를 포함하는 RINEX 데이터를 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 다음 옵션 중 하나를 가질 수 있습니다.

      • "gps"(디폴트 값)

      • "sgp4"

      • "sdp4"

      • "two-body-keplerian"

      • "numerical"

    • Galileo 내비게이션 메시지를 포함하는 RINEX 데이터를 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 다음 옵션 중 하나를 가질 수 있습니다.

      • "galileo"(디폴트 값)

      • "sgp4"

      • "sdp4"

      • "two-body-keplerian"

      • "numerical"

    • 케플러 요소를 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 다음 옵션 중 하나를 가질 수 있습니다.

      • "two-body-keplerian"

      • "sgp4"

      • "sdp4"

      • "numerical"

      또한 장반경이 음수인 경우 OrbitPropagator 값은 "numerical"만 될 수 있습니다. 장반경이 양수인 경우 디폴트 값은, 주기가 225분 미만이면 "sgp4"이고 주기가 225분 이상이면 "sdp4"입니다.

    • TLE 파일이나 OMM 파일을 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 다음 옵션 중 하나를 가질 수 있습니다.

      • "two-body-keplerian"

      • "sgp4"

      • "sdp4"

      • "numerical"

      궤도 주기가 225분 미만인 경우 디폴트 OrbitPropagator 값은 "sgp4"입니다. 그렇지 않으면 디폴트 OrbitPropagator 값은 "sdp4"입니다.

    • Keplerian 요소를 사용하여 위성을 지정하는 경우 OrbitPropagator 값은 다음 옵션 중 하나를 가질 수 있습니다.

      • "two-body-keplerian"

      • "sgp4"

      • "sdp4"

    RINEX 데이터에 유효한 GPS와 갈릴레오 내비게이션 메시지가 모두 포함되어 있는 경우 이름-값 인수를 사용하여 OrbitPropagator"gps""galileo"로 지정할 수 없습니다. 그러나 "two-body-keplerian", "sgp4", "sdp4" 또는 "numerical"로 지정할 수는 있습니다.

    마커의 색으로, 'MarkerColor'와 함께 RGB 3색이나 색상 이름의 string형 또는 문자형 벡터가 쉼표로 구분되어 지정됩니다.

    사용자 지정 색의 경우 RGB 3색이나 16진수 색 코드를 지정합니다.

    • RGB 3색은 색의 빨간색, 녹색, 파란색 성분의 농도를 지정하는 요소를 3개 가진 행 벡터입니다. 농도는 [0,1] 범위 안에 있어야 합니다(예: [0.4 0.6 0.7]).

    • 16진수 색 코드는 해시 기호(#)로 시작하고 그 뒤에 3자리 또는 6자리 16진수(범위: 0~F)가 오는 string형 스칼라 또는 문자형 벡터입니다. 값은 대/소문자를 구분하지 않습니다. 따라서 색 코드 "#FF8800", "#ff8800", "#F80", "#f80"은 동일합니다.

    또는 일반적인 몇몇 색을 이름으로 지정할 수도 있습니다. 아래 표에는 이름이 지정된 색 옵션, 그에 해당하는 RGB 3색, 16진수 색 코드가 나열되어 있습니다.

    색 이름짧은 이름RGB 3색16진수 색 코드모양
    "red" "r" [1 0 0] "#FF0000"

    Sample of the color red

    "green" "g" [0 1 0] "#00FF00"

    Sample of the color green

    "blue" "b" [0 0 1] "#0000FF"

    Sample of the color blue

    "cyan" "c" [0 1 1] "#00FFFF"

    Sample of the color cyan

    "magenta" "m" [1 0 1] "#FF00FF"

    Sample of the color magenta

    "yellow" "y" [1 1 0] "#FFFF00"

    Sample of the color yellow

    "black" "k" [0 0 0] "#000000"

    Sample of the color black

    "white" "w" [1 1 1] "#FFFFFF"

    Sample of the color white

    MATLAB®이 다양한 유형의 플롯에 사용하는 디폴트 색상의 RGB 3색과 16진수 색 코드는 다음과 같습니다.

    RGB 3색16진수 색 코드모양
    [0 0.4470 0.7410] "#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980] "#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250] "#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560] "#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880] "#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330] "#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840] "#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    마커의 크기로, 'MarkerSize'와 함께 30보다 작은 양의 실수형 스칼라가 쉼표로 구분되어 지정됩니다. 단위는 픽셀입니다.

    Satellite 레이블 가시성의 상태로, 'ShowLabel'과 함께 1(true) 또는 0(false)의 숫자 값 또는 논리값이 쉼표로 구분되어 지정됩니다.

    데이터형: logical

    Satellite 레이블의 글꼴 색으로, 'LabelFontColor'와 함께 RGB 3색이나 색상 이름의 string형 또는 문자형 벡터가 쉼표로 구분되어 지정됩니다.

    사용자 지정 색의 경우 RGB 3색이나 16진수 색 코드를 지정합니다.

    • RGB 3색은 색의 빨간색, 녹색, 파란색 성분의 농도를 지정하는 요소를 3개 가진 행 벡터입니다. 농도는 [0,1] 범위 안에 있어야 합니다(예: [0.4 0.6 0.7]).

    • 16진수 색 코드는 해시 기호(#)로 시작하고 그 뒤에 3자리 또는 6자리 16진수(범위: 0~F)가 오는 string형 스칼라 또는 문자형 벡터입니다. 값은 대/소문자를 구분하지 않습니다. 따라서 색 코드 "#FF8800", "#ff8800", "#F80", "#f80"은 동일합니다.

    또는 일반적인 몇몇 색을 이름으로 지정할 수도 있습니다. 아래 표에는 이름이 지정된 색 옵션, 그에 해당하는 RGB 3색, 16진수 색 코드가 나열되어 있습니다.

    색 이름짧은 이름RGB 3색16진수 색 코드모양
    "red" "r" [1 0 0] "#FF0000"

    Sample of the color red

    "green" "g" [0 1 0] "#00FF00"

    Sample of the color green

    "blue" "b" [0 0 1] "#0000FF"

    Sample of the color blue

    "cyan" "c" [0 1 1] "#00FFFF"

    Sample of the color cyan

    "magenta" "m" [1 0 1] "#FF00FF"

    Sample of the color magenta

    "yellow" "y" [1 1 0] "#FFFF00"

    Sample of the color yellow

    "black" "k" [0 0 0] "#000000"

    Sample of the color black

    "white" "w" [1 1 1] "#FFFFFF"

    Sample of the color white

    MATLAB이 다양한 유형의 플롯에 사용하는 디폴트 색상의 RGB 3색과 16진수 색 코드는 다음과 같습니다.

    RGB 3색16진수 색 코드모양
    [0 0.4470 0.7410] "#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980] "#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250] "#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560] "#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880] "#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330] "#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840] "#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    Satellite 레이블의 글꼴 크기로, 'LabelFontSize'와 함께 범위 [6 30] 내의 양의 스칼라가 쉼표로 구분되어 지정됩니다.

    뷰어에서 렌더링할 시각적 3차원 모델 파일의 이름으로, 확장자가 .GLTF, .GLB 또는 .STL인 string형으로 지정됩니다. GLB 모델과 GLTF 모델의 경우 gITF는 오른손 좌표계를 사용합니다. gITF는 +Y를 위쪽, +Z를 앞쪽, -X를 오른쪽으로 정의합니다. gITF 에셋은 +Z를 향합니다. 자세한 내용은 https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#coordinate-system-and-units 항목을 참조하십시오. GLB의 메시 단위는 미터입니다.

    3-D model of a small satellite

    데이터형: string

    뷰어에서 렌더링되는 시각적 3차원 모델의 선형 스케일링으로, 음이 아닌 정수로 지정됩니다. 스케일링은 GLB 모델의 단위가 미터라고 가정합니다.

    데이터형: double

    객체 함수

    accessAdd access analysis objects to satellite scenario
    aerCalculate azimuth angle, elevation angle, and range of another satellite or ground station in NED frame
    dopplershiftCalculate Doppler shift at target asset in satellite scenario
    latencyCalculate propagation delay from one asset to another asset
    conicalSensorAdd conical sensor to satellite scenario
    gimbalAdd gimbal to satellite, platform, or ground station
    groundTrackAdd ground track object to satellite or platform in scenario
    orbitalElementsOrbital elements of satellites in scenario
    coordinateAxesVisualize coordinate axes triad of satellite scenario assets
    pointAtPoint satellite at target
    receiverAdd receiver to satellite scenario
    transmitterAdd transmitter to satellite scenario
    statesObtain position and velocity of satellite or platform
    showShow object in satellite scenario viewer
    hideHide satellite scenario entity from viewer

    예제

    모두 축소

    satellite scenario 객체를 만듭니다.

    startTime = datetime(2020,5,5,0,0,0);
    stopTime = startTime + days(1);
    sampleTime = 60;                                      %seconds
    sc = satelliteScenario(startTime,stopTime,sampleTime);

    TLE 파일에서 시나리오에 위성을 추가합니다.

    tleFile = "eccentricOrbitSatellite.tle";
    sat1 = satellite(sc,tleFile,"Name","Sat1")
    sat1 = 
      Satellite with properties:
    
                   Name:  Sat1
                     ID:  1
         ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
                Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
           Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
              Receivers:  [1x0 satcom.satellitescenario.Receiver]
               Accesses:  [1x0 matlabshared.satellitescenario.Access]
            GroundTrack:  [1x1 matlabshared.satellitescenario.GroundTrack]
                  Orbit:  [1x1 matlabshared.satellitescenario.Orbit]
        OrbitPropagator:  sdp4
            MarkerColor:  [0.059 1 1]
             MarkerSize:  6
              ShowLabel:  true
         LabelFontColor:  [1 1 1]
          LabelFontSize:  15
    
    

    케플러 요소에서 시나리오에 위성을 추가하고 궤도 전파기를 "two-body-keplerian"으로 지정합니다.

    semiMajorAxis = 6878137;                                                                    %m
    eccentricity = 0;
    inclination = 20;                                                                           %degrees
    rightAscensionOfAscendingNode = 0;                                                          %degrees
    argumentOfPeriapsis = 0;                                                                    %degrees
    trueAnomaly = 0;                                                                            %degrees
    sat2 = satellite(sc,semiMajorAxis,eccentricity,inclination,rightAscensionOfAscendingNode,...
        argumentOfPeriapsis,trueAnomaly,"OrbitPropagator","two-body-keplerian","Name","Sat2")
    sat2 = 
      Satellite with properties:
    
                   Name:  Sat2
                     ID:  2
         ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
                Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
           Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
              Receivers:  [1x0 satcom.satellitescenario.Receiver]
               Accesses:  [1x0 matlabshared.satellitescenario.Access]
            GroundTrack:  [1x1 matlabshared.satellitescenario.GroundTrack]
                  Orbit:  [1x1 matlabshared.satellitescenario.Orbit]
        OrbitPropagator:  two-body-keplerian
            MarkerColor:  [0.059 1 1]
             MarkerSize:  6
              ShowLabel:  true
         LabelFontColor:  [1 1 1]
          LabelFontSize:  15
    
    

    두 위성 간의 액세스 분석을 추가합니다.

    ac = access(sat1,sat2);

    두 위성 간에 가시선이 확보되는 시간을 확인합니다.

    accessIntervals(ac)
    ans=15×8 table
        Source    Target    IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
        ______    ______    ______________    ____________________    ____________________    ________    __________    ________
    
        "Sat1"    "Sat2"           1          05-May-2020 00:09:00    05-May-2020 01:08:00      3540          1            1    
        "Sat1"    "Sat2"           2          05-May-2020 01:50:00    05-May-2020 02:47:00      3420          1            1    
        "Sat1"    "Sat2"           3          05-May-2020 03:45:00    05-May-2020 04:05:00      1200          1            1    
        "Sat1"    "Sat2"           4          05-May-2020 04:32:00    05-May-2020 05:26:00      3240          1            1    
        "Sat1"    "Sat2"           5          05-May-2020 06:13:00    05-May-2020 07:10:00      3420          1            1    
        "Sat1"    "Sat2"           6          05-May-2020 07:52:00    05-May-2020 08:50:00      3480          1            1    
        "Sat1"    "Sat2"           7          05-May-2020 09:30:00    05-May-2020 10:29:00      3540          1            1    
        "Sat1"    "Sat2"           8          05-May-2020 11:09:00    05-May-2020 12:07:00      3480          1            2    
        "Sat1"    "Sat2"           9          05-May-2020 12:48:00    05-May-2020 13:46:00      3480          2            2    
        "Sat1"    "Sat2"          10          05-May-2020 14:31:00    05-May-2020 15:27:00      3360          2            2    
        "Sat1"    "Sat2"          11          05-May-2020 17:12:00    05-May-2020 18:08:00      3360          2            2    
        "Sat1"    "Sat2"          12          05-May-2020 18:52:00    05-May-2020 19:49:00      3420          2            2    
        "Sat1"    "Sat2"          13          05-May-2020 20:30:00    05-May-2020 21:29:00      3540          2            2    
        "Sat1"    "Sat2"          14          05-May-2020 22:08:00    05-May-2020 23:07:00      3540          2            2    
        "Sat1"    "Sat2"          15          05-May-2020 23:47:00    06-May-2020 00:00:00       780          2            2    
    
    

    위성 간의 가시선을 시각화합니다.

    play(sc);

    위성 시나리오를 설정합니다.

    startTime = datetime(2021,8,5);
    stopTime = startTime + days(1);
    sampleTime = 60;                                      % seconds
    sc = satelliteScenario(startTime,stopTime,sampleTime);

    SEM almanac 파일에서 시나리오에 위성을 추가합니다.

    sat = satellite(sc,"gpsAlmanac.txt","OrbitPropagator","gps");

    GPS 위성군을 시각화합니다.

    v = satelliteScenarioViewer(sc);

    참고 문헌

    [1] Hoots, Felix R., and Ronald L. Roehrich. Models for propagation of NORAD element sets. Aerospace Defense Command Peterson AFB CO Office of Astrodynamics, 1980.

    [2] Vallado, David, et al. “Revisiting Spacetrack Report #3.” AIAA/AAS Astrodynamics Specialist Conference and Exhibit, American Institute of Aeronautics and Astronautics, 2006, https://doi.org/10.2514/6.2006-6753

    버전 내역

    R2021a에 개발됨