---
title: 空から降ってくるバイナリを読む〜数千円のハードで作る、自分だけの飛行機トラッカー〜
tags: 
author: [Ryota Ayaki](https://www.docswell.com/user/ayakix)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJR9DX4K79.jpg?width=480
description: Flightradar24のような航空機追跡アプリは、実は特別なデータ提供元を持っているわけではありません。上空を飛ぶ旅客機は、自分の位置・高度・速度・便名を、暗号化なしの電波として放送し続けています。これは ADS-B と呼ばれる仕組みで、数千円のアンテナとUSBドングルで誰でも電波を受信できます。  本セッションでは、この「空から降ってくる電波」が、地図上で動く一機の飛行機になるまでの全工程を、一から実装して確かめた話をします。  この発表を聞き終えると、次のことが分かるようになります。  飛行機が放送するADS-Bの全体像と、設計の背景 アンテナが拾う生の電波(I/Q信号)が、信号処理(復調)を経てビット列になるまで ビット列から機体アドレス・緯度経度・速度をどう読み解くか(バイナリプロトコルのデコード手順) 緯度経度を2枚のフレームに分けて送る CPR という独特な座標エンコードの発想 当日は受信済みデータのリプレイで、生のフレームが地図上の飛行機に変わる瞬間をお見せします。空から降る電波を一緒に読んでみましょう。
published: September 11, 26
canonical: https://www.docswell.com/s/ayakix/K7N3VJ-iosdc2026
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJR9DX4K79.jpg)

空から降ってくるバイナリを読む
数千円のハードで作る、自分だけの飛行機トラッカー
Day 0, Track A, 17:20Ryota AYAKI / @ayakix


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PEXQ1625JX.jpg)

海から空へ
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3EK921MRED.jpg)

Flightrader24
https://ﬂightradar24.com/
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/L73W4QYG75.jpg)

ノギス
本尺（ 1 目盛 = 1.0 mm）
① 整数部の読み取り
副尺の0が指す本尺の位置を読みます。
2 と 3 の間 → 整数部 2 mm
② 小数部の読み取り
副尺（ 1 目盛 = 0.9 mm）
本尺と副尺が一直線に揃う箇所を読みます。
4番目で一致 → 小数部 0.4 mm
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/87DKQ95NJG.jpg)

電波は限りある資源
航空機位置
1090 MHz
AM放送
NFC
FM放送
地デジ
WiFi
衛星放送
470~710 MHz
ADS-Bで
使用される
周波数帯
~1.6 MHz
13.56 MHz
76~95 MHz
2.4 / 5 GHz
12 GHz帯~
1 MHz
10 MHz
100 MHz
500 MHz
1 GHz
5 GHz
10 GHz
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJPKLZGNE8.jpg)

航空機位置情報 (ADS-B)
航空機が自ら電波を発信し、リアルタイムにブロードキャスト

便名
Flight ID
航空機を識別するための
識別番号（コールサイン）


緯度・経度
高度
Position
Altitude
GPSなどで測定された、現
在の正確な地理的平面位
置
気圧高度計や GPSデータ
から算出された現在の高
度情報

速度
Velocity
対地速度を基準とする
移動速度情報
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2EVVQW6YEQ.jpg)

ハードウェア構成
最小限の機材で始める手軽な受信システム
1
2
受信アンテナ
1090 MHzのADS-B電波を受信
2
RTL-SDR
アンテナからの電波をデジタル信号に変換
1
3
Android/小型PC端末
受信データのデコード/表示
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/57GLWDNWEL.jpg)

SDR（Software Deﬁned Radio）とは?
なるべく生のままデジタル化し、残りは全部ソフトウェア
SDR
従来
●
FMラジオ、航空無線、Wi-Fiなど、目的の規格ごとに
専用の電子回路を物理的にハンダ付けして製造
●
FMラジオ専用機で航空無線の電波を受信・復調す
ることは物理的に不可能。

低コスト化

●
アンテナで拾った高周波を、最小限の回路とADC（ア
ナログ・デジタル変換器）で「生の数値データ」として
取り込む
●
プログラムを書き換えるだけで、同じハードウェアの
まま「FMラジオ」「航空機ADS-B」など、様々な通信
方式に対応
柔軟性と拡張性

