
Dump1090은 RTLSDR 장치용 간단한 Mode S 디코더입니다.
Dump 1090은 RTLSDR 장치를 위해 특별히 설계된 Mode S 디코더입니다.
주요 기능은 다음과 같습니다:
"make"를 입력하세요.
RTL 장치에서 직접 트래픽을 캡처하고 캡처된 트래픽을 표준 출력에 표시하려면 옵션 없이 프로그램을 실행하기만 하면 됩니다:
./dump1090
16진수 메시지만 출력하려면:
./dump1090 --raw
대화형 모드로 프로그램을 실행하려면:
./dump1090 --interactive
네트워킹 지원과 함께 대화형 모드로 프로그램을 실행하고 브라우저로 http://localhost:8080에 접속하여 실시간 트래픽을 보려면:
./dump1090 --interactive --net
대화형 모드에서는 정보 밀도가 낮지만 더 "아케이드 스타일"의 출력을 볼 수 있습니다. 화면은 매초 새로고침되며, 수신된 Mode S 패킷에서 추출한 고도와 항공편 번호 같은 추가 정보와 함께 최근에 감지된 모든 항공기를 표시합니다.
파일에서 데이터를 디코딩하려면 다음을 사용하세요:
./dump1090 --ifile /path/to/binfile
바이너리 파일은 다음과 같이 rtl_sdr을 사용하여 생성해야 합니다(또는 2MHz 샘플레이트로 8비트 부호 없는 IQ 샘플을 출력할 수 있는 다른 프로그램을 사용해도 됩니다).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
예제에서 rtl_sdr은 게인 50을 사용합니다. 간단히 말해 튜너에서 사용 가능한 최고 게인을 사용해야 합니다. Dump1090 자체를 호출할 때는 지원되는 최고 게인을 자동으로 선택할 수 있으므로 이 작업이 필요하지 않습니다.
--ifile 옵션에 "-"를 인자로 사용하여 표준 입력을 통해 프로그램에 데이터를 공급할 수도 있습니다.
Dump1090은 다른 게인, 주파수 등을 설정하기 위해 다른 명령줄 옵션과 함께 호출할 수 있습니다. 옵션 목록은 다음을 사용하세요:
./dump1090 --help
여기에 문서화되지 않은 모든 것은 자명하며, 대부분의 사용자에게는 인자 없이 호출하는 것이 가장 좋은 방법입니다.
기본적으로 Dump1090은 사용 가능한 경우 24비트 CRC 체크섬을 사용하여 디코딩 오류를 확인합니다. 오류가 있는 메시지는 폐기됩니다.
--fix 명령줄 스위치는 CRC 체크섬에 기반한 단일 비트 오류 정정을 활성화합니다. 기술적으로는 단일 비트 오류로 인해 발생하는 미리 계산된 체크섬 차이 테이블을 사용하여 잘못된 비트 위치를 찾아냅니다.
이 기능은 실제로 오류를 정정할 수 있으며 제 경험상 안정적으로 작동합니다. 그러나 매우 신뢰할 수 있는 데이터가 필요하다면 오류 정정을 비활성화하기 위해 --no-fix 명령줄 스위치를 사용할 것을 권장합니다.
제한된 경험이지만 Dump1090은 다른 프로그램으로는 문제가 발생했던 조건에서도 많은 수의 메시지를 디코딩할 수 있었습니다. 그러나 공식적인 테스트가 수행되지 않았으므로 이 프로그램이 다른 유사한 프로그램보다 낫다거나 나쁘다고 단언할 수는 없습니다.
Dump1090이 제대로 디코딩하지 못하는 트래픽을 캡처할 수 있다면 다운로드 링크와 함께 이메일을 보내주세요. 여가 시간에 탐지 기능을 개선하려고 시도할 수 있습니다(이것은 취미 프로젝트일 뿐입니다).
--net으로 네트워킹 지원을 활성화하면 Dump1090은 포트 30002와 30001에서 클라이언트 연결을 수신하기 시작합니다(원한다면 두 포트를 모두 변경할 수 있습니다. --help 출력을 참조하세요).
연결된 클라이언트는 장치(또는 --ifile이 사용되는 경우 파일)에서 도착하는 즉시 다음 형식과 유사한 원시 형식의 데이터를 제공받습니다:
*8D451E8B99019699C00B0A81F36E;
각 항목은 단순한 줄바꿈(LF 문자, 16진수 0x0A)으로 구분됩니다.
포트 30001은 원시 입력 포트이며, 위에 명시된 것과 동일한 형식으로 Dump1090에 데이터를 공급하는 데 사용할 수 있습니다. 16진수 메시지는 *로 시작하고 ; 문자로 끝납니다.
예를 들어 데이터를 수집하는 다른 원격 Dump1090 인스턴스가 있다면 다음과 같이 출력을 로컬 Dump1090 인스턴스에 합산할 수 있습니다:
nc remote-dump1090.example.net 30002 | nc localhost 30001
포트 30001을 통해 수신된 데이터는 포트 30002를 수신 중인 클라이언트에게도 브로드캐스트된다는 점에 유의하는 것이 중요합니다.
일반적으로 포트 30001에서 수신된 모든 데이터는 RTL 장치의 일반 트래픽이나 --ifile이 사용될 때의 파일 트래픽과 정확히 동일하게 처리됩니다.
다음 예제와 같이 --ifile에 /dev/zero를 인자로 사용하여 Dump1090을 허브로만 사용할 수 있습니다:
./dump1090 --net-only
또는 화면에서 상황을 확인하려면:
./dump1090 --net-only --interactive
그런 다음 인터넷의 다양한 데이터 소스에서 데이터를 공급할 수 있습니다.
연결된 클라이언트는 다음과 유사한 SBS1(BaseStation) 형식의 메시지를 제공받습니다:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
이 기능은 다른 디코더를 사용할 필요 없이 다양한 공유 사이트에 데이터를 공급하는 데 사용할 수 있습니다.
Mode S 메시지는 1090MHz 주파수로 전송됩니다. 괜찮은 안테나가 있다면 특히 야외에서 하늘이 잘 보이는 위치에 있다면 현재 위치에서 꽤 멀리 떨어진 항공기의 신호를 수신할 수 있습니다.
다음 지침에 따라 매우 저렴한 안테나를 쉽게 직접 만들 수 있습니다:
http://antirez.com/news/46
이 간단한 안테나로 저는 200km 이상 떨어진 항공기의 신호를 수신할 수 있었습니다.
더 제대로 된 안테나에 관심이 있다면 다음 자료를 확인하세요:
--aggressive를 사용하면 Mode S 패킷 감지 및 디코딩의 수정된 버전인 aggressive 모드를 활성화할 수 있습니다. aggressive 모드는 일반적으로 더 많은 CPU를 사용하지만(특히 DF17 패킷을 전송하는 비행기가 많은 경우), 몇 가지 더 많은 메시지를 감지할 수 있습니다.
aggressive 모드의 알고리즘은 다음과 같은 방식으로 수정됩니다:
aggressive 모드의 사용은 트래픽이 적은 환경에서만 권장됩니다. 더 많은 메시지를 캡처할 기회를 얻기 위해서입니다.
디버그 모드는 감지 알고리즘을 개선하거나 주어진 입력에서 프로그램이 작동하지 않는 이유를 이해하기 위한 시각적 도움말입니다.
이 모드에서는 메시지가 ASCII 아트 스타일의 그래픽 표현으로 표시되며, 2MHz로 샘플링된 개별 크기 막대가 표시됩니다.
인덱스는 샘플 번호를 표시하며, 0은 첫 번째 Mode S 피크가 발견된 샘플입니다. 약간의 추가 배경 잡음도 첫 번째 피크 앞에 추가되어 상황을 파악할 수 있게 합니다.
디버그 모드를 활성화하고 기록할 수 있는 패킷 조합을 확인하려면 mode1090 --help를 사용하여 사용 가능한 디버그 플래그 목록을 확인하세요.
디버그 모드에는 웹 브라우저로 패킷을 시각화하는 데 사용되는 선택적 자바스크립트 출력이 포함되어 있습니다. 'tools' 디렉터리의 debug.html 파일을 사용하여 생성된 frames.js 파일을 로드할 수 있습니다.
코드는 이해하기 쉽도록 작성되었으며 문서화가 잘 되어 있습니다. Mode S 규격서를 갖춘 성실한 프로그래머라면 작동 방식을 이해하는 것이 쉬울 것입니다.
제가 사용한 알고리즘은 기본적으로 임시 SDL 프로그램으로 표시된 많은 메시지를 관찰하고, 메시지가 그래픽으로 어떻게 보이는지에 기반하여 알고리즘을 모델링하는 방식으로 얻어졌습니다.
RTLSDR 장치가 있고 머리 위로 항공기가 비행하는 지역에 있다면 프로그램을 실행하고 신호를 확인하기만 하면 됩니다.
하지만 RTLSDR 장치가 없거나 해당 지역에 항공기가 거의 없다면 Dump1090 배포판의 "testfiles" 디렉터리에 포함된 샘플 파일을 시도해 볼 수 있습니다.
다음과 같이 실행하세요:
./dump1090 --ifile testfiles/modes1.bin
이는 단순한 필터로, 원시 IQ 8비트 샘플을 입력으로 받아 I와 Q가 지정된 보다 32개 이상의 샘플 동안 낮은 파일의 모든 부분을 제거한 파일을 출력합니다.
다음과 같이 사용하세요:
cat big.bin | ./dump1090 --snip 25 > small.bin
저는 이 프로그램 소스 코드 배포판에 포함할 작은 테스트 파일을 만들기 위해 이 기능을 사용했습니다.
Dump1090은 2012년 크리스마스 시즌의 여가 시간에 작성되었습니다. 취미 프로젝트이므로 여가 시간에만 문제를 해결하고 개선할 수 있지만, 프로그램 개선을 위해 풀 리퀘스트를 보내는 것을 권장합니다. 좋은 출발점은 소스 배포판에 포함된 TODO 목록이 될 수 있습니다.
Dump1090은 Salvatore Sanfilippo [email protected]이 작성했으며 BSD 3-Clause 라이선스로 배포됩니다.