|
@@ -70,29 +70,20 @@ Component({
|
|
|
startBeaconDiscovery({uuids: ['FDA50693-A4E2-4FB1-AFCF-C6EB07647825']}).then((res)=>{
|
|
|
|
|
|
wx.onBeaconUpdate(data=>{
|
|
|
-
|
|
|
- //打印最新收集到的信号
|
|
|
-
|
|
|
// 需要收集十组数据,索引号最大的组是最旧的
|
|
|
if (aveArr.length > AveLength) {
|
|
|
- // aveArr[0] = data.beacons
|
|
|
//当超过十组时,应该将索引号大的组淘汰掉
|
|
|
aveArr.pop()
|
|
|
}
|
|
|
-
|
|
|
aveArr.unshift(data.beacons) //在队列前面插入
|
|
|
-
|
|
|
- // console.log('aveArr',aveArr);
|
|
|
+
|
|
|
let all = []
|
|
|
aveArr.forEach(item => {
|
|
|
- // console.log(aveArr.length,item)
|
|
|
all = all.concat(item)
|
|
|
});
|
|
|
// classfiy = {10003:[{},{},···],10002:[{},{},···],10001:[{},{},···]}
|
|
|
-
|
|
|
let classfiy = BeaconUtils.classification(all,'major')
|
|
|
let accuracyList = {} // 存放处理后的accuary
|
|
|
- // let dataArr = [] //记录各信标的信号收集数目
|
|
|
Object.keys(classfiy).forEach(key=>{
|
|
|
//每个major的AveLength个元素数组,元素为rssi
|
|
|
let arr = classfiy[key].map(item=>{
|
|
@@ -100,17 +91,14 @@ Component({
|
|
|
})
|
|
|
|
|
|
//每个major的rssi平均值
|
|
|
-
|
|
|
let ave = BeaconUtils.arrayAverage(arr)
|
|
|
|
|
|
- //计算平均差
|
|
|
- let meanDeviation = BeaconUtils.getVariance(arr,ave); //改成方差
|
|
|
+ //计算方差
|
|
|
+ let meanDeviation = BeaconUtils.getVariance(arr,ave);
|
|
|
|
|
|
//计算各rssi的高斯模糊权重
|
|
|
- let guassionArr = [];
|
|
|
+ let guassionArr = []; //存放权重数组
|
|
|
for(let i = 0; i < arr.length; ++i){
|
|
|
-
|
|
|
- // 返回的可能是空数组
|
|
|
guassionArr.push(BeaconUtils.getOneGuassionArray(arr.length,i,meanDeviation));
|
|
|
}
|
|
|
|
|
@@ -126,14 +114,12 @@ Component({
|
|
|
sum += guassionArr[i][j] * arr[j]
|
|
|
}
|
|
|
rssiArr.push(sum);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
//时间加权后求rssi平均值
|
|
|
let aveOnTime = BeaconUtils.arrayAverage(rssiArr.slice(0,Math.floor(rssiArr.length / 3)).concat(rssiArr));
|
|
|
|
|
|
- //测距
|
|
|
-
|
|
|
+ //测距,根据时间加权后的rssi计算距离
|
|
|
classfiy[key].forEach(item=>{
|
|
|
item.accuracy = BeaconUtils.calculateAccuracy(TXPOWER,aveOnTime,N)
|
|
|
if(!accuracyList[key]){
|
|
@@ -141,20 +127,15 @@ Component({
|
|
|
accuracyList[key] = [item.accuracy]
|
|
|
}
|
|
|
accuracyList[key].push(item.accuracy)
|
|
|
-
|
|
|
})
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
})
|
|
|
|
|
|
-
|
|
|
// 筛选器,筛选出配对的一组信标
|
|
|
- let signSelect = [0,0,0]; //记录各组的信标出现数量,投票选择最多的,以此是prologue,annexHall,mainHall
|
|
|
- let prologue = ['10001','10002'] //序厅
|
|
|
- let annexHall = ['10003','10004'] //附厅
|
|
|
- let mainHall = ['10005','10006'] //主厅
|
|
|
- const R = 6 //设定范围半径
|
|
|
+ let signSelect = [0,0,0]; //记录各组的信标出现数量,投票选择最多的,依次是prologue,annexHall,mainHall
|
|
|
+ const prologue = ['10001','10002'] //序厅
|
|
|
+ const annexHall = ['10003','10004'] //附厅
|
|
|
+ const mainHall = ['10005','10006'] //主厅
|
|
|
+ const R = 6 //设定范围半径
|
|
|
Object.keys(accuracyList).forEach(key=>{
|
|
|
let aveAccuracy = BeaconUtils.arrayAverage(accuracyList[key])
|
|
|
|
|
@@ -171,6 +152,7 @@ Component({
|
|
|
//对小于预设半径的信号进行数量投票
|
|
|
let result = BeaconUtils.maxIndex(signSelect);
|
|
|
console.log('result',result);
|
|
|
+
|
|
|
this.setData({
|
|
|
classfiy,
|
|
|
status:'2'
|