【Maker 電子學】GPS 接收器的原理與應用 — PART4

作者:Bird

上一回【Maker 電子學】GPS 接收器的原理與應用 — PART3,我們介紹了 GPS 衛星利用測距來定位的原理,也說明了如何利用 PRN 的「除了零延遲外低度自相關」特性來用無線電訊號做距離測量。這一次,我們要來仔細看看 GPS 衛星發射出來的訊號裡包含了哪些資訊,以及接收機如何運用這些資訊。

隱藏在 PRN 中的資訊

我們上次講過,GPS 在 L1 波段上發送的這組 PRN 稱之爲 C/A 碼,C/A 是「coarse/acquisition」的意思,它是比較粗略(coarse)的定位用測距碼。C/A 碼的 PRN 長度是 1023 個 bit,每組 PRN 的長度是 1ms,因此 PRN 的 bit rate 就是 1023 *1000 = 1023000 bps(1.023 Mbps)。

除了用來測距的 PRN 之外,GPS 衛星還傳送了另一組資料,叫做導航電文(navigation message)。導航電文用非常非常慢的速度傳送。有多慢?

50 bps。

在這個 Wi-Fi 動不動就數百 Mbps 甚至可以到 Gbps 的年代,50 bps 的資料傳輸速度聽起來慢得不可思議,但 GPS 真的就是用這麼慢的速度在傳送它的導航電文。

爲什麼要這麼慢?快一點行不行?

這是展頻通訊上的一個重要技術:用速度換取正確性的「processing gain」。我們在第二回的時候講過展頻通訊的訊號如何產生的,原來的一個 data bit 經過 PRN 的編碼後會變成一長串的 PRN,然後在接收時再經由 correlator 將編碼過後的 PRN 還原成 data bit。PRN 是一串很長、很亂的碼,如果受到干擾或是其它因素的影響而錯誤,也不至於全錯,可能只會錯其中的某些部分,因此即使接收機收到了被干擾的 PRN,correlator 仍然有很大的機率可以還原出正確的 data bit。

如果一個 data bit 被載在 1000 個 bit 的 PRN 上,它的長度就變成 1000 倍,這時候我們就說這個展頻系統的 processing gain 是 1000 倍,而 PRN 中單一個 bit 出錯時,它對 correlator 輸出的影響權重就只有 1/1000,相對來說 data bit 被正確傳送到遠方的機率就大大提高。

GPS 在距離地表 20000 公里遠的地方發射訊號,地面收到的訊號強度只有 -125dBm,爲了要正確傳送導航電文,就利用展頻通訊的這個方法來提高資料傳送的正確性和可能性。

導航電文如何藏在 PRN 中傳送呢?GPS 衛星在發送 PRN 之前,先將導航電文與 PRN 做 XOR 計算,再將結果傳送出來。

(圖片來源:Bird 提供)

上圖是 XOR 運算的真值表。XOR 很常用在通訊系統的 channel coding 上,接收方只要將收到的結果再跟 PRN 做一次 XOR 計算,就可以得到原來的 data bit。

GPS 的 PRN 長度是 1 ms,每一組 PRN 裡有 1023 個 bit,而 50bps 的導航電文每一個 bit 的長度是 20 ms,所以當導航電文被載在 PRN 上時,每一個 bit 會被載到 20 個 PRN 上,也就是 20*1023 = 20460 這麼多個 bits 上。這是非常非常大的 processing gain,它這樣設計的目的就是爲了要讓導航電文能正確無誤地傳送到 20000 公里外的地表。

至於 PRN,由於每一顆衛星的 PRN 都是固定的,不會著時間改變,它本身其實是個相當無趣的東西,它沒有承載什麼資訊,主要的用途就是利用我們上一回提過的自身相關性來測量傳輸延遲,然後計算接收器到衛星的距離。

導航電文

接下來我們來看看導航電文裡有什麼東西。

GPS 完整的導航電文長度是 1500 bits,用 50 bps 的傳輸速率來送的話,完整傳送一組需要 30 秒。

導航電文的 1500 個 bit 分成五個 frame,第一個 frame 主要傳送與 GPS 衛星的時間,以及與時鐘校正、訊號精度相關的資訊。

第二個和第三個 frame 傳送的資訊叫做「衛星星曆」(ephemeris)。這個字來自希臘文,意思是一種記錄每個天體每天晚上什麼時候出現在天空中什麼位置的表格;顧名思義,衛星星曆傳送的就是每一顆 GPS 衛星自己的位置資訊。每一顆衛星發送的訊號中,都只帶有自己的星曆。有了衛星的位置,在加上 PRN 測距碼,我們就可以計算出接收機的位置,完成定位。