信号処理の可視化
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4EQY31QQJP.jpg)

電波の中から ADS-B を見つける
合図（プリアンブル）を探し、直後の 5 bit を読む
直後の 5 bit を読む
プリアンブル
●
送られてくるデータには区切りがない
●
2 サンプルで1bitを表現
●
決まった形の合図 を先頭に付けて送る
●
前半が高ければ 1、後半が高ければ 0
●
受信側は 1 サンプルずつずらしながら、こ
の形を探し続ける
●
先頭 5 bit が 10001（= 17）なら ADS-B
プリアンブル波形同期 (8.0 µs)
P1
0.0µs
P2
1.0µs
P3
3.5µs
P4
4.5µs
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/KJ4W1RNY71.jpg)

ADS-Bのビットフレーム構造
112 (bit)
DF
5 bit
CA
3 bit
ICAO
24 bit
ME (ペイロード )
56 bit
CRC-24
24 bit
DF: 0–4 bit (5 bit)
ME (ペイロード ): 32–87 bit (56 bit)
Downlink Format。ADS-B = 17
本文56ビット。先頭5ビットが Type Code（TC） で中身の種
類（位置、速度、識別情報など）を決定する
CA: 5–7 bit (3 bit)
通信能力 / 運用状態
CRC-24: 88–111 bit (24 bit)
24ビットの誤り検出パリティ。受信データの整合性を検証する
ICAO: 8–31 bit (24 bit)
24ビットの機体固有アドレス。世界で1機に1つ、国ごとに
割当（例: 71C709 韓国機 / 86xxxx 日本機）
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE1YGQ5N7G.jpg)

ME フィールド (56 bit / 7 byte)
Type Code (TC)
5 bit
具体的なフライトデータ
51 bit
TC 1 〜 4 | 機体識別 / コールサイン
便名（例: ANA111 , 8文字の英数字コード）
TC 5 〜 8 | 地上位置 (Surface Position)
滑走路走行中の緯度・経度、対地移動速度、地上
進行方向
★ TC 9 〜 18 | 空中位置
気圧高度、CPR 符号化された緯度・経度（偶数 /奇
数フレーム）
TC 20 〜 22 | 空中位置（ GNSS高度版）
GPSの幾何学的高度を用いた位置情報
TC 19 | 空中速度 (Airborne Velocity)
対地速度（ノット）、進行方位（ Heading）、上昇 /
降下率（ ft/min）
TC 28 | 機体ステータス
緊急通報コード（スコーク： 7700など）やTCAS警告
状態
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GEWGKMWMJ2.jpg)

TC
0-4 (5b)
SS
5-6
(2b)
S
7
(1b)
高度 (Altitude)
8-19 (12b)
T
F
20 21
(1b) (1b)
CPR 緯度 (Latitude)
22-38 (17b)
CPR 経度 (Longitude)
主要パラメータ定義
Fビット（フレーム識別）と CPR
TC (Type Code): 9〜18（空中位置情報）
★ F (Format) ビット :
SS (Surveillance Status): 監視ステータス (2 bit)
S (Single-Antenna): 送信アンテナフラグ (1 bit)
高度 (Altitude): 12 bit の気圧高度データ
T (Time): UTC同期状態 (1 bit)
39-55 (17b)
CPRの奇数/偶数フレームを判別するための最重要フラグ
0 = 偶数 (even) フレーム
1 = 奇数 (odd) フレーム
CPR 緯度/経度 (各17 bit):
コンパクト位置レポート (CPR)形式。偶数と奇数の両フ
レームを受信・合成することで、高精度な現在位置を
算出


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47ZLZQ5MJ3.jpg)

圧縮/CPRの必要性
17bit送信における限界
5m高分解能化への課題
40,000km / 2^17 ≒ 305m 分解能
緯度データ22 bit
経度データ23 bit
地球1周（約40,000km）を17bitで等分した場
合、1つの単位（分解能）は約 305m
⚠ 航空機の安全な運航監視には粗すぎる精
度
合計要求帯域あわせて 45 bit 必要
💡限られた帯域で送るために圧縮が必要
=CPR(Compact Position Reporting)
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/YJ6WZ695JV.jpg)

