|
@@ -15,13 +15,13 @@ const STATUS_PIC = {
|
|
|
};
|
|
|
|
|
|
// 选择6档
|
|
|
-const TXPOWER = 0
|
|
|
+const TXPOWER = -55
|
|
|
|
|
|
// 距离经验值(调试所得)
|
|
|
-const N = 14
|
|
|
+const N = 4
|
|
|
|
|
|
|
|
|
-let AveLength = 12
|
|
|
+let AveLength = 10
|
|
|
|
|
|
Component({
|
|
|
/**
|
|
@@ -65,7 +65,7 @@ Component({
|
|
|
},
|
|
|
toHandle() {
|
|
|
let aveArr = []
|
|
|
-
|
|
|
+ let json = []
|
|
|
|
|
|
this.openBluetooth(()=>{
|
|
|
startBeaconDiscovery({uuids: ['FDA50693-A4E2-4FB1-AFCF-C6EB07647825']}).then((res)=>{
|
|
@@ -73,7 +73,7 @@ Component({
|
|
|
wx.onBeaconUpdate(data=>{
|
|
|
|
|
|
//打印最新收集到的信号
|
|
|
- console.log('beacon',data.beacons)
|
|
|
+ // console.log('beacon',data.beacons)
|
|
|
// 需要收集十组数据,索引号最大的组是最旧的
|
|
|
if (aveArr.length > AveLength) {
|
|
|
// aveArr[0] = data.beacons
|
|
@@ -99,17 +99,18 @@ Component({
|
|
|
let arr = classfiy[key].map(item=>{
|
|
|
return item.rssi
|
|
|
})
|
|
|
- //每个major的rssi平均值
|
|
|
// console.log(key,'rssi',arr)
|
|
|
+ //每个major的rssi平均值
|
|
|
+
|
|
|
let ave = BeaconUtils.arrayAverage(arr)
|
|
|
// console.log('ave',ave)
|
|
|
//计算平均差
|
|
|
- let meanDeviation = BeaconUtils.getMeanDeviation(arr,ave);
|
|
|
+ let meanDeviation = BeaconUtils.getVariance(arr,ave); //改成方差
|
|
|
// console.log('meanDeviation',meanDeviation)
|
|
|
//计算各rssi的高斯模糊权重
|
|
|
let guassionArr = [];
|
|
|
for(let i = 0; i < arr.length; ++i){
|
|
|
- // console.log('guassionArr ele',BeaconUtils.getOneGuassionArray(arr.length,i,meanDeviation))
|
|
|
+ // console.log('guassionArr ele',i,BeaconUtils.getOneGuassionArray(arr.length,i,meanDeviation))
|
|
|
// 返回的可能是空数组
|
|
|
guassionArr.push(BeaconUtils.getOneGuassionArray(arr.length,i,meanDeviation));
|
|
|
}
|
|
@@ -119,6 +120,10 @@ Component({
|
|
|
for(let i = 0; i < arr.length; ++i){
|
|
|
let sum = 0;
|
|
|
for(let j = 0; j <arr.length; ++j){
|
|
|
+ if(guassionArr[i].length == 0){
|
|
|
+ sum = arr[j]
|
|
|
+ break;
|
|
|
+ }
|
|
|
sum += guassionArr[i][j] * arr[j]
|
|
|
}
|
|
|
rssiArr.push(sum);
|
|
@@ -126,7 +131,7 @@ Component({
|
|
|
}
|
|
|
// console.log('rssiArr',rssiArr);
|
|
|
//时间加权后求rssi平均值
|
|
|
- let aveOnTime = BeaconUtils.arrayAverage(rssiArr.slice(Math.floor(0,rssiArr.length / 5)).concat(rssiArr));
|
|
|
+ let aveOnTime = BeaconUtils.arrayAverage(rssiArr.slice(0,Math.floor(rssiArr.length / 3)).concat(rssiArr));
|
|
|
// console.log('aveOnTime',aveOnTime)
|
|
|
//测距
|
|
|
|
|
@@ -143,9 +148,10 @@ Component({
|
|
|
// dataArr.push(classfiy[key].length)
|
|
|
|
|
|
})
|
|
|
- // console.log(classfiy['10001'])
|
|
|
- // console.log(classfiy['10002'])
|
|
|
- // console.log(classfiy['10003'])
|
|
|
+ // console.log('10001',classfiy['10001'])
|
|
|
+ // console.log('10002',classfiy['10002'])
|
|
|
+ // console.log('10003',classfiy['10003'])
|
|
|
+ // console.log(classfiy)
|
|
|
|
|
|
// 筛选器,筛选出配对的一组信标
|
|
|
let aveAccuracys = new Map() //信标的平均距离,用于判断是否在范围内
|
|
@@ -154,9 +160,15 @@ Component({
|
|
|
let annexHall = ['1000310004'] //附厅
|
|
|
let mainHall = ['1000510006'] //主厅
|
|
|
let area = [prologue,annexHall,mainHall]
|
|
|
- const R = 3.8 //设定范围半径
|
|
|
+ const R = 3 //设定范围半径
|
|
|
Object.keys(accuracyList).forEach(key=>{
|
|
|
let aveAccuracy = BeaconUtils.arrayAverage(accuracyList[key])
|
|
|
+ // console.log(key,aveAccuracy)
|
|
|
+ let record = {'id':'10001','distance':aveAccuracy}
|
|
|
+ json.push(record)
|
|
|
+ if(json.length == 500){
|
|
|
+ console.log(JSON.stringify(json))
|
|
|
+ }
|
|
|
if(aveAccuracy < R){
|
|
|
aveAccuracys.set(key,aveAccuracy)
|
|
|
}
|
|
@@ -185,27 +197,6 @@ Component({
|
|
|
console.log(i)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- // 计算方差
|
|
|
- //计算平均数
|
|
|
- // let x = BeaconUtils.arrayAverage(dataArr)
|
|
|
- // let variance = BeaconUtils.getVariance(dataArr,x)
|
|
|
- //打印收集到各种信号数目的方差
|
|
|
- // console.log('txPower=',TXPOWER," 方差:",BeaconUtils.repeat('--',Math.floor(variance)))
|
|
|
-
|
|
|
- // 定位
|
|
|
- // 将三个信标构成直角三角形,其中10002号信标为直角,10001号为基点
|
|
|
- // 根据挡位设定相邻顶点信标的距离,5档,设边长为10m
|
|
|
- // let sideLength = 5
|
|
|
- // let distance1,distance2,distance3 //分别对应游客到信标10001,1002,10003的距离
|
|
|
- // distance1 = BeaconUtils.arrayAverage(accuracyList['10001'])
|
|
|
- // distance2 = BeaconUtils.arrayAverage(accuracyList['10002'])
|
|
|
- // distance3 = BeaconUtils.arrayAverage(accuracyList['10003'])
|
|
|
- // let px = (Math.pow(2.8,2) - Math.pow(distance2,2) + Math.pow(distance1,2)) / (2.8 * 2)
|
|
|
- // let py = (Math.pow(5.6,2) - Math.pow(distance3,2) + Math.pow(distance2,2)) / (5.6 * 2)
|
|
|
- // console.log('px',px,' py',py)
|
|
|
-
|
|
|
this.setData({
|
|
|
classfiy,
|
|
|
status:'2'
|