第四和第五個 frame 傳送的資訊叫做「衛星曆書」(almanac)。Almanac 這個字原來的意思是那種每年出版的年曆,記載一年中的什麼時候會發生什麼事或是要做什麼事(農民曆就是一種 almanac),而在 GPS 的世界中,衛星曆書記載的是天空中這麼多顆 GPS 衛星,什麼時候哪一顆衛星大概會在哪裡。每一顆 GPS 衛星發送出來的衛星曆書都一樣,都包含所有 GPS 衛星的位置資訊。

由於 GPS 衛星有三十多顆,完整的 Almanac 資訊量非常大,因此第四個 frame 和第五個 frame 會用輪播的方式傳送 Almanac,每一個循環有 25「頁」,也就是說你必須要連續接收 25 次導航電文,才能把放在第四個 frame 和第五個 frame 裡的 Almanac 完整收下來。一個導航電文是 30 秒,因此需要 12.5 分鐘才能收到一組完整的 almanac。

至於爲什麼要設計星曆和曆書兩套關於衛星位置的資訊,則跟 GPS 接收器開機時,捕獲(acquire)衛星的程序有關。

衛星捕獲

想像一下你是一台 GPS 接收器,你不知道現在是幾月幾日幾點幾分,你也不知道自己在地球上的哪裡,但你可以接收 GPS 訊號。這時,你要怎麼開始?

如果完全沒有時間和大概的位置資訊,我們完全沒辦法知道現在頭上可能有哪些 GPS 衛星。這時我們只能瞎猜,真的瞎猜。這個從完全未知的狀態下開始猜衛星的過程,稱之爲 GPS 接收器的「冷開機」(cold start)。

我們之前講過,GPS 衛星發射的 L1 C/A 碼都在 1575.42 MHz 這個頻率上,因此不管你要接收哪一顆衛星,都是收這個頻率,但是收下來的訊號裡,可能有好多顆衛星的訊號疊加在一起,這時候需要用對應的 PRN 讓 correlator 把 PRN 上所載送的導航電文解出來。

當你完全不知道頭上有哪些衛星時,你就只能試著用不同的 PRN 去解收到的訊號,看看解出來的訊號中有沒有長得像導航電文的東西。比方說我猜現在我頭上有 1 號 GPS 衛星,我就試著用 1 號衛星的 PRN 去解收下來的訊號。

導航電文的每一個 frame 的最前面 8 個 bit 都是一組固定的 10001011 同步碼,因此只要 correlator 的輸出出現了 10001011 這個碼,就有可能用對了 PRN 並且找到了一個 frame 的開頭。導航電文的速度是 50 bps,8 個 bit 需要的時間就是 20ms*8 = 160 ms,也就是說光是知道我們現在用的這組 PRN 有沒有猜對,至少就需要 0.16 秒。

不過由於所有衛星的訊號是疊加在一起的,如果接收器裡有很多組 correlator,我們其實可以同時用好幾個不同的 PRN 去解碼。我們前面說過,GPS 要做到 3D 定位至少需要收到 4 顆衛星的訊號,因此一般來說 GPS 接收器裡至少會有 4 個 correlator 可以同時運作,同時解碼四顆衛星的訊號。

由於收到越多顆衛星時,定位精度會越高,大部分的 GPS 接收器都可以同時解碼四顆以上的衛星訊號。同時能處理的衛星數量稱爲「GPS 接收器的通道數」,現在一般的 GPS 接收器至少都有 8 個通道,很多高階的 GPS 導航儀器甚至會有 12 甚至 20 通道的設計。

不過根據 GPS 衛星的軌道分佈,就算地平線完全沒有遮蔽且高度很高(比方說正在越洋航行的民航機),地球上任一位置同時能接收到的 GPS 衛星數量最多大概 12 顆,因此設計超過 12 個通道的接收機對定位精度並沒有幫助,但是對冷開機時猜衛星的速度會有幫助。

想像一下,現在天上有 30 顆 GPS 衛星,如果你的接收器有 30 個通道,你就可以同時用 30 顆衛星的 PRN 來解碼,不管你頭上有哪些衛星,這 30 個通道解出來的一定有東西中。當然實務上很少有人爲了冷開機的速度這樣去設計接收機的,如果你有 8 個或 12 個通道,你要先猜哪些衛星、後猜哪些衛星,以儘快拿到衛星的訊號,這就是各家接收機冷開機演算法設計的本事了。

