【码农必看】Android编程中传感器常用算法处理_博鱼·体育
一、在传感器用于中,我们经常必须对传感器数据展开各种整理,让应用于取得更佳的效果,以下讲解几种常用的非常简单处置方法: 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.。
本文关键词:博鱼(boyu·中国),BOYU SPORTS,博鱼·体育
本文来源:博鱼(boyu·中国)-www.haru-paint.com