1.加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响;
2.抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化;
3.简单移动平均线:保留数据流*近的K个数据,取平均值;
加权平滑,使用算法如下:
(新值) = (旧值)*(1 - a) + X * a其中a为设置的权值,X为*新数据,程序实现如下:
1 float ALPHA = 0.1f;
2 public void onSensorChanged(SensorEvent event){
3 x = event.values[0];
4 y = event.values[1];
5 z = event.values[2];
6 mLowPassX = lowPass(x,mLowPassX);
7 mLowPassY = lowPass(x,mLowPassY);
8 mLowPassZ = lowPass(x,mLowPassZ);
9 }
10 private float lowPass(float current,float last){
11 return last * (1.0f - ALPHA) + current * ALPHA;
12 }
抽取突变采用上面加权平滑的逆算法
实现代码如下:
1 public void onSensorChanged(SensorEvent event){
2 final float ALPHA = 0.8;gravity[0] = ALPHA * gravity[0] + (1-ALPHA) * event.values[0];
3 gravity[1] = ALPHA * gravity[1] + (1-ALPHA) * event.values[1];
4 gravity[2] = ALPHA * gravity[2] + (1-ALPHA) * event.values[2];filteredValues[0] = event.values[0] - gravity[0];
5 filteredValues[1] = event.values[1] - gravity[1];
6 filteredValues[2] = event.values[2] - gravity[2];
7 }简单移动平均线
保留传感器数据流中*近的K个数据,返回它们的平均值。k表示平均“窗口”的大小;
实现代码如下:
1 public class MovingAverage{2 private float circularBuffer[]; //保存传感器*近的K个数据3 private float avg; //返回到传感器平均值4 private float sum; //数值中传感器数据的和5 private float circularIndex; //传感器数据数组节点位置6 private int count;public MovingAverage(int k){7 circularBuffer = new float[k];8 count= 0;9 circularIndex = 0;10 avg = 0;11 sum = 0;12 }13 public float getValue(){14 return arg;15 }16 public long getCount(){17 return count;18 }19 private void primeBuffer(float val){20 for(int i=0;i<circularbuffer.length;++i){21 circularBuffer[i] = val;22 sum += val;23 }24 }25 private int nextIndex(int curIndex){26 if(curIndex + 1 >= circularBuffer.length){27 return 0;28 }29 return curIndex + 1;30 }31 public void pushValue(float x){32 if(0 == count++){33 primeBuffer(x);34 }35 float lastValue = circularBuffer[circularIndex];36 circularBuffer[circularIndex] = x; //更新窗口中传感器数据37 sum -= lastValue; //更新窗口中传感器数据和38 sum += x;39 avg = sum / circularBuffer.length; //计算得传感器平均值40 circularIndex = nextIndex(circularIndex);41 }
- 下一篇:光纤传感器的优势
- 上一篇:微波传感器的工作原理和应用