【码农必看】Android编程中传感器常用算法处理

【码农必看】Android编程中传感器常用算法处理

LOL赛事竞猜

一、在传感器用于中,我们经常必须对传感器数据展开各种整理,让应用于取得更佳的效果,以下讲解几种常用的非常简单处置方法:  1.权重光滑:光滑和平衡传感器数据,增大无意间数据变异的影响;  2.提取变异:除去静态和较慢变化的数据背景,特别强调瞬间变化;  3.非常简单移动平均线:保有数据流最近的K个数据,所取平均值;  二、权重光滑  用于算法如下:  (新值)=(旧值)*(1-a)+X*a  其中a为设置的权值,X为近期数据,程序实现如下:  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(floatcurrent,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.values[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回应平均值窗口的大小;  构建代码如下:  publicclassMovingAverage{  privatefloatcircularBuffer[];//留存传感器最近的K个数据  privatefloatavg;//回到到传感器平均值  privatefloatsum;//数值中传感器数据的和  privatefloatcircularIndex;//传感器数据数组节点方位  privateintcount;  publicMovingAverage(intk){  circularBuffer=newfloat[k];  count=0;  circularIndex=0;  avg=0;  sum=0;  }  publicfloatgetValue(){  returnarg;  }  publiclonggetCount(){  returncount;  }  privatevoidprimeBuffer(floatval){  for(inti=0;icircularBuffer[i]=val;  sum+=val;  }  }  privateintnextIndex(intcurIndex){  if(curIndex+1=circularBuffer.length){  return0;  }  returncurIndex+1;  }  publicvoidpushValue(floatx){  if(0==count++){  primeBuffer(x);  }  floatlastValue=circularBuffer[circularIndex];  circularBuffer[circularIndex]=x;//改版窗口中传感器数据  sum-=lastValue;//改版窗口中传感器数据和  sum+=x;  avg=sum/circularBuffer._英雄联盟竞猜平台。

LOL赛事竞猜

LOL赛事竞猜

本文来源:英雄联盟竞猜平台-www.uinetiq.com

返回