室內定位系列(二)——仿真獲取RSS數據


很多情況下大家都采用實際測量的數據進行定位算法的性能分析和驗證,但是實際測量的工作量太大、數據不全面、靈活性較小,采用仿真的方法獲取RSS數據是另一種可供選擇的方式。本文介紹射線跟蹤技術的基本原理,以及如何得到用於定位仿真的RSS數據。在此基礎上得到位置指紋庫與一組測試數據,用於以后定位算法的驗證。(本文的原理介紹並不嚴謹,但求快速理解)

對數距離損耗模型


在自由空間中,沒有任何障礙物,信號從發射源向四面八方呈球面形狀發射出去,各個方向上沒有任何區別,因此信號的功率和距離的平方呈反比:\(P \propto \frac{1}{d^2}\)

RSS就是功率,但是衰減的單位一般用dB來表示,那么就很容易理解RSS與距離的關系了,RSS衰減與距離的對數呈正比,假設已知一個參考距離\(d_0\)以及這個距離上的RSS為\(RSS(d_0)\),那么,\(RSS(d) = RSS(d_0) - 10n\log(\frac{d}{d_0})\)。自由空間中\(n=2\),這就是最常見的對數距離損耗模型(針對室內的傳播模型還有分隔損耗、樓層間分隔損耗、Ericsson多重斷點模型等)。下圖中的黑線是一組在走廊中測量的實際數據,紅線是對數距離損耗模型的擬合結果,可以看出模型可以反映總體趨勢,但和真實室內環境下的情況還是有較大區別,注意黑線的波動不是因為噪聲,而是實際的信號傳播環境造成的。走廊這種場景算是比較簡單的,如果在其他一下更復雜的場景下,有更多的信號遮擋、反射等因素存在,RSS不僅和距離位置有關,還和周圍的各種障礙物有關系,因此在更復雜一點的場景下,可以用射線跟蹤技術來分析。

射線跟蹤技術


電磁波沿直線傳播,可以將其近似為射線進行分析。對於一個固定的發射源,在自由空間中,利用對數距離衰減模型即可計算各個位置的RSS,但是室內環境很復雜,信號可以遇到牆壁發生反射,各個反射后的信號又可以與未經反射的信號疊加,實際中測量到的信號其實包括了各個反射、繞射、散射信號。在射線跟蹤中,計算出發射點與接收點之間的多條傳播路徑,分別對各個路徑的信號進行分析,一般包括信號強度、相位在多次反射或繞射下的計算,然后疊加得到接收點上的信號。

舉個例子,下圖是一個假定的空曠的房間,有一個發射源(AP)在房間左邊的角落,一個接收器在房間的中央,接收器收到這個AP的信號中包含了來自1條直射路徑與6條(牆壁)反射路徑的信號(多次反射的影響很小,可以忽略),下圖右下角的曲線是某條直線上RSS隨距離的衰減,在這樣稍微復雜一點的環境中,RSS與距離的關系已經不是平滑的對數衰減了。理論上我們可以計算出任意一點的的RSS,圖中有6個AP,因此每個位置點可以分別計算出6個RSS。

生成用於位置指紋法的仿真數據


下面介紹一些怎么得到在位置指紋法中進行仿真所需的數據。

  • RSS仿真環境數據集:設置好房間尺寸和各個AP的位置等各種參數,使用射線跟蹤計算每個位置的RSS,位置點的間隔設得小一點(0這里設為0.01m),計算一次射線跟蹤后把數據保存起來,以后所有的RSS數據都從這個“RSS仿真環境數據集”中或取。

  • 一個典型的離線指紋庫:模擬數據采集的過程,比如每個1m采集一次RSS數據,數據都從上面的“RSS仿真環境中”獲取。也可以考慮其他的一些采集方式,或者為采集過程加入噪聲,設置采集樣本的個數等。

  • 在線定位測試數據:模擬一個目標在房間中運動,獲得一條運動軌跡,以及每個軌跡點上的RSS,用來作為定位算法的測試數據。

這個系列的位置指紋法都使用生成的這些數據,用測試數據驗證算法的性能。

代碼和數據


代碼地址:https://github.com/jiangqideng/codeInBlogs/tree/master/IP_raytracing

  • main.m:主程序,在仿真環境中,得到離線指紋庫,以及在線階段的測試數據,用於以后的定位測試。
  • get_rss_by_ray_tracing.m:簡化場景下(空曠房間)的射線跟蹤。
  • generate_radio_map.m:生成“RSS仿真環境數據集”。
  • get_random_trace.m:生成一條隨機軌跡。
  • get_offline_data_random.m:模擬隨機數據采集,生成位置指紋庫。
  • get_offline_data_uniform.m:模擬均勻數據采集,生成位置指紋庫。
  • get_online_data.m:模擬在線階段,生成測試數據。
  • radio_map_20_15.mat:生成的“RSS仿真環境數據集”,199914996的數組,比如fingerprint(1000, 1000, 2)代表的是仿真環境中位置(100,100)上接收到的第2個AP的RSS。
  • offline_data_rss.mat:離線數據RSS,每行為一個RSS向量
  • offline_data_location.mat:離線數據位置點,每行為一個位置點x,y
  • online_data_trace.mat:生成測試數據的運動軌跡,10000*2的數組,比如trace(10, :)代表的是第10個時刻目標的位置x和y。
  • online_data_rss.mat:生成測試數據中與運行軌跡對應的RSS,10000*6的數組,比如trace(10, :)代表的是第10個時刻時目標測得的各個RSS。

作者:[rubbninja](http://www.cnblogs.com/rubbninja/) 出處:[http://www.cnblogs.com/rubbninja/](http://www.cnblogs.com/rubbninja/) 關於作者:目前主要研究領域為機器學習與無線定位技術,歡迎討論與指正! 版權聲明:本文版權歸作者和博客園共有,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM