항공기에서 위성으로의 ADS-B Out 통신
이 예제에서는 뉴욕의 존 F. 케네디 국제 공항에서 버뮤다의 L.F. 웨이드 국제 공항으로 향하는 비행의 ADS-B(Automatic Dependent Surveillance–Broadcast) Out 연결을 살펴봅니다. ADS-B Out 시스템은 공항과 Iridium NEXT 위성군을 포함한 다양한 타깃에 연결할 수 있습니다. 따라서 항공기가 공해(open water) 상공에서 지구 곡률로 인해 지상국과의 직접 가시선을 확보할 수 없더라도 위성 ADS-B 연결을 통해 항공기 상태에 관심이 있는 다른 모든 항공기와 공항에 자세, GPS 위치, 상태 정보를 지속적으로 제공할 수 있습니다. ADS-B Out 시스템은 가장 강한 ADS-B 업데이트 개시자에게 응답합니다. 항공기 위아래에 붙어 있는 무지향성 안테나가 방송을 송출하여 ADS-B 업데이트를 시작합니다.
이 예제는 세 가지 주요 부분으로 구성되어 있습니다.
항공기, 공항, Iridium 위성 네트워크를 포함하는 시나리오를 만듭니다.
액세스 분석을 수행하여 항공기가 Iridium 네트워크 내의 공항이나 위성에 가시선으로 액세스할 수 있는 시점을 결정합니다.
공항과 위성을 대상으로 ADS-B Out 시스템의 링크 성립(link closure) 분석을 수행합니다.
이 예제에서는 다음을 사용합니다.
Satellite Communications Toolbox
satelliteScenario객체를 사용하여 위성, 항공기, 지상국에 대한 결과를 분석하고 시각화합니다.(선택 사항) Aerospace Toolbox를 사용하여
satelliteScenario(Aerospace Toolbox) 객체를 만들 수도 있습니다.Satellite Communications Toolbox
link함수와linkIntervals함수를 사용하여 통신 링크를 결정합니다.(선택 사항) Phased Array System Toolbox
phased.CosineAntennaElement(Phased Array System Toolbox) 함수를 사용하여 Iridium 위성의 48빔 안테나 패턴을 근사합니다.
Iridium NEXT 위성군과 네트워크에 대한 자세한 내용은 https://www.iridium.com/network/를 참조하십시오.
시나리오 만들기
위성 시나리오를 만듭니다. 시나리오의 시작 날짜와 지속 시간을 지정합니다. 지속 시간을 뉴욕에서 버뮤다까지의 비행 시간(약 2시간)과 동일하게 설정합니다.
startTime = datetime(2023,10,9,7,10,0,TimeZone="America/New_York"); stopTime = startTime + hours(2) + minutes(2); sampleTime = 10; %seconds sc = satelliteScenario(startTime,stopTime,sampleTime); viewer = satelliteScenarioViewer(sc);
공항
시나리오에서 사용할 공항 속성을 설정합니다.
airportName = ["JFK International (New York)";... "L.F. Wade International (Bermuda)"]; airportLat = [40.6413;32.3634]; airportLon = [-73.7781;-64.7053];
groundStation 함수를 사용하여 시나리오에 공항을 추가합니다.
airports = groundStation(sc,airportLat,airportLon,Name=airportName);
항공기
존 F. 케네디 국제 공항에서 이륙하여 L.F. 웨이드 국제 공항에 착륙하는 통상적인 비행의 웨이포인트 및 도착 시간 집합에서 geoTrajectory (Sensor Fusion and Tracking Toolbox) System object™를 만듭니다. geoTrajectory System object는 측지 좌표의 웨이포인트를 기반으로 궤적을 생성합니다. 시나리오 지속 시간을 기반으로 비행 시간을 설정합니다.
waypoints = [... % Latitude (deg), Longitude (deg), Altitude (meters) 40.6289,-73.7738,3;... 40.6325,-73.7819,3;... 40.6341,-73.7852,44;... 40.6400,-73.7974,265;... 40.6171,-73.8618,1012;... 40.5787,-73.8585,1698;... 39.1452,-71.6083,11270;... 34.2281,-66.0839,11264;... 32.4248,-64.4389,970;... 32.3476,-64.4565,574;... 32.3320,-64.4915,452;... 32.3459,-64.5712,453;... 32.3610,-64.6612,18;... 32.3621,-64.6678,3;... 32.3639,-64.6777,3]; timeOfArrival = duration([... % time (HH:mm:ss) "00:00:00";... "00:00:20";... "00:00:27";... "00:00:43";... "00:01:47";... "00:02:21";... "00:21:25";... "01:32:39";... "01:54:27";... "01:55:47";... "01:56:27";... "01:57:48";... "01:59:49";... "01:59:55";... "02:00:15"]); trajectory = geoTrajectory(waypoints,seconds(timeOfArrival),AutoPitch=true,AutoBank=true);
시나리오의 샘플 레이트에서 항공기 궤적의 위도, 경도, 고도(LLA) 웨이포인트를 출력합니다.
LLA = lookupPose(trajectory,0:sc.SampleTime:max(seconds(timeOfArrival)));
geoplot을 사용하여 항공기 궤적을 시각화합니다.
geoplot(LLA(:,1), LLA(:,2), "b-") geolimits([31,42],[-76,-63]); geobasemap topographic;
platform 함수를 사용하여 시나리오에 항공기를 추가합니다. platform 함수를 사용하면 항공기, 자동차, 배와 같은 플랫폼을 시나리오에 추가하고 위성, 지상국 및 기타 플랫폼과의 액세스 분석을 수행할 수 있습니다. Visual3DModel 속성을 사용하여 시나리오에 항공기의 시각적 표현을 추가합니다. 이 예제에서는 NarrowBodyAirliner.glb 파일을 사용합니다.
aircraft = platform(sc,trajectory, Name="Aircraft", Visual3DModel="NarrowBodyAirliner.glb"); camtarget(viewer,aircraft);

