在這一節中,我們將介紹測距、參考坐標系、時間系統、衛星軌道等四個方面的基礎知識。先來介紹測距原理。
**1、測距原理介紹[2]**
GPS(包括其他的GNSS系統)使用的測距原理非常簡單。我們用一個圖來說明它的工作過程,如圖9-1所示。
:-: 
圖9-1 衛星測距原理示意
在圖9-1所示的衛星測距原理示意圖中:
衛星和地面接收器都各自有一個時鐘。假設衛星和接收器的時鐘能完美同步(注意這個假設,以后我們還會講到它)。在0ms時刻,衛星向接收器發送了一串信號。
在67.3ms時,接收器收到了該信號。那么,衛星離接收器的距離就是信號傳播速度乘以傳播時間。
以數學公式來表示圖9-1的衛星測距原理就是:
[公式一]
`D=Δτ*c `
該公式中,c為光速,為信號傳輸時間。D為距離
有了公式一,我們可以計算接收器到任意一個衛星的距離。不過,距離(Range)和位置(Location)顯然是兩個不同的概念。那么,如何根據距離得到位置信息呢?
原來,位置需要放在某個坐標系中來考察。下一節將專門討論坐標系。假設現在已經有一個坐標系了。那么,圖9-2所示的內容就能回答剛才提出的問題。
:-: 
圖9-2 二維坐標系中接收器位置計算示意圖
和圖9-1的測距原理示意比起來,圖9-2多了如下一些特點:
- 衛星和接收器的位置都置于一個統一的二維坐標系中來考察。
- 接收器離兩個衛星的距離都由公式一計算得到,分別是D1和D2。
- 如果以衛星為圓心,以接收器到衛星的距離為半徑,那么我們可以得到圖9-2中的兩個圓。這兩個圓的相交點到衛星1的距離為D1,到衛星2的距離為D2。也就是說,這兩個點就是接收器的可能位置。
- 如果接收器的Y坐標值不能高于衛星的Y坐標值,那么接收器的實際位置只能是圖9-2中的(Xp,Yp)了。
掌握了二維坐標系中接收器的位置計算方法,只要再增加一顆衛星,我們就很容易推導出接收器在三維坐標系中的位置了。
從理想情況來說,定位(英文為Positioning)計算就這么簡單,但現實情況卻相當復雜。例如,在上述的討論中還有兩個重要的潛在問題沒有解決,這兩個問題是:
- 如何選擇坐標系?
- 出于成本、便攜性等各方面的考慮,接收器的時鐘精度遠不如衛星的時鐘精度,所以在計算信號傳輸時間時會造成較大的偏差。由于信號傳播速度是光速,所以哪怕這個時間偏差為0.1毫秒,距離偏差都會達到30公里。
那么這兩個問題是如何解決的呢?下兩節將分別介紹坐標系和時間系統。時間偏差的問題則通過引入第四顆GPS衛星參與定位計算來解決(詳情見9.2.2中“定位計算相關知識”一節)。
**2、坐標系介紹**
**①、ECI/ECEF/WGS-84介紹[2]**
根據上一節的內容可知,坐標系對于位置計算非常重要。坐標系有很多個,甚至不同的國家都可能會建立更加符合本國實際情況的坐標系。但在GPS中,與它相關的坐標系主要有兩個,它們分別是:
- **地心慣性坐標系(英文為Earth Centered Inertial,簡稱ECI)**:該坐標系用于描述GPS衛星的位置信息。在這種坐標系中,原點為地球的質心,衛星圍繞質心運動,并遵守牛頓運動定律。
- **地心地球固連坐標系(英文為Earth Centered,Earth Fixed,簡稱ECEF)**:該坐標系用于描述地面接收器的位置信息。ECEF最大的特點是它會隨著地球旋轉而旋轉。
>[info] 提示:在GPS的定位計算過程中,我們需要先把衛星在ECI坐標系的位置轉換成它在ECEF坐標系的位置。
圖9-3展示了ECI和ECEF坐標系。
:-: 
圖9-3 ECI和ECEF坐標系示意圖
圖9-3中:左圖所示為ECI坐標系。該坐標系中,XY平面與地球赤道面重合。X軸指向天球(Celestial Sphere,一種假想的無限大的球,它和地球同心。所以ECI坐標系不受地球旋轉的影響)的某個位置。Z軸與XY平面垂直并指向北極。ECI坐標系屬于笛卡爾坐標系,故衛星的位置由(x,y,z)表示。
右圖所示為ECEF坐標系。該坐標系的原點為地球中心(這就是Earth Centered一詞的緣由)。XY平面也與地球赤道面重合。不過其X軸指向0經度方向,Y軸指向東經90度的方向。所以ECEF坐標系實際上是隨著地球一起旋轉的。ECEF坐標系也屬于笛卡爾坐標系,故接收器的位置也由(x,y,z)表示。
ECEF是一個笛卡爾坐標系,而我們實際使用的位置信息卻是由經緯度來表示的,那么如何將笛卡爾坐標系中的X,Y,Z值轉換成經緯度呢?
該轉換工作涉及到另外一個重要的概念,即標準地球模型。GPS參考的地球模型名為WGS-84(英文名為World Geodetic System 1984,由美國國防部建立)。WGS-84模型如圖9-4所示:
:-: 
圖9-4 WGS-84模型介紹
圖9-4所示的標準大地模型中:
地球被看做是一個橢球體。該橢球體的半長軸(英文為Semi Major Axis,實際長度為6378137.00米)為a,半短軸為b(英文為Semi Minor Axis,實際長度為6356752.31米)。根據a和b的值,該橢球體的偏心率[^1](英文名為Eccentricity)可由公式 計算得到。
圖中的Equatorial Plane為赤道面。赤道面和橢球體相交得到的橢圓為赤道(圖中的Equator),它就是緯度為0的地方。圖中的Greenwhich Meridian為格林尼治子午線,即經度為0的地方。橢球體的表面叫橢球面,即圖中的Ellipsoid。
圖中的P1點的位置采用了笛卡爾坐標系,其值為(x,y,z),而P點的位置則由橢球坐標系確定,其值為( )。注意,此處的h是P點與橢球面的高度,即GPS概念中的高度。
根據相關的公式[2],橢球坐標系和笛卡爾坐標系能相互轉化。
**②、高度計算**
根據上節最后關于橢球坐標系中h坐標值的解釋,GPS中的高度是指它和橢球面(Ellipsoid)的距離。但值得特別注意的是,這個高度和日常生活中所說的海拔高度不是同一個概念。日常生活中所說的海拔高度不是基于Ellipsoid,而是基于大地水準面(英文名為Geoid)的。那么,大地水準面是什么呢?
大地水準面是一個重力等位面。簡單點說,靜止海水在大地水準面上不會因為重力原因而流動。大地水準面和地球的質量分布等有重要關系。相比橢球面而言,大地水準面的數學模型非常復雜,很難用數學公式來描述它。
大地水準面和橢球面之間的區別影響了我們對高度的計算。圖9-5所示為GPS高度與海拔高度的區別[3]:
:-: 
圖9-5 高度計算的區別
圖9-5中:
地球真實的表面由大海和高山組成,這個表面叫地形(圖中的Topography)。
GPS測量的高度為h(也叫大地高,英文為Ellipsoidal Height),而日常所說的海拔高度為H(也叫正高,英文為Orthometric Height)。h和H之間的差為N(也叫大地水準面高,英文為Geoid Height)。
>[info] 注意:對于高精度的測繪需求,我們往往需要把h值轉換成H,不過一般情況下二者的差別不大。
了解了GPS的坐標系統,馬上來看與GPS相關的另外一個非常重要的系統。
**3、時間系統[^2]**
和GPS相關的時間系統有四種之多,它們分別是國際原子時(英文為International Atomic Time,簡寫為IAT,注意,其對應的法語名為Temps Atomique International,所以其常用縮寫也為TAI。筆者此處采用英文縮寫IAT)、協調世界時間(Coordinated Universal Time,簡寫為UTC)、GPS時間(英文為GPS Time,簡寫為GPST)和本地時間(英文為Local Time)。筆者在此總結這四種時間系統的特點如下:
**①、IAT**:1967年,人們利用銫原子振蕩周期極為規律的特性研制出了高精度的原子鐘,并將銫原子能級躍遷輻射9192631770周所經歷的時間定為1秒。IAT起始時間從1958年1月1日0時0分0秒開始,其精度能達到每日數納秒。細心的讀者可能會問到,在原子鐘出現之前,人們如何定義秒呢?原來,在原子鐘出現之前,人們使用基于地球自轉的天文測量得到的世界時(Universal Time,簡稱UT)作為時間計量單位。和原子時比起來,UT會由于地球自轉的不穩定(由地球物質分布不均勻和其它星球的攝動力等引起的)而帶來時間上的差異,該差異大概在3年內會增加到1秒左右。
**②、UTC**(也叫世界統一時間、世界標準時間):TAI的精度為每日數納秒,而UT的精度為每日數毫秒。對于這種情況,一種稱為協調世界時的折衷時標于1972年面世。UTC以原子秒長為基礎,在時刻上盡量接近UT。UT和UTC之間的間隔不能超過0.9秒,所以在有需要的情況下會在UTC內加上正或負閏秒(Leap second)。因此,協調世界時與國際原子時之間會出現若干整數秒的差別,而位于巴黎的國際地球自轉事務中央局將決定何時加入閏秒以減少UTC和IAT之間的差別。UTC時間系統用途很廣。目前幾乎所有國家發播的時號都以UTC為基準。另外,互聯網使用的網絡時間協議(Network Time Protocol,簡稱NTP)獲取的時間就是UTC。UTC的時間格式為:年(y)月(m)日(d)時(h)分(min)秒(s)。
**③、GPST**:GPST也使用IAT中的原子秒為單位,其時間原點定于1980年1月6日UTC 0時。GPST比IAT慢19秒,而它和UTC時間的差異為整數秒,并且這個差值會隨著時間的增加而積累(到2009年,GPST和UTC相差15秒)。GPST時間格式由從GPST原點開始的周數和周內秒數組成。例如2009年7月9號13點08分36秒(轉成時分秒格式的GPST)用GPST表示就是第1539周392916秒。參考資料[5]介紹了GPST和UTC的轉換方法。
**④、本地時間[6]**:本地時間基于UTC。它將全球分為24個時區,每一時區之中心為相隔15度經線,每一國家都處於一個或以上的時區內。第一時區的中心位於格林尼治子午線(或簡稱子午線)。該時區以西的地方慢一個小時或以上,而東面則較其快。本地時間表達方法遵循ISO 8601,其格式為“年月日T時分秒Z(或者時區標識)”。例如,20131030T093000Z,表示2013年10月30號09點30分0秒,Z表示是標準時間。如果表示北京時間,那么就是20131030T093000+08,其中“+08”表示東八區。
>[info] 提示:以上是本書和時間系統相關的知識。這部分內容原本非常復雜,還涉及到較多天文方面的概念。在此,筆者建議讀者先掌握本節所述內容。
**4、衛星軌道等知識介紹**
本節將介紹衛星軌道等方面的知識。首先是衛星運行所遵循的開普勒三定律。
**①、開普勒三定律介紹**
衛星圍繞地球運行時將遵循開普勒三定律。圖9-6所示為開普勒第一和第二定律的示意圖:
:-: 
圖9-6 開普勒第一和第二定律示意
圖9-6中:
左圖所示為開普勒第一定律示意。圖中的Perigee為近地點,Apogee為遠地點。根據開普勒第一定律[^3],衛星將圍繞地球做橢圓運動,地球為該橢圓兩個焦點中的一個。
右圖所示為開普勒第二定律示意。根據開普勒第二定律,在相同的時間內,衛星運行時所掃過的區域的面積相同。即如果圖中的時間段Tv_1等于時間段Tv_2的話,面積A_1等于面積A_2。
而根據開普勒第三定律可知,圍繞地球橢圓軌道運行的衛星,其橢圓軌道半長軸的立方與運行周期的平方之比為常量。第三定律可用公式表達,如下所示:
[公式二]
k=a*3/T*2
//開普勒第三定律,a為半長軸,T為衛星運行周期。
k為常量,取值為。其中,M為地球的質量,G為萬有引力常數
開普勒三定律主要用來計算衛星運行位置等相關參數,例如第三定律常用來計算衛星的軌道高度。這部分內容請讀者參考[7]。
**②、衛星軌道及星歷等知識介紹**
衛星軌道雖然涉及到很多空間科學方面的知識,但對于本書的讀者來說,我們只需掌握衛星運行軌道的幾個重要參數和概念即可。圖9-7展示了衛星運行軌道及相關參數。
:-: 
圖9-7 衛星運行軌道示意圖
圖9-7中:
左圖中,Equatorial Plane為赤道平面,衛星軌道本身是一個橢圓軌道,它和赤道平面有一個夾角。這個夾角叫軌道傾角(圖中的Inclination)。
右圖中,假設觀察者站在坐標原點觀察左上角的衛星,則h代表仰角(Elevation angle),z代表天頂角(Zenith angle),而正北方向離衛星投影點的順時針角度A為方位角(Azimuth angle)。
>[info] 提示:上述參數是衛星運行軌道中幾個非常重要的參數,不過,讀者現在只需要記住它們的定義即可。
根據軌道傾角、運行周期等參數,人們將衛星軌道分為如圖9-8所示的幾大類:
:-: 
圖9-8 衛星軌道分類
**1)地球同步軌道(Geosynchronous Earth Orbit,簡寫為GEO)**:GEO特點是其軌道高度距離地面大約35786公里,衛星運行周期等于地球自轉周期(23小時56分4秒),衛星運行方向和地球自轉方向一致。最后,軌道是圓形(即偏心率為0)。根據軌道傾角的不同,地球同步軌道還可細分為靜止同步軌道、傾斜同步軌道和極地同步軌道。這三者的特點如下文所述:
1. 靜止同步軌道:如果軌道面與地球赤道面重合(即軌道傾角為0),則這種軌道叫靜止同步軌道(Geostationary Satellite Orbit,簡稱GSO)。該軌道的特點是:從地面觀察者看到該軌道上的衛星始終位于某一位置,似乎保持靜止不動。利用該軌道上的3顆衛星就可以實現除南北極很小一部分地區外的全球通信
2. 傾斜同步軌道(Inclined Geostationary Orbit,簡稱IGSO):如果軌道傾角大于零并小于90度,則這種軌道叫傾斜同步軌道。
3. 極地同步軌道(Polar Earth Orbit,簡稱PEO):如果軌道傾角等于90度,則稱為極地同步軌道。運行在這種軌道上的衛星能到達南北極區上空,所以那些需要在全球范圍內進行觀測和應用的氣象衛星等多采用這種軌道。
**2)中地球軌道(Medium Earth Orbit,簡稱MEO**):也叫中圓軌道,它距離地面10000公里,衛星運轉周期在2至12小時之間。運行在該軌道上的衛星大部分是導航衛星,例如GPS導航衛星有一部分運行在該軌道上。
**3)低地球軌道(Low Earth Orbit,檢查LEO)**:也叫近地軌道或低地軌道,距離地面大約1000公里。由于近地軌道離地面較近,絕大多數對地觀測衛星、測地衛星、空間站都采用近地軌道。
**4)高橢圓軌道**:高橢圓軌道是一種具有較低近地點和極高遠地點的橢圓軌道,其遠地點高度大于靜止衛星的高度(36000千米)。根據開普勒定律,衛星在遠地點附近區域的運行速度較慢,因此這種極度拉長的軌道的特點是衛星到達和離開遠地點的過程很長,而經過近地點的過程極短。這使得衛星對遠地點下方的地面區域的覆蓋時間可以超過12小時。具有大傾斜角度的高橢圓軌道衛星可以覆蓋地球的極地地區,所以對于像俄羅斯這樣的高緯度國家而言,高橢圓軌道比同步軌道更有實際作用。
以上是衛星運行軌道的幾個重要參數[^4],除此之外,還有兩個重要概念需要讀者了解:
* 星歷表(英文為Ephemeris):星歷表本來是用來記錄天體特定時刻的位置的。而在GNSS中,星歷表則記錄了衛星的一些運行參數,它使得我們通過星歷表就可以計算出任意時刻的導航衛星的位置和速度。下文我們將見到在GPS中,星歷表包含了非常詳細的衛星軌道和位置信息,所以其數據量較大,傳輸時間較長。為了克服這個問題,人們設計了星歷表的簡化集,即歷書。
* 歷書(英文為Almanac):歷書也包含了衛星的位置等相關信息,不過它是星歷數據的簡化集,其精度較低。所以,歷書數據量較小,傳輸時間較短。
>[info] 提示:星歷和歷書對于GPS定位計算來說至關重要。本章后文將介紹二者所包含的參數信息。
到此,本書所涉及到的與衛星導航原理相關的知識介紹就告一段落,這些內容對于講解本章知識點來說已經足夠。但本節所述內容僅僅是衛星導航全部知識的一小部分,那些有志從事衛星導航工作的讀者還需要進一步花費時間來學習相關的專業知識。
[^1]:偏心率也叫扁率,對應的英文名為flattening。
[^2]:時間系統相關的知識非常復雜,參考資料[4]介紹得最為簡練。
[^3]:開普勒三大定律本來描述的是行星在宇宙空間繞太陽公轉所遵循的定律。不過導航衛星圍繞地球運行也遵循此定律。所以筆者直接以導航衛星和地球為對象來介紹開普勒三大定律。
[^4]:衛星運行軌道的分類總結由筆者提煉并整理從網上搜索到的相關內容而來。
- 前言
- 第1章 準備工作
- 1.1 Android系統架構
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本書資源下載說明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函數分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener構造函數和測試工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介紹
- 2.4.1 create函數詳解
- 2.4.2 systemReady函數詳解
- 2.5 本章總結和參考資料說明
- 2.5.1 本章總結
- 2.5.2 參考資料說明
- 第3章 Wi-Fi基礎知識
- 3.1 概述
- 3.2 無線電頻譜和802.11協議的發展歷程
- 3.2.1 無線電頻譜知識
- 3.2.2 IEEE 802.11發展歷程
- 3.3 802.11無線網絡技術
- 3.3.1 OSI基本參考模型及相關基本概念
- 3.3.2 802.11知識點導讀
- 3.3.3 802.11組件
- 3.3.4 802.11 Service介紹
- 3.3.5 802.11 MAC服務和幀
- 3.3.6 802.11 MAC管理實體
- 3.3.7 無線網絡安全技術知識點
- 3.4 Linux Wi-Fi編程API介紹
- 3.4.1 Linux Wireless Extensions介紹
- 3.4.2 nl80211介紹
- 3.5 本章總結和參考資料說明
- 3.5.1 本章總結
- 3.5.2 參考資料說明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初識wpa_supplicant
- 4.2.1 wpa_supplicant架構
- 4.2.2 wpa_supplicant編譯配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函數分析
- 4.3.2 wpa_supplicant_init函數分析
- 4.3.3 wpa_supplicant_add_iface函數分析
- 4.3.4 wpa_supplicant_init_iface函數分析
- 4.4 EAP和EAPOL模塊
- 4.4.1 EAP模塊分析
- 4.4.2 EAPOL模塊分析
- 4.5 wpa_supplicant連接無線網絡分析
- 4.5.1 ADD_NETWORK命令處理
- 4.5.2 SET_NETWORK命令處理
- 4.5.3 ENABLE_NETWORK命令處理
- 4.6 本章總結和參考資料說明
- 4.6.1 本章總結
- 4.6.2 參考資料說明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的創建及初始化
- 5.2.1 HSM和AsyncChannel介紹
- 5.2.2 WifiService構造函數分析
- 5.2.3 WifiStateMachine介紹
- 5.3 加入無線網絡分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介紹
- 5.5 Captive Portal Check介紹
- 5.6 本章總結和參考資料說明
- 5.6.1 本章總結
- 5.6.2 參考資料說明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基礎知識
- 6.2.1 WSC應用場景
- 6.2.2 WSC核心組件及接口
- 6.3 Registration Protocol詳解
- 6.3.1 WSC IE和Attribute介紹
- 6.3.2 802.11管理幀WSC IE設置
- 6.3.3 EAP-WSC介紹
- 6.4 WSC代碼分析
- 6.4.1 Settings中的WSC處理
- 6.4.2 WifiStateMachine的處理
- 6.4.3 wpa_supplicant中的WSC處理
- 6.4.4 EAP-WSC處理流程分析
- 6.5 本章總結和參考資料說明
- 6.5.1 本章總結
- 6.5.2 參考資料說明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基礎知識
- 7.2.1 P2P架構
- 7.2.2 P2P Discovery技術
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介紹
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模塊初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章總結和參考資料說明
- 7.5.1 本章總結
- 7.5.2 參考資料說明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基礎知識
- 8.2.1 NFC概述
- 8.2.2 NFC R/W運行模式
- 8.2.3 NFC P2P運行模式
- 8.2.4 NFC CE運行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相關規范
- 8.3 Android中的NFC
- 8.3.1 NFC應用示例
- 8.3.2 NFC系統模塊
- 8.4 NFC HAL層討論
- 8.5 本章總結和參考資料說明
- 8.5.1 本章總結
- 8.5.2 參考資料說明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基礎知識
- 9.2.1 衛星導航基本原理
- 9.2.2 GPS系統組成及原理
- 9.2.3 OMA-SUPL協議
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架構
- 9.3.2 LocationManager應用示例
- 9.3.3 LocationManager系統模塊
- 9.4 本章總結和參考資料說明
- 9.4.1 本章總結
- 9.4.2 參考資料說明
- 附錄