亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

微信小程序iBeacon測距及穩定程序的實現解析

2019-11-19 11:06:00
字體:
來源:轉載
供稿:網友

前言

iBeacon是蘋果公司推出的一項低耗能藍牙技術,由藍牙設備發射包含指定信息的信號,再由移動設備接收信號,從而實現近場通信。微信小程序2017年開始支持iBeacon,搖一搖附近就是基于iBeacon實現的,此外iBeacon還可以實現距離測量,本文將介紹如何基于微信小程序實現iBeacon測距。

iBeacon測距原理

藍牙信標發射的信號強度(rssi)與收發設備之間的距離,某種程度上呈正相關,因此通過合理的運算轉化,可以通過rssi的值反推出與接收設備間的距離。

藍牙信標的rssi值是一個參考值,沒有固定標準。想要計算出藍牙信標的距離,還必須知道這個信標設備的txPower值。txPower是指當距離藍牙信標1m時的rssi值,不同的藍牙設備或相同設備不同的工況甚至不同的場地環境,都會影響txPower值,因此這個值雖然可以測量,但一定程度上是個經驗值,無法測準。

rssi測距公式

知道rssi和txPower后就可以計算距離了,有兩種計算公式:

一、

這個公式里的三個變量A、B、C都是經驗值,需要根據手機系統或硬件型號精確調校,通常會將所有設備的校準結果保存成一個設備信息表,移動終端先檢測本機型號,然后匹配設備信息調取相應的計算配置,再進行計算。很明顯這個公式是比較依賴硬件調校的,沒有數據儲備的前提下這個公式會很難用。

轉換成js代碼:

const calculateAccuracy = function (txPower, rssi) { return (0.89976) * Math.pow(rssi / txPower, 7.7095) + 0.111}

未精校情況下的測距表現:

先說這個圖怎么看。

  • 縱軸代表測量距離,橫軸代表時間,每隔一秒取樣一次,圖中是近10次取樣的數值曲線。
  • 綠線是設備接收到的rssi值,反應硬件真實接收到的數據情況;
  • 紅線是套用公式計算得出的瞬時距離;
  • 黃線是微信小程序自帶的瞬時測距結果。

藍牙信標與手機的實際距離1m,測試設備為紅米Note7。

從上圖可見,rssi值相對穩定,說明硬件沒有太大問題。紅線和黃線的波動都很大,說明準確度不咋地。二者的波動趨勢幾乎一致,所以有理由懷疑微信小程序內部也是用的這個測距公式。從結果來看,這個公式的準確度比較差,可能是因為沒有精校的原因。

二、

這個公式里的A就是rssi,tx是txPower,n是經驗值,n的取值跟物理環境有關。

const calculateAccuracy = function (txPower, rssi) { return Math.pow(10, Math.abs(rssi - txPower) / (10 * 4))}

公式二的測距表現:

人比人得死,貨比貨得扔啊。

圖中黃線還是波動的那么瘋狂,但紅線卻異常穩定,而且呈現出跟綠線一致的波動幅度,說明測距精度靠譜。這個公式只有一個參數,生產環境中的調校相對簡單,這里我們選擇公式二作為測距公式。

iBeacon測距穩定程序

藍牙信號本身就有波動性,加上現實環境中的很多因素也會影響到信號強度,比如物體遮擋、設備方向變化、硬件自身的穩定性等,所以接收設備檢測到的rssi值通常是“跳動”的,直接使用測距公式算出的結果,往往不可用。必須實現一個穩定程序,讓計算結果呈現出連續性和穩定性。

數據濾波

穩定程序主要做的事就是對波段數據“削峰填谷”,也可以稱作數據濾波。最簡單的濾波處理,就是收集一段時間的值求平均,只要硬件不出問題,固定距離的藍牙信標rssi值總是會在一個相對穩定的區間內變化,采樣時間越長,采樣的平均值就會越接近真實值,因此在靜態測距場景中,求平均是最佳方式。

//求數組平均值const arrayAverage = arr => arr.reduce((acc, val) => acc + val, 0) / arr.length;return arrayAverage([...])

具體實現是,當程序源源不斷的接收到信標的rssi時,先用公式計算出瞬時測距結果,然后將結果存進一個數組,然后計算這個數組的平均值。靜態測距時,測量結果還是非常準的,2m以內的距離誤差可以低至0.1m。

實際應用中往往都是動態測距,所以采樣數據的長度要加以限制,比如按后進先出的順序,取最近10組數據。具體采樣隊列設為多長,要根據項目實際需求而定。采樣隊列的長度越長,測距結果越平滑,但對移動端的動態捕捉越遲鈍;反之采樣隊列越短,結果越銳利,對移動端的動態捕捉越靈敏。

有時因為一些偶然因素,采樣隊列中會出現個別大幅偏離真實值的“燥音”數據,即使求平均也難以有效抹除影響,為消除這種影響,可以在求平均前先用高斯模糊算法對“偏大值”和“偏小值”做平滑處理,最大限度的降低數據噪音的干擾。