ゾーン内の位置だけを送信
送信情報のルール
データ計算の具体例
🌐 緯度経度をゾーンに等分割
📍 送信したい緯度：33.0°
🎯 ゾーン内の相対位置を高解像度で送信
33.0 ÷ 6 ＝ 5.5
❌ どのゾーンにいるか（整数部）は送らない
5 (整数部) ＝ ゾーン番号 (送らない )
0.5 (小数部) ＝ ゾーン内位置
👉 0.5 × 2¹⁷ = 65,536 を 17 bit で送信
0°
6°
12°
18°
24°
30°
36°
Zone 0
Zone 1
Zone 2
Zone 3
Zone 4
Zone 5
3.0°
9.0°
15.0°
21.0°
27.0°
33.0°
⚠ どの候補なのかは、 1通のデータ送信だけからは特定できない
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GJ5MW6NGJ4.jpg)

ノギス
本尺（ 1 目盛 = 1.0 mm）
副尺（ 1 目盛 = 0.9 mm）
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE3W4Q2PE5.jpg)

ものさしを 2 本用意する
別のものさしで交互に送信
受信側はズレからゾーン番号を特定
偶数フレーム：60分割（1ゾーンあたり6.0000°）
📐 1つ進むごとに境界が 0.1017°ずれる
奇数フレーム：59分割（1ゾーンあたり6.1017°）
💡 このズレの大きさからゾーン番号がわかる
偶数フレーム
ゾーンが 1 つ進むごとに、境界が 0.1017° ずつずれていく
奇数フレーム
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8EDKQ9Z37G.jpg)

ズレからゾーン番号を出す（受信側）
ゾーン番号の復元計算
ゾーン内位置を度に変換
この緯度を知りたい 📍
偶数フレーム： 60分割
偶数:0.5 × 6.0000° = 3.0°
奇数:0.408333 × 6.1017° = 2.49152°
2つの計算値の差を算出
💡 0.51° ずれ = 5 × 0.1017° (5ゾーン分 )
差 : 0.50848°
→ 0.50848 ÷ 0.1017 ≒ 5.00
👉 ゾーン 5
奇数フレーム： 59分割
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V7PKLZDPJ8.jpg)

ゾーン位置から値の復元 （受信側）
復元計算の要素
値の復元計算
📐 6.0000°
1ゾーンの幅
lat = ゾーン幅 × (ゾーン番号 + 相対位置 )
🔢5
前ステップで2つのフレームの差から
復元したゾーン番号
＝ 33.0°
lat = 6.0000° × (5 + 0.5)
🎉 送信前の元の緯度が復元！
📍 0.5
ゾーン内の高精度な相対位置
0°
6°
Zone 0
偶数フレーム： 60分割
12°
Zone 1
18°
Zone 2
24°
Zone 3
５ゾーン + 0.5
30°
Zone 4
36°
Zone 5
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/2JVVQW1VJQ.jpg)

実験してみた
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5EGLWD21JL.jpg)

羽田空港第 1ターミナル展望台
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JQY31PN7P.jpg)

東京タワー展望室（メインデッキ）
ADS-Bの信号を受信できず (Low-Eガラスの影響)
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/K74W1RY3E1.jpg)

東京スカイツリータウン屋上
地デジが強すぎて受信機が飽和
２倍すると ADS-Bの帯域に
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LJ1YGQ6ZEG.jpg)

まとめ
信号のキャッチ
空からの電波を受信
飛行機が常にブロードキャ
スト（送信）している ADS-B
信号をリアルタイムにキャッ
チ
特別な送信要求をすること
なく、上空から降り注ぐ信号
を受信可能
緯度経度取得までの流れ
実験結果と考察
1
アンテナ
街中に溢れる電波
2
SDR (ソフトウェアラジオ )
実際に複数のロケーション
で受信実験
3
A/D変換
4
ビットフレーム解析
5
デコード → 緯度経度特定
https://github.com/ayakix/PocketRadar
「街中は電波で溢れている」
目に見えない無数の電波信
号が、私たちの周囲を常に
飛び交っていることをデータ
として実感
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GJWGKMW672.jpg)

