2026年3月17日

ADS-B 數位觀察:分析桃園空域航線、高度與信號傳播特性

 時隔兩週,其實我的這項用RTL-SDR V4收飛機訊號的計畫還在持續進行,甚至我還把收到的訊號轉送去Flightradar24flightaware,當然也獲得了一些很棒的會員權益,基本上就是可以取用資料庫。對這有興趣的話,兩者的官網都有資訊,但前提是你用的是linux的機器才好操作。(像我就是在樹莓派上運行)

從飛機收來的訊號不單是只有位置訊號,而是有這麼多不同的資料,但並不是每一台飛機都的資料內容都有這些,總之我是都即時用我房間的小天線,能抓都抓了。

參數 (Parameter)英文全稱 (English Full Name)中文說明 (Chinese Description)
$tTimestamp時間戳記 (接收訊號的時間)
.hexICAO Hex IDICAO 24位元位址碼 (飛機唯一識別碼)
.flightFlight Number / Callsign航班編號 / 呼號
.latLatitude緯度
.lonLongitude經度
.alt_baroBarometric Altitude氣壓高度
.alt_geomGeometric Altitude幾何高度 (GPS 高度)
.gsGround Speed地速
.iasIndicated Airspeed指示空速
.tasTrue Airspeed真空速
.machMach Number馬赫數
.trackTrack Angle航跡角
.track_rateTrack Rate航跡變化率 (轉彎率)
.rollRoll Angle滾轉角 (飛機坡度)
.mag_headingMagnetic Heading磁航向
.true_headingTrue Heading真航向
.baro_rateBarometric Vertical Rate氣壓爬升/下降率
.geom_rateGeometric Vertical Rate幾何爬升/下降率
.tempStatic Air Temperature靜溫 (外界環境溫度)
.wdWind Direction風向
.wsWind Speed風速
.nav_qnhQNH Setting氣壓高度表修正值 (海平面氣壓)
.nav_altitude_mcpMCP Selected Altitude自動駕駛設定高度 (MCP/FCU)
.selected_headingSelected Heading設定航向
.squawkSquawk Code應答機代碼 (四位數識別碼)
.rssiReceived Signal Strength Indication接收訊號強度指標
.messagesMessage Count訊息總數
.rcRadius of Containment容納半徑 (位置完整性)
.nic_baroNavigation Integrity Category (Baro)氣壓高度完整性類別
.nac_pNavigation Accuracy Category (Position)位置精確度類別
.nac_vNavigation Accuracy Category (Velocity)速度精確度類別
.silSource Integrity Level源完整性等級
.gvaGeometric Vertical Accuracy幾何垂直精確度
.sdaSystem Design Assurance系統設計保證
.categoryAircraft Category飛機類別 (重量或類型)
.nav_modesNavigation Modes導航模式狀態
.versionADS-B VersionADS-B 版本

我用one-liner列出目前收到的每日航班量,命令是

 printf "%-15s | %-10s\n" "Date (File)" "Flight Count" && \
printf "%-15s-|-%-10s\n" "---------------" "----------" && \
for f in adsb_*.csv; do 
    count=$(cut -d',' -f3 "$f" | grep -v "N/A" | sort -u | wc -l);
    printf "%-15s | %-10s\n" "$f" "$count"; 
done

Date (File)     | Flight Count
----------------|-----------
adsb_2026-02-17.csv | 693       
adsb_2026-02-18.csv | 1140      
adsb_2026-02-19.csv | 1114      
adsb_2026-02-20.csv | 1019      
adsb_2026-02-21.csv | 992       
adsb_2026-02-22.csv | 1030      
adsb_2026-02-23.csv | 963       
adsb_2026-02-24.csv | 971       
adsb_2026-02-25.csv | 921       
adsb_2026-02-26.csv | 892       
adsb_2026-02-27.csv | 1016      
adsb_2026-02-28.csv | 937       
adsb_2026-03-01.csv | 531       
adsb_2026-03-15.csv | 29      

中間有幾天電腦重啟,忘記繼續開紀錄的sh,就沒紀錄了,但是可以看到每天都能收到數百筆航班資料。

既然有大量資料,當然就是做我最愛的資訊視覺化,以下都用R來畫某一天的圖。
這用的是飛機的類型來繪圖,有小飛機、大飛機...。



每日收到的訊號點的圖



依照航向和高度來區分,黃線就是小於2000ft的,大部分都是起飛和降落的,可以觀察桃園機場一帶在這段時間是如何進場的。因為看到這張圖,我還因此跑去永安北岸觀海亭,想要實際看從北方來的飛機轉進桃園機場的即時現況。藍綠色線的是往北的高空飛機,紫色則是往南的。


看到這些線,就一定要去看看「交通部民用航空局電子式飛航指南」去找TAIPEI FIR EN ROUTE CHART來對照,才會更好玩。下圖的進入路徑是這樣

  1. 你要先到飛航指南 https://ais.caa.gov.tw/aimportalapp/ 去底下按eAIP 看最新的資料
  2. 到- Part 2 - 航路 (ENR) 找   ENR 6 航路圖,裡面有很多圖,看到TAIPEI FIR EN ROUTE CHART 點下去就是了

左右對照看到什麼,是不是就看最明顯三條是A1/W4、B1、M750,另外還有淺淺的B591、W8。看著看著想起以前我拍攝天空的縮時攝影時,就透過飛機雲的樣子推測過我家附近至少會看到三條航線,現在透過ADS-B的資料來對照,果然沒錯。




如果根據每分鐘改變的高度,來分類是爬升還是下降,紅色是下降,綠色是上升,當然在國際航線上,就是一直維持高度不變的灰色,而綠色的就對應了桃園機場和松山機場起飛的飛機囉。




再來我們看看信號的強弱和空間的關係。某些地區幾乎沒有訊號,大多是因為飛機本來就不會飛到那。



如果再把訊號與接收端的距離和高度做強度的比較,這樣就能看到經典的自由空間路徑損耗(Free Space Path Loss, FSPL)特性。近距離 (0-25km): 訊號強度(RSSI)從 -20 dBFS 快速掉落到 -30 dBFS。這是因為在距離很近時,距離增加一倍對訊號的百分比影響很大。遠距離 (50km 以上): 曲線開始趨於平緩,衰減的速度隨著距離增加而放慢。

高度 (Altitude) 的分層效應,觀察顏色的分佈:紫色點(低高度): 集中在左側(近距離)。因為飛機在低高度時,受限於地球曲率和地形遮蔽(障礙物),只能收得到近處的訊號。黃綠色點(高度 30000+ ft): 這些點可以延伸到 100km 甚至更遠。這是因為高空飛機與接收器之間通常沒有建築物或山脈阻擋,訊號路徑更接近純粹的物理模型。


除了這些raw data畫出的數據,其實透過這些數據的組合還有更多有趣的事,等下篇再來分享。