今天看见朋友分享的一个项目:TrackR bravo

一个声称是同类产品中最轻薄小巧的蓝牙物品防丢器,金属材质的外壳,厚度为3.5mm,直径34mm,仅有一元硬币大小。可以系在钥匙串、钱包、手机、平板电脑等容易丢失的物品上。你甚至可以将它挂在狗狗的脖子上或者自行车上,当你找不到时,可以通过手机App定位物品的具体位置,还能显示物件与你相隔的距离。很适合经常丢失东西的健忘人士使用,还是一个不错的防盗器。

android 蓝牙定位技术 蓝牙设备定位app_算术平均

android 蓝牙定位技术 蓝牙设备定位app_算术平均_02

摘要 蓝牙防丢,原理比较简单,实现不是那么简单。在预定的间隔时间内不断的扫描周围的蓝牙设备,读取对应设备的信号强度值存储下来SSID【X1,X2...,Xn-1,Xn】统计分析,去除脏值,然后求加权算术平均数。根据距离和信号强度值的对应关系判断设备之间的距离。

一,概念说明

求平均一般有两种:简单算术平均数arithematic mean和加权平均数weighted mean。简单算术平均计算简单没有考虑到波动和强度指标;一般的在工程领域使用加权平均比较多,加权平均数的公式定义如下:

android 蓝牙定位技术 蓝牙设备定位app_android蓝牙防丢失_03

其中: ----代表算术平均数,x 代表各单位标志值(变量值),f 代表各组单位数(项数)。

运用条件:统计资料分组时我们不难得出如下结论:平均数水平高低受两个因素的影响(当然数据统计分析都是要在比较大规模的数据基础上进行,否则意义不大):

(1)受各组变量值( x )大小的影响

(2)受各组权数(f)大小的影响。(绝对权数表现为次数、频数,相对权数表现为频率)。

二,计算步骤

(1)采集数据,采集固定间隔时间内的设备的信号强度值数值SSID【X1,X2...,Xn-1,Xn】;

(2)去除脏值,去除数组中的脏值;

(3)求出信号强度值数值SSID【X1,X2...,Xn-1,Xn】对应的权数分布【F1,F2, ... Fn-1,Fn】

( 4 ) 处理异常情况(比如某个设备采集到的SSID数组长度太少,距离越界后反馈确认机制)

三,步骤详解

去除脏值Digest,采集固定间隔时间内的设备的信号强度值数值SSID【X1,X2...,Xn-1,Xn】后难免会有一些脏值扰乱最终结果。

首先要确定脏值的判断标准,在这里脏值的判断标准是:如果SSID数组中的一个值偏离SSID数组的简单平均数arithematic mean

大于DeviateFlag(这个标记可以根据程序的实际情况调整,在这里取值20%),那么我们就判断这个值是脏值。

求权数分布,不同的SSID数值对应的权数在这里和时间有关,在这里时间越后,权重会越高;假设权值分布为F【F1,F2, ... ,Fn-1,Fn】。那么F1+F2+ ... +Fn-1+Fn=1=100/100;这里要定义一个值权重补偿因子WCF(Weight Compensation Flag)=50/100,简写WCF(补偿值有点大哦,感觉这个数组也应和SSID的数组长度N有关,后期优化);那么权重补偿递减因子WCD(Decreasing)就是:WCD=WCF/N/2;(N>2  有效)

那么Fn的分布就是:

【1-D1/N,1-D2/n, ... 1-D(n/2)/n, ... , 1+D2/n, 1+D1/N】。-----------------------------------------------------------------------------------------------------

|权重补偿因子:WCF

那么首先要求Dn【D1,D2,... D(n/2), ... , .....】的分布;--|

| 权重补偿递减因子:WCD

if(WCF-WCF*2*i/N>0&&i

处理Dn的长度和Fn的长度(其实是SSID的长度),求出Fn的分布后;

那么weighted mean=SSID对应的分布*Fn对应分布的累加和

附录,参考文档

android 蓝牙定位技术 蓝牙设备定位app_WCF_04

http://www.stat.nuk.edu.tw/prost/content2/statics_4.htm

http://wiki.mbalib.com/wiki/算术平均数