開(kāi)發(fā)接近(Proximity)相關(guān)的藍牙(Bluetooth)應用時(shí),開(kāi)發(fā)者需要在不同的信號強度測量方法之間做出選擇,比如我的應用是該采用RX還是RSSI呢?想要更好地理解這一問(wèn)題,我們不妨先來(lái)回顧一下射頻(RF)通信的基本概念。 RX和RSSI RT通信(Real Time Communication,實(shí)時(shí)通信)使用RX和 RSSI(Received Signal Strength Indication,接收信號強度指示)來(lái)測量無(wú)線(xiàn)電信號強度。兩者都是天線(xiàn)接收到的功率水平指標,差異在于RX的測量單位是毫瓦(mW)或分貝毫瓦(dBm),而RSSI是信號強度百分比,RSSI值越高表示信號越強。與RX不同的是,RSSI是一種相對的測量方法,大多由芯片制造商定義。RSSI并無(wú)標準的物理參數。例如,廠(chǎng)商甲的RSSI最大值可能為100,而廠(chǎng)商乙的RSSI區間可以為0到127。然而在某一特定的芯片上,其RSSI值與特定物理RX值之間的映射是已知的。對于某些平臺,高層 API僅提供RSSI數據。 不同無(wú)線(xiàn)電芯片的RSSI有所不同 你可以會(huì )注意到,即便位置和距離固定,RSSI值也會(huì )出現變動(dòng),其原因之一可能就是硬件/無(wú)線(xiàn)電平臺。例如,iOS設備的芯片組大多相同,RSSI值能夠很精確地反映距離,同樣的RSSI值在iPhone甲和iPhone乙上很可能表示相同的信號強度值。然而安卓設備種類(lèi)多樣,設備采用的芯片組也各有不同,RSSI的絕對值就無(wú)法精確地反映距離。同樣的RSSI值在不同安卓手機上可能表示不同的信號強度。盡管如此,如果開(kāi)發(fā)者能夠了解RSSI值變化的趨勢,那么對于接近應用仍十分有幫助。趨勢也可以給你很多有用的數據。 接近應用中如何使用RSSI? 避免使用RSSI絕對值,而采用趨勢 基于無(wú)線(xiàn)電信號的波動(dòng),我們可以了解到相對準確的RSSI趨勢。了解信號的強弱變化并不難,因此可以判斷用戶(hù)是接近還是遠離信號源。更理想的情況是,如果我們了解RSSI和特定接收設備位置之間的具體映射,就能對距離作出相對準確的判斷。 以下就是RSSI與距離之間關(guān)系的舉例: RSSI 值隨距離的改變 獲取RSSI值時(shí)采用區間眾數 RF通信的本質(zhì)決定了RX和RSSI在很大程度上都會(huì )受到各種環(huán)境因素的影響。采用RSSI值時(shí),環(huán)境因素還會(huì )引起一定范圍內的值漂移。為了抵御這些影響,開(kāi)發(fā)者可以設計一個(gè)采樣算法,獲取特定時(shí)段內RSSI樣本集的眾數(出現次數最多的值)。這樣,數據就能更準確地反映實(shí)際信號強度,并濾過(guò)噪音。 結論 當接近應用選擇使用RSSI時(shí),開(kāi)發(fā)者需要考慮不同芯片廠(chǎng)商的不同定義。不同無(wú)線(xiàn)電芯片的RSSI絕對值可能不同,但我們仍能從同一芯片的RSSI趨勢中獲取很多信息。為避免環(huán)境干擾,開(kāi)發(fā)者可以定義自己的采樣算法以去除噪音。 |