ADS-B 신호를 사용한 항공기 추적
이 예제에서는 ADS-B(Automatic Dependent Surveillance-Broadcast) 신호를 처리하여 항공기를 추적하는 방법을 보여줍니다. 사전에 캡처된 신호를 사용하거나, RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP™ 라디오를 사용하여 신호를 실시간으로 수신할 수 있습니다. 추적된 항공기를 Mapping Toolbox™를 사용하여 맵에서 시각화할 수도 있습니다.
필요한 하드웨어와 소프트웨어
기본적으로 이 예제는 사전에 캡처된 데이터를 사용하여 실행됩니다. 사용자가 신호를 무선으로 수신하는 방식을 선택할 수도 있습니다. 이를 위해서는 다음 중 하나가 필요합니다.
RTL-SDR 라디오 및 Communications Toolbox Support Package for RTL-SDR Radio.
Pluto 라디오 및 Communications Toolbox Support Package for Analog Devices® ADALM-PLUTO Radio.
USRP N2xx 또는 B2xx 시리즈 라디오 및 Communications Toolbox Support Package for USRP Radio. 지원되는 라디오에 대한 자세한 내용은 Supported Hardware and Required Software 항목을 참조하십시오.
USRP E3xx, N3xx 또는 X3xx 시리즈 라디오 및 Wireless Testbench Support Package for NI USRP Radios. 지원되는 라디오에 대한 자세한 내용은 Supported Radio Devices (Wireless Testbench) 항목을 참조하십시오.
소개
ADS-B는 항공기 추적을 위한 협력적 감시 기술입니다. 이 기술을 통해 항공기는 Mode-S 신호 방식을 사용하여 고도, GPS 좌표, 비행 방향과 같은 위치 정보를 주기적으로 방송할 수 있습니다.
Mode-S는 항공 트랜스폰더 질의 모드의 한 유형입니다. 항공기는 질의 요청(interrogation request)을 수신하면 다시 트랜스폰더의 스쿼크 코드(squawk code)를 전송합니다. 이를 Mode 3A라고 합니다. Mode-S (Select)는 트랜스폰더에 질의 요청을 너무 자주 보내지 않도록 설계된 또 다른 유형의 질의 모드입니다. Mode-S에 대한 자세한 내용은 [ 1 ]에서 확인할 수 있습니다. 이 모드는 유럽에서 널리 사용되고 있으며, 현재 북미 지역에서 단계적으로 도입되고 있습니다.
Mode-S 신호 방식은 능동적으로 요청받지 않아도 전송되도록 정의된 스퀴터 메시지(squitter message)를 사용하며 항공 무선통신 시스템에서 사용됩니다. Mode-S는 다음과 같은 특성을 갖습니다.
1090MHz의 송신 주파수
PPM(펄스 위치 변조)
1Mbit/s의 데이터 레이트
짧은 스퀴터 길이: 56마이크로초
확장 스퀴터 길이: 112마이크로초
짧은 스퀴터 메시지는 다음과 같은 필드를 포함합니다.
다운링크 형식(DF)
성능(CA)
고유한 24비트 시퀀스로 구성된 항공기 ID
CRC 체크섬
확장 스퀴터(ADS-B) 메시지에는 짧은 스퀴터 메시지의 모든 정보가 포함되고 아울러 다음 값 중 하나가 포함됩니다.
고도
위치
방향
수평 및 수직 속도
다음 그림에 보이는 것과 같이 Mode-S의 신호 형식은 먼저 8마이크로초 길이의 동기 펄스가 있고 그 뒤에 56마이크로초 또는 112마이크로초 길이의 데이터를 가집니다.

수신기 구조
다음 블록 다이어그램은 수신기 코드 구조를 요약하여 보여줍니다. 처리 과정은 신호 소스, 물리 계층, 메시지 구문 분석기, 데이터 뷰어의 네 부분으로 구성됩니다.

