🌐 English version: English

系列第七篇,也是壓軸
前六篇把 LoRa 解調器從單一頻率、固定參數一路練到隱式標頭、每包不同 SF、漂移修正
而這一篇衛星做了最後一件事:在多個頻率之間跳(FHSS 跳頻),解調器得先把被打散到各頻率的符號按時間拼回來,才能解

系列其他篇:Channel Hop、True Color Is a Lie、Isodata Seven、Subsidy Claim、Two Voices、No Name on the Door

題目在講什麼

題目畫面

陌生人把 GAIAN-723 的下行切成了會跳頻的模式,每隔幾個符號就換一個頻率,想甩掉固定在單一頻率上的錄波器。David 把 SDR 的頻寬開到最大,錄下整段

目標:解出衛星這段跳頻下行的內容,取出裡面的旗標。給的檔案是寬頻 .sigmf-data 和地面站筆記

Flag 格式 GAIANSPACE{...}

先看出它在跳

把整段做寬頻瀑布圖,一眼就能看到訊號不是待在一條頻率上,而是在幾個頻率格之間規律地跳,這就是 FHSS(跳頻展頻):

寬頻瀑布圖,可以看到訊號在多個頻率格之間跳

量一下:載波在固定的幾個頻道之間切換,每個 駐留(dwell) 大約是固定數目的符號,然後跳到下一個頻道

LoRa 本身的調變參數(SF、BW)在每個駐留裡都一樣,變的只有中心頻率

把跳頻序列拼回來

解法分兩層:

  1. 估出跳頻範圍 對每個時間窗做 FFT 找主頻,得到Time → Frequency 的序列。這組頻道是固定的幾個值,駐留時間也固定,跳頻順序呈週期性(偽隨機但會重複)。把它整理成一張跳頻表:

    估出的跳頻序列:時間對應到的頻道,呈週期性跳動

  2. 跟著跳、把符號接起來 對每個駐留,把訊號搬回基頻(乘上 exp(-j2πf·t) 把該頻道移到 0),用前面幾篇同一支解調器解那一段的符號,再按時間順序把所有駐留的符號首尾相接,就還原出完整的符號串

這裡的坑是駐留邊界,跳頻的瞬間有一小段過渡,駐留的頭尾各丟掉半個符號、對齊每個駐留的符號相位,接起來才不會錯位,對齊之後,整串符號照標準流程(Gray → 解交織 → 白化 XOR)解出,封包以 CRC 收尾、檢查通過

Flag

解出的下行內容裡直接帶著旗標:

1
GAIANSPACE{h0p_sc0tch_AF44A6}

心得

  1. FHSS 的第一步永遠是「先估跳頻計畫」。 寬頻瀑布圖 + 逐窗 FFT 找主頻,就能把「時間 → 頻道」畫出來;跳頻通常是週期性的偽隨機序列,看出週期後整張表就固定了。
  2. 跳頻只是把符號打散到不同頻率,解調核心沒變。 把每個駐留搬回基頻後,用的還是同一支 LoRa 解調器——這也是為什麼前面幾篇要先把骨架打穩。
  3. 駐留邊界要小心。 跳頻瞬間有過渡,頭尾各留一點餘裕、對齊相位再相接,否則符號會在接縫處錯位。
  4. 走到這裡,這支從〈True Color Is a Lie〉手刻起來的 LoRa 解調器,已經能應付「兩個發射源、隱式標頭、每包不同 SF、都卜勒漂移、跳頻」全部狀況了。一支解調器,七道題——這就是這個系列最有成就感的地方。