利用加速度传感器模糊检测设备被人为移动的算法

项目需要做一个安全装置盒,防止人为移动,破坏。选用一款数字式3轴加速度传感器,原思路是通过加速度传感器的3轴加速度值进行二次积分获取设备的移动位置,通过位置判断设备是否被移动;通过瞬时加速度值来判断设备是否为强力破坏;
经过测试发现加速度本身噪声很大,二次积分累计误差很大,重力加速度值会根据位置不同3轴有偏差等诸多问题,不得不根据实际情况进行简化模型,加速度进行10次平均滤波(采样时间为100ms);
将整个运动分成2种状态,稳定态与移动态,通过连续n次3个方向加速度微分值进行判断当前状态,假定n为5次判定,连续5次3个方向加速度微分值都小于设定阈值,则认为当前处于稳定状态,将最后一次加速度值作为当前重力加速度,随后进行重力加速度平均,若出现3个方向加速度微分值大于阈值,则当前处于移动态,使用以前重力加速度进行计算,开始进行两次积分,获取位置信息。
移动态时加速度与重力加速度进行比较,将两次变化小于3的值强制变成0,进一步滤掉微小误差。在人为移动装置时候很难出现人为匀速运动的情况,故在加速度为0的时候,将速度置为0。
最后根据位置变化输出设备被人为移动报警信息。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 
#include <string.h>
#include"libfahw.h"

#define BUF_SIZE            32
#define WEND_MAX            5
#define PWEND_MAX           5
#define WEND_CI             5
void stringtoxyz(char st[],int *a,int *b,int *c);
//基本思路 判断处于动态还是稳态 5次加速度值很接近表示稳态 稳态下累计计算g值 出现动态时以g值作为基本参考 计算二次积分 过程中计算稳态,稳态判定成功重新累计g值
//计算平均值时加速度
int ax2=0,ay2=0,az2=0;
//重力加速度
int gx=0,gy=0,gz=0;
//累计位置信息
int px=0,py=0,pz=0;
//累计速度信息
int vx=0,vy=0,vz=0;
//前一次加速度信息
int preax=0,preay=0,preaz=0
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值