신호 소스
다음 신호 소스 중 하나를 지정할 수 있습니다.
''Captured Signal''- 무선 신호를 파일로 기록하고, 이 신호를 Baseband File Reader 객체를 소스로 하여 2.4Msps 속도로 받음''RTL-SDR Radio''- 2.4Msps의 RTL-SDR 라디오''ADALM-PLUTO Radio''- 12Msps의 ADALM-PLUTO 라디오''USRP Radio''- 모든 무선통신에 대해 20Msps의 USRP 라디오를 사용하며, 예외적으로 N310/N300 시리즈는 2.4Msps를 사용함
신호 소스를 ''RTL-SDR'', ''ADALM-PLUTO'' 또는 ''USRP Radio''로 설정하면, 이 예제는 컴퓨터에서 해당 라디오를 검색하여 이를 신호 소스로 사용하며, 이때 RTL-SDR 라디오는 주소 '0'에서, ADALM-PLUTO 라디오는 주소 'usb:0'에서 검색합니다.
확장 스퀴터 메시지의 길이는 120마이크로초이므로, 신호 소스는 동시에 180개의 확장 스퀴터 메시지를 포함할 정도로 충분한 개수의 샘플을 처리하도록 구성되며, 이에 따라 신호 속성의 SamplesPerFrame을 적절하게 설정합니다. 알고리즘의 나머지 부분에서는 이 데이터 프레임에서 Mode-S 패킷을 검색한 후 올바르게 식별된 패킷을 모두 반환합니다. 이러한 유형의 처리를 일괄 처리(batch processing)라고 합니다. 또 다른 방식은 한 번에 하나의 확장 스퀴터 메시지를 처리하는 것입니다. 이 단일 패킷 처리 방식에서는 일괄 처리보다 180배 더 많은 오버헤드가 발생하지만 지연은 180배 더 적습니다. ADS-B 수신기는 지연이 어느 정도 허용되므로(delay tolerant), 이 예제에서는 일괄 처리를 사용합니다.
물리 계층
물리 계층(PHY)은 신호 소스에서 받은 기저대역 샘플을 처리하여 PHY 계층 헤더 정보와 원시 메시지 비트를 포함하는 패킷을 생성합니다. 다음 다이어그램은 물리 계층 구조를 보여줍니다.