余談
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EZLZQ5R73.jpg)

太平洋上にある飛行機の位置がなぜわかる？
太平洋上空の飛行機
地上 ADS-B
詳細フライト情報
衛星ベース
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/Y76WZ6917V.jpg)

FMラジオ受信
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/G75MW6NL74.jpg)

リポジトリ
https://github.com/ayakix/PocketRadar
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/9J29QM53ER.jpg)

受信距離の上限は 400kmほど
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/DEY4WXK8JM.jpg)

RTL-SDRの出力 — I/Q サンプル
生の I/Q データストリーム
ADS-B での振幅（ Magnitude）変換
・1サンプルの構成
・振幅の計算式
I と Q の 2 つの数で構成。符号なし 8 bit、無信号時は 127 が
基準
magnitude = |I - 127| + |Q - 127|
・極限までシンプルな並び
※無信号時の基準値 127 からの絶対値誤差を足し合わせることで、高
速に振幅を近似計算します。
データは I, Q, I, Q, ... と順に並ぶのみ
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/VJNY91R978.jpg)

PPM (Pulse Position Modulation) パルス位置変調
ADS-B では、1 ビットの時間を厳密に 1マイクロ秒 (1.0µs) と規定
前半と後半を 0.5µsずつ分割し、パルスを配置する位置（タイミング）によってビットを表現
「1」: 前半にパルス（山）
「0」: 後半にパルス（山）
前半 0.5 µs (オン)
前半 0.5 µs (オフ)
後半 0.5 µs (オフ)
合計時間 : 1.0 µs
後半 0.5 µs (オン)
合計時間 : 1.0 µs
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/YE9P25M3J3.jpg)

プリアンブルの必要性
- 10001はノイズの中に 32 回に 1 回は出てくる
- 2 サンプルずつの区切りが決定出来る
- データには現れない形
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GE8D5YLLED.jpg)

Mode SとADS-B
項目
Mode S（基本機能）
ADS-B（拡張機能）
正式名
称
Mode Select
Automatic Dependent Surveillance-Broadcast
主な用
途
二次監視レーダー（管制）と機体の 1対1通信
自機の情報を周囲全体に届ける同報配信（ブロー
ドキャスト）
送信の
契機
問い合わせ・応答型（ Interrogation &amp; Reply） 地
上レーダーから「誰ですか？高度は？」と聞かれ
て答える
自律的・定期的（ Squitter: 垂れ流し） 誰からも聞
かれなくても、毎秒数回自分から電波を出す
主な発
信内容
機体の識別（ICAO 24-bit）、高度、気象、管制コ
マンド
GPS位置（緯度経度）、高度、対地速度、進行方
向、便名
誰が受
信できる
か
主に問い合わせたレーダー局（パリティにレー
ダーIDが混ざる場合あり）
電波が届く範囲の全員（管制・他機・地上受信機・
自作SDR）
年代
1970年代に前身となる DABS
2000年代
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LELMY4LQ7R.jpg)

ADS-BとADS-C
項目
ADS-B (Broadcast)
ADS-C (Contract)
送り方
誰に向けてでもなく放送（ブロードキャス
ト）
管制機関と 1 対 1。事前に「何を・どの頻度で」の契
約を結んで報告
経路
1090 MHz の電波（地上直接波）
衛星通信（インマルサット / イリジウム）やデータリン
ク経由
頻度
毎秒 約 2 回（高頻度・リアルタイム）
数分〜十数分に 1 回（低頻度・イベント駆動）
届く範囲
見通し内（地上局から約 400 km）
洋上・極域などレーダー圏外が主戦場（地球規模）
内容
位置・高度・速度・便名
位置・高度・速度に加え、この先の予定経路（飛行意
図）
受信できる
人
電波が届く全員（自作 SDR 等も可）
契約相手の管制機関だけ（暗号化・閉域網）
世代
2000 年代〜（次世代の標準監視）
1990 年代〜（FANS-1/A 構想）
33


