衛星信號
在介紹所有衛星信號之前,首先要明確一些概念:
所有的衛星信號,都是一段電磁波,用戶接收的,也是一段電磁波。
但是我們認知中的電磁波,就是一段波,就像我們打出去的交一樣,怎么通過這一段波來轉換成有用的數據呢?
首先,衛星發射信號的是計算機,接收機也是計算機,衛星發出信號,我們接收信號,接收的都是一段二進制01碼,然后把01碼進行轉換。因為衛星不可能直接發出一串文字,而計算機就算接收到了這串文字,也無法看懂,所以計算機之間的交互很默契地都采用二進制碼來交互。
因此,我們接收信號,方法就是將電磁波轉換為二進制序列。但是怎么轉換?轉換方法就多了,我們可以:
- 電磁波高波峰表示1,低波峰表示0
- 電磁波正波表示1,負波表示0,曼波out
具體的實現方案,我們就不需要深究,也不是我們需要管的事,我們只用知道:衛星發出和我們接收的信號都是電磁波,最終轉換為的形式為二進制序列。
而因為電磁波可以轉化成二進制碼,我們可以重新用碼的特性去定義衛星信號的一些特性:
- 碼元:二進制序列中每一個二進制數稱為一個碼元
- 碼元寬度:每個碼元持續時間或其對應的距離成為碼元寬度
- 碼速率:碼發生器每秒輸出的碼元個數?
衛星信號分為三種:載波,測距碼與導航電文。
測距碼
測距碼是用來測距的一串碼序列,最終他的形式也是可以轉換成01的。測距碼最大的特性,也就是他定位的原理,便是他采用的是一段偽隨機碼。什么是偽隨機?
就如同我們在編程語言中涉及到的獲得偽隨機數與設定種子一樣:
偽隨機數列是一個數組:
對每一個數組中的元素,都有一個固定的算法:比如:第一空的算法為
我們在給定種子為x=2的時候,第一個空的數據就是f(2)=14
同理,一直填滿所有的空
而當我們想取隨機數的時候,就按順序依次從這個數組里取,
比如我們在玩擲硬幣,假設為奇數是正面,偶數是反面
那么第一次擲硬幣,我們取第一個元素,14,為反面
第二次擲硬幣,我們取第二個元素,g(2)
過了很長時間,我們再擲第三次硬幣,只要我們不重新設置種子,還是從上一次的位置開始往下取,即取第三個元素h(2)
也就是說,只要種子確定了,我們就能把這個序列給推算出來。但是,因為隨機數組對于不同種子是完全不同的,所以我們可以近似認為他是隨機的,也便是可以預測的隨機:偽隨機。而用這個特性,我們可以得到兩個結論:
- 知道衛星產生隨機序列的種子,我們可以在接收機端產生一段一模一樣的序列
- 因為序列是隨機產生的,對不同種子,序列完全不同,而且就算一個相同的序列,如果沒有對齊(即第一個數組以a[0]為起點,第二個數組以a[2]為起點),所以序列的自相關性極強
(自相關性是指,兩個序列的重合程度)
導航電文
導航電文,導航電文是一串比較特殊的序列,他又叫做數據碼,作用是傳遞一些與定位有關的數據和衛星狀態。導航電文搭載的信息就比較格式化,
- 導航電文的傳輸速率為為50b/s,也就是每秒傳輸50個二進制碼
- 一個完整的導航電文信息為1500b,為一個主幀,所以發送完一個主幀需要1500/50=30秒
- 一個主幀分為5個子幀,每個子幀含1500/5=300b
- 一個子幀有10個字,每個字30b
也就是,一個導航電文被分為了很多很多小塊,系統地來分便是5個子幀,50個字,每個字代表著一個信息。我們知道,一個int類型為4子節32個bit,而一個字30個bit,也就是一個字剛好能表示一個數,這也是導航電文的分塊——分成了一塊又一塊的數字。
但是,導航電文的數據非常多,用50個字沒有辦法全部表示完。怎么辦?所以我們不得不用兩串完整的導航電文去表示一個定位數據,也就是用100個字來表示,還不夠就150個,200個。
而在實際實現的過程中,采用的是25串完整的導航電文,去表示一個導航數據,其中:
- 對一串完整的導航電文,前三個子幀播發衛星的基本數據,如時間等。這些是不會變的,25串導航電文一直重復播發
- 而后兩個子幀,需要播發衛星的狀態和定位數據,在25串導航電文里,輪流去表示這些數據。
也就是,前三個子幀是不會變的,一直重復播發,而后兩個子幀則在25串電文,一共2*25=50個子幀中,將數據播發完整。
導航電文的更新頻率是2個小時,也就是在兩個小時之內一直會重復播發這25個主幀。
假設在12:00的時候更新,那么一直到14:00,導航電文會重復播發25個子幀,這25個子幀表示的狀態都是12:00時刻時,衛星的運動狀態和軌道參數。
載波
載波,翻譯成人話,就是搭載信號的波,再通俗地說,就是信號波的交通工具。信號從外太空發射過來,會經歷大氣層,而在傳輸的過程中會有個特點:
- 如果波的頻率過高,則電離層的延遲很嚴重,導致電離層誤差過高
- 如果波的頻率過低,則會被大氣層嚴重吸收,導致信號的強度大大降低
所以采用適中頻率的波——L波段無線電信號最合適。載波就是一個交通工具,如果直接用導航電文和測距碼,那么要么頻率過高要么頻率過低,所以就要把導航電文和測距碼與載波相調制,把導航電文和測距碼調制到L波段上,減少誤差。
載波一共有三個頻率,
- 第一個頻率負責搭載信號,
- 第二個頻率用來采用差分的方法消除電離層延遲,
- 第三個頻率來實現更多用以提升定位精度的功能?
衛星定位原理
測距碼測量?
原理:測距碼是一串偽隨機碼,只有碼序列相同并且對齊,其相關系數才為1
所以,我們可以利用這一特性,在接收機上輸入相同的種子,產生一段與衛星相同的偽隨機序列
比如:
衛星發出的偽隨機碼是:abcdefghijk...
(衛星當然發出的是二進制碼,但是這里為了更直觀比對結果,舉例就采用更直觀的碼序列)
那我們就用相同的種子,在接收機上也構建一段相同的碼序列:abcdefghijk...
但是,當接收機接收到信號的時候,不可能是從起點abcd開始的,有可能出現下面的情況:
因為沒有對齊,他們的相關系數是極低的。于是,我們就固定住接收到的衛星碼,然后向后挪動接收機自己產生的碼:
他們之間的差距由兩個字母到了一個字母,但是還是沒有對齊,相關系數還是很低,我們再挪動一下:
這個時候,計算相關系數,發現相關系數為1了,而且再讀取計數器,發現挪動了兩個碼,所以計算機就知道了:
在一個碼序列周期內,他們之間相差了兩個碼的距離
所以,就可以計算出,在一個碼序列周期內,他們相差的時間為:
但是除此之外,他們還相差了很多個整周期T,這個整周期T因為碼序列的長度是固定的,所以T一般來說也是固定的一個數,可以直接采用。
所以,信號的傳輸時間為:
然后再用最基礎的L=V*t,就可以求出衛星到接收機之間的距離:
?
載波測量
但是在高精度測量中,測距碼的測量精度并不高。因為其精度求得的時間和碼元的寬度強相關,如果碼元過寬,對齊過于簡單,那么最終的精度也會很低。但是,載波就像三角函數一樣,是一段連續的波,我們可以采用這段連續的波,縮短他們的誤差,來提高定位精度。
比如在途中,我們接收到的衛星信號是波峰的位置,我們就可以知道,衛星信號的相位是二分之Pi。但是,光知道這個二分之Pi,我們并無法進行定位,因為從衛星發出信號到接收機接收到信號,一定有以下幾個部分:
用公式表示便是:
?,前者為不滿一整周期的相位,后者為整周期數,因為我們并不知道整周期數是多少,又叫他整周模糊度。
但是,這個整周模糊度,我們怎么求出來?
我們在測距碼定位的時候,就已經求出來了傳播的時間,只不過,這個時間的精度不怎么高。
但是,就算再怎么不高,他也不可能相差一整個周期。所以,我們就采用這個測距碼測量時得到的時間,逆推出整周模糊度的大小,然后就可以求出衛星到接收機的波長長度。
所以,可以認為,測距碼測量的目的是確定整周的長度,而載波測量實際上是確定了不滿一周的相位長度,提高了定位的精度。
導航電文測量
導航電文的測量,和前兩個有著很大的不同。導航電文測量就不再用波進行測量,而是采用導航電文給出的數據進行解算。在導航電文的第二三子幀中,會給出GPS的軌道參數,而在衛星定位中,采用的衛星軌道描述方法為:開普勒軌道根數
在人工軌道理論中,用六個開普勒軌道根數來描述衛星橢圓軌道的形狀,大小和在空間的指向,其包含以下六個參數:
- ?升交點赤經
- 軌道傾角
- 長半徑
- 偏心率
- 近地點角距
- 衛星過近地點的時刻
升交點赤經?
一般來說,衛星軌道和赤道會有兩個交點,東邊一個西邊一個。衛星從赤道下也就是南半球,經過交點,進入赤道上北半球,這個交點叫做升交點,就像太陽升起;而另外一個叫做降交點,就像太陽落下。升交點的赤經,也就是天球下的經度,叫做升交點赤經。
軌道傾角?
在升交點處,軌道正方向(也就是衛星運動的方向)與赤道的正方向(赤經增加的方向) 的夾角。
長半徑
軌道橢圓長軸的一半
偏心率
近地點角距?
由地心(A),升交點(B),近地點(C)組成的角BAC就稱為近地點角距?
而除了給出這幾個參數以外,還會給出幾個攝動參數。因為導航電文是2個小時更新一次,在兩個小時之間,衛星已經運動出了一段距離。我們需要通過這些攝動參數,來模擬衛星的運動狀態,從而求出衛星在任意時刻的位置,而非兩個小時之前的位置。
具體的公式,可以看看具體代碼實現的文章:
衛星位置解算http://t.csdnimg.cn/iKBmL
最后,給自己疊個甲。因為自己才是導航工程大二的本科生,有些概念理解可能不到位,而又想用最容易理解的方式表達出來,所以可能正確性會稍微有些偏差。但是對初學者來說,應該不會存在太大的錯誤,如果可以幫到你,真的榮幸之極。還有,