近年來,隨著城域無線基礎網絡的發展,熱點(AP)的覆蓋率大幅度提高,由于定位服務需求的增加以及WiFi應用領域的擴大,WiFi定位成為一種有效的定位方式。GPS衛星定位是最主要的定位方式,它需要在相對空曠、高層建筑不密集的地方獲得較準確的定位,當人們處在室內或高樓林立的市區,定位精度明顯降低甚至不能定位。此時,利用無處不在的WiFi網絡將能夠彌補GPS定位的不足。目前大多數的WiFi無線定位算法主要為:基于到達時間、到達角度、到達時間差的模型定位及基于接受信號強度(RSSI)的位置指紋定位算法,由于位置指紋算法的無線定位方式不需要已知AP的位置信息及準確的信道模型,該算法在定位性能以及可用性上具有更大的優勢。因此,本文首先設計了整體的系統框架,通過研究分析了該算法目前存在的問題,提出了改進方案,并在Android平臺上實現完整的定位系統。 1 系統整體設計 本系統的設計目標是在Android智能終端上實現實時WiFi定位系統,該系統包括客戶端、數據服務器以及定位服務器。為了使定位過程和服務器通信過程相對獨立,分別設置了專門用于定位的AP熱點和客戶端與服務器之間的通信AP熱點,可有效降低系統環境搭建的初期成本。本方案的系統框架如圖1所示。其中的通信AP熱點需要與局域網相連,保證定位區域內WiFi信號良好,確保數據傳輸及處理的及時性。客戶端和服務器端通過TCP連接實現可靠傳輸。 圖1 系統框架圖 2 系統實現 2.1 客戶端模塊設計 本系統采用客戶端/服務器(c/s)的網絡架構,客戶端的定位過程主要包括WiFi無線信號掃描、數據傳輸、界面顯示等,該過程的流程圖如圖2所示。 圖2 客戶端定位模塊流程圖 WiFi信號掃描是利用Android API提供的WiFiManager類實現。首先,判斷WiFi是否開啟;其次取得WiFiManager及WmInf0對象,通過startScan()、getScanResuits()等方法開始掃描并得到掃描結果mScanResult;最后,將數據傳遞給服務器端進行定位計算。Android平臺為用戶提供豐富的界面顯示控件,本設計使用ListView顯示服務器返回的定位位置信息。 2.2 服務器端模塊設計 服務器端首先需要不斷監聽指定端口,當監聽到客戶端的請求時,創建新進程,該進程負責處理客戶端的請求,其處理過程如圖3所示。監聽數據,如果接收到該數據,則進行CRC校驗并結束鏈接幀,根據請求內容查詢數據庫并進行定位運算,最后返回定位結果,通過數據傳輸反饋給客戶端界面顯示定位信息。 圖3 服務器端流程圖 3 定位算法設計 在室內或室外環境下,由于信號傳播途中受地形、障礙物的影響和人體的阻擋,將引起無線信號的折射、衍射等多徑傳播、多址傳播,以不同的時間到達終端,造成傳播信號在幅度、頻率和相位上的改變。其使得在同一位置,不同時間采集到的RSS值很不確定,即使在同一時間相同位置使用不同的定位設備采集到的RSS大小也會不同,會影響定位的精確性,無線信號傳播的衰減模型難以良好地表征距離和信號強度間的映射關系。因此本文采用基于位置指紋的定位算法,同時針對造成定位誤差的主要原因,提出了改進的定位算法以提高定位魯棒性。 3.1 位置指紋定位算法 位置指紋定位是根據不同位置接收到的信號強度向量,建立相應的位置指紋數據庫,通過實時采集的信號強度與數據庫信號空間中儲存的信號向量,根據一定的匹配算法實現定位。該算法能夠在一定程度上減少多徑效應的影響,增強抗干擾能力。目前,基于位置指紋的定位算法主要分為確定型和概率型,前者的計算效率較高,后者的定位精度較高,但是計算量較大,為了快速定位,采用確定型的位置指紋定位算法。 位置指紋定位過程一般分兩個階段實現:離線采樣階段和在線定位階段。離線采樣階段主要目的是建立位置指紋數據庫,根據定位環境設計較為合理的采樣分布圖,遍歷待定位區域內的所有采樣點,將相應的信號強度、MAC地址以及位置信息等記錄在指紋數據庫中。數據庫中數據的準確性決定了定位的精確程度,數據越精確,定位效果越好。在線定位階段是利用Android手機在待定位點測得AP的信號強度和物理地址,然后通過相應的匹配算法,在數據庫中搜索與測量點相匹配的數據,從而估計用戶的實際位置。位置指紋的定位過程如圖4所示。 圖4 定位框圖 3.2 匹配算法 通常的匹配算法有K最近鄰匹配算法(KNN),該算法能夠有效提高定位精度且應用成熟。本文采用了該匹配算法,K最近鄰匹配算法的實質是計算待測點采集到的RSS向量和數據庫中已記錄的RSS向量之間的距離。假設待測區域有n個AP,m 個參考點,則距離的表達式如下: 其中,q為正整數,當q=1時稱為曼哈頓距離,q=2,稱為歐式距離;L代表向量在空間中的距離。本文使用q=2進行計算,當取得n個最小歐式距離的位置點后,求取n個坐標點的質心為待測點位置坐標。 3.3 改進的位置指紋定位算法 理論研究表明:由于室內環境復雜,無線信號會因為時間的變化、人體的隨機晃動及環境等因素的影響使信號強度值呈現一定的波動。為了保證信號數據本身的穩定性,在實驗室環境下進行如下實驗:在同一位置的不同時間分別采集數據,上午和下午兩個時間段每隔1 S共采集300次WiFi信號。發現無線信號隨時間變化不大,基本存在2 dB左右誤差,對定位結果影響較小。 但在多次測試過程中發現,無線信號強度在某位置下會出現如圖5所示的波動情況,多數信號強度值保持在一定范圍內,但中間會存在抖動的數據,該種現象會對離線數據的準確性及在線定位的準確性產生較大影響。直接求均值的方式并不能表征該位置的信號特征,應該對采集的無線信號強度值進行平滑,選取有效點。 圖5 無線信號分布圖 對無線信號的平滑提出如下改進方案: ① 每隔1 S采集一次所有的信號組,假設其中一組的信號強度值是level,再連續間隔采集二次; ②如果連續采集三次的信號強度值均介于[1evel - 1,level+1]時,將該數據插入數據庫,否則舍去前面的所有信號值,重新返回步驟① ; ③ 將步驟② 獲取的多組無線信號強度值再求均值,存入離線數據庫。 利用改進的方案將圖5平滑處理后,改進前的信號強度值RSS=1.597 1,而改進后的RSSI=-46.I47 1,可見本方案能夠去除一定的抖動信號,得到較為理想的離線數據庫。該方法不僅用于離線數據采樣階段,而且應用于在線定位階段實時采集當前無線信號強度,可避免單次采集的不確定性。 針對設備差異對無線信號的影響,首先在同一位置用華為兩款不同型號手機對WiFi信號采集300次,無線信號分布情況如圖6所示。C8812型號手機采集信號強度保持在一65~66 dB,P6型號手機信號強度保持在一45dB,不同型號手機可能造成的誤差達2O dB,若按此進行定位將產生較大定位誤差,因此本文將在實時定位之前加上無線信號校正階段,能有效提高定位精度。 圖6 不同手機無線信號分布圖 為解決設備差異對WiFi定位造成的影響,Ekahau提出一種自動校正的方法。它是通過分析跟蹤設備在一些易于檢測的區域時的信號變化,自動學習跟蹤建立相應的映射關系,該方法的缺點是設備不易進入易檢測區,系統很難獲得充足的數據建立映射關系。Haeberlen的研究顯示,校正設備與測試設備之間的信號強度之間存在某種線性關系。本文經過大量實驗,統計獲得數據并通過函數擬合的方法,推導出校正設備及測試設備的關系,可以看作y=ax+b的線性關系,參數a、b將由實際的數據獲得。 4 實驗結果與分析 實驗區域為10 m×16 m,每隔1.5 m設定為一個采樣點,AP分布在該區域的四周如圖7黑色圓點位置,每個采樣點分別采集200次經過平滑處理后存入離線數據庫。為比較定位結果的精確性,選定如下5個點為測試點:A位于出口處附近,B位于區域的中心位置,C、D、E點位于區域的邊界處。 圖7 采樣分布圖 改進前和改進后分別進行4O次測試,實驗結果分析如表1所列。應用改進后的算法各測試點的平均誤差均有所下降,A點位于出口處,可能會受其他因素影響,定位效果不明顯;B、D點,受外界影響較小,定位效果較好,定位精度提高2 m左右。 |