人工智能常用的29种算法_传感器3种常用算法处理,请收藏!(含代码)

在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法:

1.加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响;

2.抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化;

3.简单移动平均线:保留数据流最近的K个数据,取平均值;

加权平滑,使用算法如下:

(新值) = (旧值)*(1 - a) + X * a其中a为设置的权值,X为最新数据,程序实现如下:

float ALPHA = 0.1f;public void onSensorChanged(SensorEvent event){x = event.values[0];y = event.values[1];z = event.values[2];mLowPassX = lowPass(x,mLowPassX);mLowPassY = lowPass(x,mLowPassY);mLowPassZ = lowPass(x,mLowPassZ);}private float lowPass(float current,float last){return last * (1.0f - ALPHA) + current * ALPHA;}

抽取突变采用上面加权平滑的逆算法

实现代码如下:

public void onSensorChanged(SensorEvent event){final float ALPHA = 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表示平均“窗口”的大小;

实现代码如下:

public class MovingAverage{private float circularBuffer[]; //保存传感器最近的K个数据private float avg; //返回到传感器平均值private float sum; //数值中传感器数据的和private float circularIndex; //传感器数据数组节点位置private int count;public MovingAverage(int k){circularBuffer = new float[k];count= 0;circularIndex = 0;avg = 0;sum = 0;}public float getValue(){return arg;}public long getCount(){return count;}private void primeBuffer(float val){for(int i=0;i circularBuffer[i] = val;sum += val;}}private int nextIndex(int curIndex){if(curIndex + 1 >= circularBuffer.length){return 0;}return curIndex + 1;}public void pushValue(float x){if(0 == count++){primeBuffer(x);}float lastValue = circularBuffer[circularIndex];circularBuffer[circularIndex] = x; //更新窗口中传感器数据sum -= lastValue; //更新窗口中传感器数据和sum += x;avg = sum / circularBuffer.length; //计算得传感器平均值circularIndex = nextIndex(circularIndex);}}
11edfc4c-6f20-eb11-8da9-e4434bdf6706.jpeg
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值