浏览代码

tx=-55,发射频率为100ms,境参数N=4

zachary 4 年之前
父节点
当前提交
2acf9021e1
共有 2 个文件被更改,包括 29 次插入38 次删除
  1. 25 34
      components/map-sense/map-sense.js
  2. 4 4
      utils/util.js

+ 25 - 34
components/map-sense/map-sense.js

@@ -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'

+ 4 - 4
utils/util.js

@@ -61,9 +61,9 @@ getOneGuassionArray: function(size, kerR, sigma) {
     // if (!size) {
     //   return []
     // }
-    if (kerR > size-1){
-      return []
-    }
+    // if (kerR > size-1){
+    //   return []
+    // }
     let sum = 0;
     let arr = new Array(size);
     //进来的列表的元素可能是一样的,防止平均差为0的情况
@@ -72,7 +72,7 @@ getOneGuassionArray: function(size, kerR, sigma) {
       return arr.fill(weight)
     }
     for (let i = 0; i < size; i++) {
-      arr[i] = Math.exp(-((i - kerR) * (i - kerR)) / (2 * sigma * sigma)) / (sigma * Math.pow(2*Math.PI,0.5));
+      arr[i] = Math.exp(-((i - kerR) * (i - kerR)) / (2 * sigma * sigma))
       sum += arr[i];
     }