위성
2018년에서 2019년 사이에 발사된 Iridium NEXT 위성 네트워크[1]에는 다음과 같은 66개의 활성 LEO 위성이 포함되어 있습니다.
6개의 궤도면으로 이루어져 있으며 경사각은 약 86.6도이고 궤도면 간 RAAN 차이는 약 30도입니다[1].
각 궤도면에는 11개의 위성이 있으며 위성 간 진근점 이각(true anomaly) 차이는 약 32.7도입니다[1].
시나리오에 활성 Iridium NEXT 위성을 추가합니다. Iridium 네트워크의 위성에 대한 궤도 요소를 만들고 satellite 함수를 사용하여 위성을 만듭니다.
numSatellitesPerOrbitalPlane = 11; numOrbits = 6; orbitIdx = repelem(1:numOrbits,1,numSatellitesPerOrbitalPlane); planeIdx = repmat(1:numSatellitesPerOrbitalPlane,1,numOrbits); RAAN = 180*(orbitIdx-1)/numOrbits; trueanomaly = 360*(planeIdx-1 + 0.5*(mod(orbitIdx,2)-1))/numSatellitesPerOrbitalPlane; semimajoraxis = repmat((6371 + 780)*1e3,size(RAAN)); % meters inclination = repmat(86.4,size(RAAN)); % degrees eccentricity = zeros(size(RAAN)); % degrees argofperiapsis = zeros(size(RAAN)); % degrees iridiumSatellites = satellite(sc,... semimajoraxis,eccentricity,inclination,RAAN,argofperiapsis,trueanomaly,... Name="Iridium " + string(1:66)');
Aerospace Toolbox 라이선스가 있는 경우 walkerStar (Aerospace Toolbox) 함수를 사용하여 Iridium 위성군을 만들 수도 있습니다.
많은 위성이 공통 궤도면을 공유하므로 각 궤도면에서 첫 번째 위성의 궤도 경로만 표시합니다.
hide(iridiumSatellites.Orbit,viewer); show(iridiumSatellites(1:numSatellitesPerOrbitalPlane:end).Orbit,viewer);
Iridium 위성에 원뿔형 센서를 추가하여 위성과 항공기 간의 시각적 액세스를 설정하는 카메라 역할을 수행하도록 합니다.
iridiumConicalSensors = conicalSensor(iridiumSatellites,"MaxViewAngle",125);항공기 액세스 분석
시나리오를 사용하여 항공기, 공항, 위성 간의 액세스 분석을 결정합니다. 공항에 대한 항공기의 가시선 액세스가 가능한 시점을 기반으로 access 함수와 accessIntervals 함수를 사용하여 항공기와 공항 간의 액세스 구간을 계산합니다. 존 F. 케네디 공항과 L.F. 웨이드 공항은 각각 비행의 처음 2시간과 마지막 2시간 동안 항공기를 볼 수 있습니다. 그 외의 경우에는 지구의 곡률에 의해 항공기가 차단됩니다.
acAirport = access(aircraft,sc.GroundStations); airportAccessIntvls = accessIntervals(acAirport)
원뿔형 센서의 시야 내에서 항공기의 가시성을 기반으로 앞에서와 유사하게 항공기와 위성 간의 액세스 분석을 계산합니다. 이는 다음 섹션에 나와 있는 Iridium 다중 빔 안테나의 1차 근삿값 역할을 합니다. 뷰어의 파선은 항공기 동체에서 공항과 위성까지의 가시선 액세스를 나타냅니다.
acSatellite = access(aircraft,iridiumConicalSensors); satelliteAccessIntvls = accessIntervals(acSatellite);

[sSatellite,time] = accessStatus(acSatellite); satVisPlotData = double(sSatellite); satVisPlotData(satVisPlotData == false) = NaN; % Hide invisible satellites. satVisPlotData = satVisPlotData + (0:numel(iridiumSatellites)-1)'; % Add space to satellites to be stacked. plot(time,satVisPlotData," .",Color="blue") yticks(1:5:66) yticklabels(iridiumSatellites.Name(1:5:66)) title("Satellite Visibility") grid on xlabel("Time") axis tight
액세스 구간 계산은 항공기가 공해(open ocean) 상공에 있을 때 Iridium 네트워크를 통해 지속적으로 위성 통신에 액세스함을 나타냅니다. 공항 액세스와 결합하면 항공기는 비행 내내 지속적인 가시선 액세스가 가능합니다.
항공기 링크 분석
항공기가 비행 내내 공항 및 Iridium 네트워크와 직접 연결을 유지하도록 설정한 후, 각 지상 및 위성 기반 ADS-B Out 시스템에 대한 링크 버짓을 생성합니다. ADS-B Out 시스템은 각각 항공기 위쪽과 아래쪽에 위치한 기존 Mode A/C 트랜스폰더 안테나와 Mode S 트랜스폰더 안테나를 사용합니다. ADS-B는 트랜스폰더의 Mode S를 사용하며 125와트의 최소 유효 등방성 방사 전력(EIRP)으로 1090MHz 주파수에서 ADS-B Out을 동작시킵니다.
fADSB = 1090e6; % 1090 MHz이 예제에서는 Mode-S 트랜스폰더 한 쌍을 항공기 앞쪽 윗부분에 위치한 하나의 등방성 송신기로 모델링합니다. 이때의 장착 위치는 일반적인 상업용 항공기 윗부분에 ADS-B 트랜시버를 장착할 때의 대략적인 위치에 해당합니다. 등방성 안테나의 유효 이득은 0dBi이므로 송신 증폭기 전력 출력을 125와트로 설정하면 안테나의 방사 전력도 125와트가 됩니다.
aircraftADSBAntenna = arrayConfig("Size",[1 1]); % Create an isotropic antenna element aircraftADSBTransmitter = transmitter(aircraft, ... Antenna = aircraftADSBAntenna, ... Frequency = fADSB,... Power=10*log10(125),... % ADS-B Out minimum as EIRP of 125 Watts MountingLocation=[8,0,-2.7],... Name="ADS-B Aircraft Transmitter");
항공기-공항 ADS-B Out 링크
공항에 등방성 안테나와 수신기를 추가합니다.
% Airport Antenna airportADSBAntenna = arrayConfig("Size",[1 1]); % Create an isotropic antenna element airportADSBReceiver = receiver(... airports, ... Antenna=airportADSBAntenna, ... Name=airports.Name + " Receiver"); pattern(airportADSBReceiver,fADSB,Size=1000);
항공기-위성 ADS-B Out 링크
Satellite Communication Toolbox를 사용하면 Iridium 위성의 안테나를 등방성 안테나로 모델링할 수 있습니다. Phased Array System Toolbox 라이선스가 있는 경우 Iridium NEXT 위성에서 사용하는 사용자 지정 48빔 안테나의 근삿값을 모델링할 수 있습니다[2]. 드롭다운 목록을 사용하여 모델링할 안테나를 선택합니다. 뷰어의 실선은 항공기 안테나에서 공항과 위성까지의 가능한 링크를 나타냅니다.
antennaType =
"Isotropic";등방성 안테나를 사용하는 Iridium 위성 링크 시뮬레이션하기
등방성 안테나 수신기를 만들고 Iridium 위성에 추가합니다.
if antennaType == "Isotropic" % Create and add an isotropic antenna receiver to the Iridium satellites. satelliteADSBAntenna = arrayConfig("Size",[1 1]); % Add code comment satelliteADSBReceiver = receiver(iridiumSatellites, ... Antenna=satelliteADSBAntenna, ... MountingAngles=[0,0,0], ... Name=iridiumSatellites.Name + " Receiver"); pattern(satelliteADSBReceiver,fADSB,Size=50000); % Play the scenario. play(sc); end

사용자 지정 48빔 안테나를 사용하는 Iridium 위성 링크 시뮬레이션하기
HelperCustom48BeamAntenna 편의 함수를 사용하여 사용자 지정 안테나 소자 수신기를 만들고 Iridium 위성에 추가합니다.
참고: 장착 각도는 Phased Array System Toolbox와 Satellite Communications Toolbox의 디폴트 프레임과 일치합니다.
if antennaType == "Custom 48-Beam" % Use Custom Antenna Element on 48-spot beam satelliteADSBAntenna = HelperCustom48BeamAntenna(fADSB); satelliteADSBReceiver = receiver(iridiumSatellites, ... Antenna=satelliteADSBAntenna, ... MountingAngles=[0,-90,0], ... Name=iridiumSatellites.Name + " Receiver"); pattern(satelliteADSBReceiver,fADSB,Size=200000); % Play the scenario. play(sc); end

ADS-B Out 링크 성립(link closure) 시간
항공기에서 공항과 위성까지의 ADS-B Out 링크 분석을 추가합니다.
lnkADSB = link(aircraftADSBTransmitter, [airportADSBReceiver, satelliteADSBReceiver]);
사용 가능한 수신기 중 하나에 대한 링크의 최대 마진을 플로팅합니다. 마진은 수신된 Eb/No에서 해당 수신기에 필요한 Eb/No를 뺀 값입니다.
[eL,time] = ebno(lnkADSB); marginADSB = eL - repmat([airportADSBReceiver.RequiredEbNo,satelliteADSBReceiver.RequiredEbNo]',[1,size(eL,2)]); figure; plot(time,max(marginADSB),"b") axis tight grid on xlabel("Time"); ylabel("Margin (dB)"); title("ADS-B Out Link Margin vs. Time");
항공기 추적 뷰
선택적으로, 항공기를 따라가거나 추적하고 항공기 동체에 대한 액세스와 링크를 시각화하는 두 번째 뷰어를 만듭니다. 그런 다음 마우스를 사용하여 이미지에 표시된 대로 항공기의 보기를 조정할 수 있습니다.
aircraftViewer = satelliteScenarioViewer(sc);
aircraftViewer.Position = aircraftViewer.Position + [200 200 0 0]; % Reposition aircraft viewer
aircraftViewer.PlaybackSpeedMultiplier = 5;
aircraftViewer.play();
camtarget(aircraftViewer,aircraft);
참고 문헌
[1] Attachment EngineeringStatement SAT-MOD-20131227-00148. https://fcc.report/IBFS/SAT-MOD-20131227-00148/1031348. Accessed 17 Jan. 2023.
[2] Attachment Exhibit A SAT-MOD-20131227-00148. https://fcc.report/IBFS/SAT-MOD-20131227-00148/1031240. Accessed 17 Jan. 2023.