高斯模糊算法的關鍵是根據平均差求權重,一維高斯模糊的權重計算公式:

轉換成js代碼:

//求一維隊列某點的高斯模糊權重 @param(隊列長度,目標位置, 平均差)const getOneGuassionArray = function (size, kerR, sigma) { if (size % 2 > 0) {  size -= 1 } if (!size) {  return [] } if (kerR > size-1){  return [] } let sum = 0; let arr = new Array(size); for (let i = 0; i < size; i++) {  arr[i] = Math.exp(-((i - kerR) * (i - kerR)) / (2 * sigma * sigma));  sum += arr[i]; } return arr.map(e => e / sum);}

關于“偏大值”和“偏小值”的概念將在下文介紹,這里只要知道我們的模糊目標是那些“極端數據”就行了。

時間加權

基于采樣隊列求平均的處理方式,不可避免的會讓結果產生滯后性,這時可以引入時間加權的補償算法。

所謂時間加權,是指在求平均值的時候,給距離當前時間較近的值更高的計算權重,反之給距離當前時間較遠的值較低的計算權重,實現起來也非常簡單。

以最簡單的權重分配為例,將采樣隊列一分為二,按時間遠近定位為“當前組”和“過去組”,比如說我想讓當前組的權重是過去組的2倍,那么只要將當前組數據全部復制一份加入隊列,然后再計算新隊列的平均值。

//時間加權處理queue = queue.slice(0, parseInt(queue.length / 2)).concat(queue)//求平均return arrayAverage(queue)

動態跟進

經過時間加權處理后,數據的滯后性會得到一定的抑制,但如果遇到比較“陡峭”的距離變化,這種處理仍然會給出一個相對“平滑”的反饋,為了讓穩定程序能更好的感知動態變化,并且做出跟進反應,還需要人為的設置一些特殊條件。

首先,如何判斷移動設備正在遠離或靠近?

這里有一個簡單的思路,可以先找出采樣隊列中的最大值和最小值,然后以一定的閾值找出偏大值和偏小值。比如隊列中的最大值是3,最小值是1,閾值設置為0.1m,那么大于2.9m的數據都算偏大值,小于1.1m的數據都算偏小值。偏大值和偏小值的隊列長度最長不超過總隊列的二分之一。

然后,如果偏大值集中在隊列的前三分之一部分,那么我們可以認為移動設備正在果斷遠離;反之偏小值集中在隊列的前三分之一部分,則可以認為移動設備正在靠近。

//maxCount為偏大值的序號數組//minCount為偏小值的序號數組//queueLength為隊列長度if (arrayAverage(maxCount) < parseInt(queueLength / 3)) {  console.log(`正在遠離`)} else if (arrayAverage(minCount) < parseInt(queueLength / 3)) {  console.log(`正在靠近`)}

基于這種遠離和靠近的趨勢判斷,我們可以人為的讓數據向運動方向做更激進的傾斜。怎么做呢?跳過時間加權邏輯,如果判斷為正在遠離,那么就將隊列中的偏小值過濾掉,反之則將偏大值過濾掉,只計算剩下的數據;這種處理會得到一個明顯過激的結果,但考慮到現實世界中的運動往往具有慣性,這種激進處理,可能會更貼合真實的運動情況,而且讓數據的響應更“靈敏”。

效果檢驗

做到目前為止效果怎么樣呢,直接看圖吧。

下圖中,綠線依然是rssi值,紅線是根據rssi直接算出來的瞬時測距結果,黃線是加入穩定程序后的測距結果。

第一張圖是相對靜止的條件,可以看到黃線相對紅線明顯更加平穩,說明穩定程序還是起作用的。

第二張圖是模擬快速遠離的場景,可以看到黃線在保證平穩的前提下緊跟紅線,沒有被甩掉,主要體現的是穩定程序的動態跟進效果。

第三張圖是掄胳膊甩手機+遮擋信號模擬出的場景,貌似穩定程序也架不住了,有點飄忽。

以上是關于穩定程序的簡要實現思路,生產環境中肯定會面臨更加復雜的情況,免不了還要做大量調試,這里只是拋磚引玉。

總結