RTL-SDR 라디오는 [200e3, 2.8e6]Hz 범위의 샘플링 레이트를 사용할 수 있습니다. 소스가 RTL-SDR 라디오인 경우, 예제에서는 샘플링 레이트 2.4MHz를 사용하고 실질적인 샘플링 레이트 12MHz로 5배 보간합니다.
ADALM-PLUTO 라디오는 [520e3, 61.44e6]Hz 범위의 샘플링 레이트를 사용할 수 있습니다. 소스가 ADALM-PLUTO인 경우, 예제에서는 입력값을 12MHz로 직접 샘플링합니다.
USRP 라디오는 여러 샘플링 레이트를 사용할 수 있습니다. USRP 라디오가 소스인 경우, 예제에서는 대부분의 무선통신에 대해 입력값을 20MHz 샘플 레이트로 직접 샘플링합니다. N310/N300 라디오의 경우, 데이터는 2.4MHz 샘플 레이트로 수신되며 실질적인 샘플링 레이트 12e6으로 5배 보간합니다.
예를 들어, 데이터 레이트가 1Mbit/s이고 유효 샘플링 레이트가 12MHz인 경우 신호는 심볼당 12개의 샘플을 포함합니다. 수신 처리 체인에서는 복소수 심볼의 크기를 사용합니다.
패킷 동기화기(packet synchronizer)는 확장 스퀴터 패킷 2개에 상응하는 데이터 서브프레임에 대해 작동합니다. 이는 12MHz에서 1440개 샘플 혹은 120마이크로초에 해당합니다. 이 정도 길이의 서브프레임이면 확장 스퀴터가 서브프레임 안에 완전히 포함될 수 있습니다. 패킷 동기화기는 먼저 수신된 신호와 8마이크로초 프리앰블의 상관을 구하고 피크 값을 찾습니다. 그런 다음 동기화 지점이 프리앰블 시퀀스 [1 0 0 0 0 0 1 0 1 0 0 0 0 0 0]과 일치하는지 확인하여 동기화 지점을 검증합니다. 여기서 값 1은 높은 값을 나타내고 값 0은 낮은 값을 나타냅니다.
Mode-S PPM 방식은 2개의 심볼을 정의합니다. 각 심볼에는 2개의 칩이 있으며, 하나는 높은 값이고 다른 하나는 낮은 값입니다. 첫 번째 칩이 높은 값이고 그 다음 칩이 낮은 값이면 심볼은 1이 됩니다. 또는, 첫 번째 칩이 낮은 값이고 그 다음 칩이 높은 값이면 심볼은 0이 됩니다. 비트 구문 분석기가 수신된 칩을 복조하고 이진 메시지를 생성합니다. 그런 다음 CRC 검사기가 이진 메시지의 유효성을 검사합니다. 비트 구문 분석기의 출력값은 Mode-S 물리 계층 헤더 패킷으로 구성된 벡터이며, 패킷은 다음 필드를 포함합니다.
RawBits - 원시 메시지 비트
CRCError - CRC에 통과하면 FALSE, CRC에 실패하면 TRUE
Time - 수신 시작부터 측정된 수신 시간(단위: 초)
DF - 다운링크 형식(패킷 유형)
CA - 성능
메시지 구문 분석기
메시지 구문 분석기는 [ 2 ]에 설명된 패킷 유형을 기반으로 원시 비트에서 데이터를 추출합니다. 이 예제에서는 항공 속도, 식별 부호, 상공 위치 데이터가 포함된 짧은 스퀴터 패킷과 확장 스퀴터 패킷을 구문 분석할 수 있습니다.
데이터 뷰어
데이터 뷰어는 수신된 메시지를 그래픽 사용자 인터페이스(GUI)에 표시합니다. 데이터 뷰어는 각 패킷 유형마다 검출된 패킷 개수, 올바르게 디코딩된 패킷 개수, 패킷 오류율(PER)을 표시합니다. 라디오가 데이터를 캡처하면 이 메시지로부터 디코딩된 정보가 애플리케이션에 테이블 형식으로 나열됩니다.
ADS-B 신호를 사용하여 항공기 추적하기
수신기가 사용자 입력을 요청하고 변수를 초기화합니다. 사용자가 입력값을 설정한 후, 신호 소스, 물리 계층, 메시지 구문 분석기, 데이터 뷰어를 루프 내에서 호출합니다. 루프는 프레임 지속 시간을 사용하여 무선통신 시간을 추적합니다.
% The default configuration runs using captured data. You can set % |cmdlineInput| to |1|, then run the example to optionally change these % configuration settings: % # Reception duration in seconds, % # Signal source (captured data or RTL-SDR radio or ADALM-PLUTO radio or USRP radio), % # Optional output methods (map and/or text file). % For the option to change default settings, set |cmdlineInput| to 1. cmdlineInput = 0; if cmdlineInput % Request user input from the command-line for application parameters userInput = helperAdsbUserInput; else load('defaultinputsADSB.mat'); end % Calculate ADS-B system parameters based on the user input [adsbParam,sigSrc] = helperAdsbConfig(userInput); % Create the data viewer object and configure based on user input viewer = helperAdsbViewer('LogFileName',userInput.LogFilename, ... 'SignalSourceType',userInput.SignalSourceType); if userInput.LogData startDataLog(viewer); end if userInput.LaunchMap startMapUpdate(viewer); end % Create message parser object msgParser = helperAdsbRxMsgParser(adsbParam); % Start the viewer and initialize radio time start(viewer) radioTime = 0; % Main loop while radioTime < userInput.Duration if adsbParam.isSourceRadio if adsbParam.isSourcePlutoSDR [rcv,~,lostFlag] = sigSrc(); else [rcv,~,lost] = sigSrc(); lostFlag = logical(lost); end else rcv = sigSrc(); lostFlag = false; end % Process physical layer information (Physical Layer) [pkt,pktCnt] = helperAdsbRxPhy(rcv,radioTime,adsbParam); % Parse message bits (Message Parser) [msg,msgCnt] = msgParser(pkt,pktCnt); % View results packet contents (Data Viewer) update(viewer,msg,msgCnt,lostFlag); % Update radio time radioTime = radioTime + adsbParam.FrameDuration; end % Stop the viewer and release the signal source stop(viewer) release(sigSrc)
![]()
다음 그림은 탐지된 항공기에 대한 정보를 보여줍니다.

Mapping Toolbox 라이선스가 있으면 항공기를 맵 위에서 볼 수도 있습니다.

심층 탐구
ADSBExampleApp 앱을 사용하여 ADS-B 신호를 조사할 수 있습니다. 이 앱을 사용하여 신호 소스를 선택하고 지속 시간을 변경합니다. 이 앱을 실행하려면 MATLAB 명령 창에 ADSBExampleApp을 입력하십시오.
참고 문헌
International Civil Aviation Organization, Annex 10, Volume 4. Surveillance and Collision Avoidance Systems.
Technical Provisions For Mode S Services and Extended Squitter (Doc 9871)