传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc

传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc

ID:27847615

大小:26.50 KB

页数:5页

时间:2018-12-06

传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc_第1页
传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc_第2页
传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc_第3页
传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc_第4页
传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc_第5页
资源描述:

《传感器算法处理-加权平滑-简单移动平均线-抽取突变.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、传感器算法处理:加权平滑简单移动平均线抽取突变  通过利用先进的传感器库,智能手机和平板OEM厂商就能让开发者能够追踪智能手机和用户的移动轨迹。通过观察移动轨迹,应用程序就能让用户与设备以创新、方便的手势进行交互。例如,当用户把手机放在耳朵旁边的时候,程序就能自动接收音频指令。  然而,最流行的移动应用程序却不常用到传感器。应用程序开发者说用传感器很难,没错,这是因为传感器是用来度量物理环境的,但没有好的想法或用法,这些测量经常没有意义。  现在,传感器厂商意识到了算法和软件才是产品最基本的要素。独立的固件开发

2、者开发了传感器库,不但能保持传感器处在校准状态从而提供准确的导航,还能减轻外界电磁干扰造成的影响。  一、在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法:  1.加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响;  2.抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化;  3.简单移动平均线:保留数据流最近的K个数据,取平均值;  二、加权平滑  使用算法如下:  (新值)=(旧值)*(1-a)+X*a其中a为设置的权值,X为最新数据,程序实现如

3、下:  floatALPHA=0.1f;  publicvoidonSensorChanged(SensorEventevent){  x=event.values[0];  y=event.values[1];  z=event.values[2];  mLowPassX=lowPass(x,mLowPassX);  mLowPassY=lowPass(x,mLowPassY);  mLowPassZ=lowPass(x,mLowPassZ);  }  privatefloatlowPass(floatcurre

4、nt,floatlast){  returnlast*(1.0f-ALPHA)+current*ALPHA;  }  三、抽取突变  采用上面加权平滑的逆算法。实现代码如下:  publicvoidonSensorChanged(SensorEventevent){  finalfloatALPHA=0.8;gravity[0]=ALPHA*gravity[0]+(1-ALPHA)*event.values[0];  gravity[1]=ALPHA*gravity[1]+(1-ALPHA)*event.value

5、s[1];  gravity[2]=ALPHA*gravity[2]+(1-ALPHA)*event.values[2];filteredValues[0]=event.values[0]-gravity[0];  filteredValues[1]=event.values[1]-gravity[1];  filteredValues[2]=event.values[2]-gravity[2];  }  四、简单移动平均线  保留传感器数据流中最近的K个数据,返回它们的平均值。k表示平均“窗口”的大小;  实现代

6、码如下:  publicclassMovingAverage{  privatefloatcircularBuffer[];//保存传感器最近的K个数据  privatefloatavg;//返回到传感器平均值  privatefloatsum;//数值中传感器数据的和  privatefloatcircularIndex;//传感器数据数组节点位置  privateintcount;publicMovingAverage(intk){  circularBuffer=newfloat[k];  count=0; 

7、 circularIndex=0;  avg=0;  sum=0;  }  publicfloatgetValue(){  returnarg;  }  publiclonggetCount(){  returncount;  }  privatevoidprimeBuffer(floatval){  for(inti=0;i《circularbuffer.length;++i){  circularBuffer[i]=val;  sum+=val;  }  }  privateintnexTIndex(intcu

8、rIndex){  if(curIndex+1》=circularBuffer.length){  return0;  }  returncurIndex+1;  }  publicvoidpushValue(floatx){  if(0==count++){  primeBuffer(x);  }  floatlastValue=circularBuffe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。