藍牙測距簡單來說就是一個公式的應用,本身比較簡單,基于測距可以實現很多近場應用,比如近場簽到、近場推送等等,更進一步甚至可以實現對移動設備的定位,有了定位信息,很多室內定位、室內導航相關的應用就都可以實現了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免费播放| 国产精品aaa| 亚洲美女免费精品视频在线观看| 日韩精品在线观看一区| 亚洲国产一区二区三区在线观看| 国产成人小视频在线观看| 热久久免费国产视频| 在线视频日韩精品| 欧美丰满老妇厨房牲生活| 一区二区欧美日韩视频| 色综合伊人色综合网| 色久欧美在线视频观看| 日韩视频免费看| 欧美国产视频日韩| 92看片淫黄大片欧美看国产片| 欧美大全免费观看电视剧大泉洋| 亚洲国产成人精品久久久国产成人一区| 亚洲女人初尝黑人巨大| 在线观看欧美日韩| 日韩在线中文字| 久久国产精彩视频| 一区三区二区视频| 久久99青青精品免费观看| 亚洲国产精品99| 综合激情国产一区| 国产精品人成电影在线观看| 成人免费xxxxx在线观看| 青青在线视频一区二区三区| 久久久成人的性感天堂| 日韩精品视频在线| 国产精品偷伦视频免费观看国产| 日韩电影在线观看永久视频免费网站| 亚洲人成网站777色婷婷| 91麻豆国产语对白在线观看| 国产精品一区专区欧美日韩| 亚洲肉体裸体xxxx137| 成人精品久久av网站| 亚洲va久久久噜噜噜久久天堂| 精品国产户外野外| 欧美国产日韩一区二区在线观看| 亚洲精品一区二区网址| 亚洲aⅴ男人的天堂在线观看| 97精品视频在线播放| 一区二区三区视频免费在线观看| 97av在线影院| 最近中文字幕日韩精品| 国产精品精品久久久久久| 久久人人爽人人爽人人片亚洲| 亚洲天堂成人在线| 欧美性生交xxxxxdddd| 丝袜美腿精品国产二区| 久久久久亚洲精品| 久久久亚洲国产| 精品一区精品二区| 欧美性xxxx极品hd满灌| 国产精品免费一区| 91亚洲va在线va天堂va国| 久色乳综合思思在线视频| 97超级碰碰人国产在线观看| 国产精品亚洲第一区| 久久国产加勒比精品无码| 亚洲免费小视频| 国产99久久精品一区二区永久免费| 亚洲性日韩精品一区二区| 亚洲激情视频在线| 91人人爽人人爽人人精88v| 亚洲综合最新在线| 成人国产精品一区二区| 亚洲精品ady| 精品偷拍各种wc美女嘘嘘| 欧美另类69精品久久久久9999| 亚洲网站在线播放| 91精品免费视频| 欧美精品福利在线| 91极品女神在线| 欧美性视频网站| 国产日韩在线播放| 国产这里只有精品| 午夜美女久久久久爽久久| 777777777亚洲妇女| 清纯唯美亚洲激情| 亚洲iv一区二区三区| 欧美国产中文字幕| 综合国产在线视频| 韩国福利视频一区| 91网站免费看| 亚洲精品视频免费在线观看| 精品久久久久久久久久久久久久| 一本色道久久88精品综合| 欧美精品www在线观看| 亚洲激情在线观看视频免费| 日韩网站免费观看高清| 久久亚洲电影天堂| 97视频色精品| 青青草成人在线| 岛国av一区二区| 亲子乱一区二区三区电影| 在线成人中文字幕| 国产一区二区黄| 日韩中文第一页| 精品欧美激情精品一区| 欧美成人精品激情在线观看| 国产精品久久久久久av福利| 国内揄拍国内精品| 日韩av资源在线播放| 国产一区私人高清影院| 国产日韩中文在线| 国产精品一区二区3区| 亚洲精品免费av| 国产一区二区激情| 欧美性视频精品| 91超碰中文字幕久久精品| 成人精品视频99在线观看免费| 日本亚洲精品在线观看| 91国产视频在线播放| 成人精品一区二区三区| 久久中国妇女中文字幕| 亚洲天堂第二页| 亚洲免费福利视频| 美女扒开尿口让男人操亚洲视频网站| 欧洲亚洲免费视频| 成人网中文字幕| 国产精品1234| 国产精品久久久久999| 久久久久久久网站| 国产精品久久久久999| 欧美肥臀大乳一区二区免费视频| 欧美激情中文网| 日韩成人av在线播放| 国产成人精品免费久久久久| 91午夜理伦私人影院| 亚洲国产精品久久91精品| 国产精品视频yy9099| 色爱精品视频一区| 黄色成人在线免费| 欧美激情综合亚洲一二区| 欧美激情成人在线视频| 中文字幕欧美视频在线| 色妞久久福利网| 亚洲精品美女在线观看| 国产亚洲精品久久久久久| 久久久久久国产三级电影| 国产成人jvid在线播放| 日韩视频免费看| 91影院在线免费观看视频| 欧美电影在线观看网站| 亚洲理论电影网| 欧美性色视频在线| xxxx性欧美| 欧美精品激情blacked18| 成人国产在线视频| 久久色免费在线视频| 国产啪精品视频网站| 丰满岳妇乱一区二区三区| 久久精品亚洲热| 日韩欧美在线视频| 欧美日韩午夜激情| 日本亚洲欧洲色α| 成人激情视频小说免费下载| 欧美美最猛性xxxxxx| 中文字幕亚洲自拍| 中文字幕亚洲无线码在线一区| 高跟丝袜一区二区三区| 日日摸夜夜添一区|