在猜衛星的過程當作,GPS 接收器最先能知道的資訊大概就是時間,因爲每一個導航電文的第一個 frame 就是時間資訊,因此如果你有 8 個通道,在運氣很差的下,前面猜了三個回合總共 24 顆衛星,都沒猜中對的衛星,浪費三組各 30 秒的導航電文,第四次只剩下 6 顆衛星要試,一定會中,在最差的情況下你花 2 分鐘也會拿到正確的時間資訊。

當你開始找到對的 PRN 碼、解出來自特定衛星的導航電文時,導航電文的第二個和第三個 frame,也就是特定衛星的衛星星曆,它包含了衛星的軌道參數,聽起來是一些很嚇人的名詞,像是衛星的克卜勒軌道參數(有 6 個)、軌道攝動參數(有 9 個)等,這些參數可以精確描繪衛星與地球的相對位置,再配合 PRN 測距碼,我們就可以完成定位。

GPS 衛星在太空中的軌道按照牛頓運動定律是可以預測的,因此星曆不會有大幅度的變化,一般來說一組星曆資料可以使用 4 小時。

那曆書是用來幹嘛的呢?

大部分的 GPS 接收器,在關機前會記錄下關機時的位置,並繼續計算時間。下一次開機時,接收器會有正確的時間以及最後關機時的位置資訊。這種開機的程序稱之爲「暖開機」(warm start)。

如果位置沒有大幅度的變動,這時衛星曆書的資訊可以用來估算此時此刻在此地,頭上會有哪些衛星;如果這個資訊正確,correlator 就可以直接使用對應的 PRN 命中特定的衛星,快速拿到星曆,開始定位;如果距離上次關機的時間沒有超過衛星星曆餓有效期,甚至不用接收星曆,只要校正完時間、開始測距,就可以定位了。

GPS 的軌道分佈也是設計好的,不會大幅變動,因此衛星曆書的有效時間更長,達兩個星期;換句話說,如果距離上次關機的時間在兩個禮拜以內,而且所在位置沒有大幅度移動,都可以直接用上次關機時的衛星曆書以及現在的時間,來推測現在頭上有哪些衛星。

快速定位的 A-GPS

從上面講的衛星捕獲程序來看,我們可以發現 GPS 要完成定位,最困難的一件事就是知道現在頭上有哪些衛星,以便 correlator 能用正確的 PRN 去解碼。雖然衛星曆書提供了完整的衛星分佈資訊,但接收一組完整的衛星曆書要花 12.5 分鐘,根本緩不濟急,更氣人的是,花 12.5 分鐘收下來的衛星曆書,總共 50 個 frame 的資料,其實也才 600bits*50 = 30000 bits = 30 Kbits = 3.75 Kbytes,而且這裡面還包含了同步碼等無關資訊的內容,實際上有用的資料量更少。

在現在這個隨便點兩下手機都可能傳送好幾 Kbytes 的年代,這麼辛辛苦苦用 50 bps 老牛拖車的速度從衛星接收曆書是不是顯得有點跟不上時代?而且衛星曆書兩個禮拜內都有效,也不用一直更新啊?

於是聰明的手機設計者就想到,我們何不利用一個 GPS 接收器幫忙接收衛星曆書之後,再用手機的網路傳送衛星曆書給手機上的 GPS 接收機。以現在手機網路的通訊速度,咻一下就可以拿到整組衛星曆書,馬上就知道該接收哪些衛星,立刻可以開始定位。

這個機制稱之爲 A-GPS,那個 A 是 assisted,就是靠著額外的 GPS 接收器幫忙接收衛星曆書來完成定位的意思。從行動通訊邁入 3G 的時代開始,A-GPS 已經成爲手機使用 GPS 定位技術的主流與標準。在 A-GPS 的幫助下,就算你飛了幾千公里,剛下飛機打開手機,只要手機能收到行動網路 A-GPS 定位伺服器的資料,就能在 3 到 5 秒內完成定位。

小結

這一回我們介紹了 GPS 衛星的導航訊息內容,以及詳細的衛星捕獲過程(如果有用過較早期的單機 GPS 的朋友,一定記得 GPS 接收器在冷啓動時那漫長的尋星過程),同時我們也說明了藉由行動通訊網路傳送衛星曆書的 A-GPS 工作原理。

下一回我們要進入實戰,開始介紹 GPS 接收器的輸出,以及如何使用這些輸出的資訊。

(責任編輯:賴佩萱)

Liang Bird
Liang Bird

Author: Liang Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。