加速度传感器的计步算法Pedometer
加速度传感器的计步算法Pedometer
1.前言
最近要使用到计步,查了很多资料,以下是一个简易的计步算法,也能检测跳跃
2.工具
一个实时绘制Android加速度的APP
3.内容
Android的加速传感器的介绍
Android上的加速度传感器的方向如下所示(当你面朝手机屏幕观察),这是一个右手坐标系。因此加速度是由三个正交的向量组成的,例如当你平放手机在桌子上屏幕朝上,此时应为(0,0,9.6左右)使用g-sensor对数据进行分析
打开这个工具后进行走路和跳跃,然后导出数据,以时间为横轴画出折线图
我们多实验几组实验后会发现,当手机以不同的姿态放入口袋然后进行运动时,xyz三轴的数据是不确定的,但是三者矢量和的模却是有规律的(其实真正的加速度被正交分解了),因此我们接下来应该分析的是它们的模|V|
上图中可以知道,每次走路都会产生一个波峰和波谷,而跳跃的振幅相对大一些。因此判断行走只需判断波峰波谷就行数据处理
不妨记第i个时间单位获取到的加速度的三个矢量和的模大小为xix_ixi,为了使数据更加平滑,分别使用两次的指数滤波(EMA)
{ai=(1−p1)ai−1+p1xibi=(1−p2)bi−1+p2xia0=b0=x0p1>p2\left\{ \begin{aligned} a_{i}&=(1-p_1)a_{i-1}+p_{1}x_{i}\\ b_{i}&=(1-p_2)b_{i-1}+p_{2}x_{i}\\ a_{0}&=b_{0}=x_{0}\\ p_{1}&>p_{2}\\ \end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧aibia0p1=(1−p1)ai−1+p1xi=(1−p2)bi−1+p2xi=b0=x0>p2
其中aia_iai是拟合曲线,bib_ibi均值,因此Δh=ai−bi{\Delta{h}=a_i-b_i}Δh=ai−bi即波峰波谷的高度差,得到Δh{\Delta{h}}Δh后再跟设置好的k1,k2,k3{k_1,k_2,k_3}k1,k2,k3比较(其中k1>k2>k3{k_1>k_2>k_3}k1>k2>k3)。判别结果如下,
{jump,Δh>k1walking,Δh>k2standing,Δh<k3\left\{ \begin{aligned} &jump,\Delta{h}>k_1\\ &walking,\Delta{h}>k_2\\ &standing,\Delta{h}<k_3\\ \end{aligned} \right. ⎩⎪⎨⎪⎧jump,Δh>k1walking,Δh>k2standing,Δh<k3
需要注意的是.一旦检测到跳跃或者行走,就得有计时器计时,当经过Δt\Delta tΔt后再进行判别,因为人走路和跳跃是需要时间的!!!
其中p1,p2,k1,k2,k3,Δt{p_{1},p_{2},k_1,k_2,k_3,\Delta t}p1,p2,k1,k2,k3,Δt都是需要我们设置的参数,下面分享一组手调测出来的参数QAQ,不一定最优但能行。。。
{p1=0.2p2=0.002k1=0.25k2=0.13k3=0.008Δt=2s\left\{ \begin{aligned} p_1&=0.2\\ p_2&=0.002\\ k_1&=0.25\\ k_2&=0.13\\ k_3&=0.008\\ \Delta t&=2s \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧p1p2k1k2k3Δt=0.2=0.002=0.25=0.13=0.008=2s
上图是带入这些参数得到的曲线,我们可以看到经过p1p_1p1参数的滤波得到的曲线(红色),已经大致拟合原数据(蓝色),而经过p2p_2p2参数得到的曲线(绿色)大致为均值,要说一下的是其实绿线的值大致在9.8附近,就是重力加速度,为什么不直接采用9.8的原因是实际会有误差。
至于为什么会选EMA,简单有效!我们其实可以发现其公式可以用线性插值函数快速实现,虽然没人说,但我觉得在很多时候我们平滑移动物体和相机用到这个插值基于的原理就是这个,在每帧不断迭代才产生了平滑。
aia_iai=Mathf.Lerp(ai−1a_{i-1}ai−1,xix_ixi,p1p_1p1)=ai−1+(1−p1)xi=(1−p1)ai−1+p1xia_{i-1}+(1-p_1)x_i=(1-p_1)a_{i-1}+p_1x_iai−1+(1−p1)xi=(1−p1)ai−1+p1xi
3.实现
Unity下的实现
加速度传感器的计步算法Pedometer相关推荐
- 基于三轴加速度传感器的计步算法
基于三轴加速度传感器计步算法 By Sky.J 2018.08.08 概述 今天主要是想要分享利用三轴加速度传感器计步的一个算法步骤. 数据分析--->模型 这里拿到的是ADI公司的测试数据,可 ...
- 依据MPU6050角速度原始数据的计步算法
首先我要吐槽一下InvenSense的DMP,很坑.没有什么特别需求的话,不要往nRF52832上移植,吃力不讨好. 一.简介 依据MPU6050的角速度原始数据计算佩戴者步数,由于依据的是角速度,只 ...
- android 加速度传感器测步数,基于加速度传感器的运动步数检测算法研究
基于加速度传感器的运动步数检测算法研究 为解决人体运动过程中手腕摆动对步数检测干扰的影响,提出了一种区域峰值步数检测算法.该算法根据人体运动时的加速度信号特征,使用高斯滤波去除噪声对加速度信号的影响, ...
- 基于AT89C51 上MPU60506轴加速度传感器计步功能实现
~~ 本项目 为大学小学期实践项目.参考了大量资料. 分以下部分进行讲解 用户需求 此次项目需求为,通过将mpu60506轴加速传感器电焊到at89c51上,将传感器的获得数据显示到我们LCD1602 ...
- 【翻译】利用加速度求解位置的算法——三轴传感器
cposture 一个小白的技术成长之路 [翻译]利用加速度求解位置的算法--三轴传感器 http://www.cnblogs.com/cposture/p/4378922.html 摘要 ...
- 利用加速度求解位置的算法——三轴传感器
转载的一篇文章,跟自己做过的一个车载项目类似,也算是标记一下吧. ---------------------------------------分割线------------------------- ...
- 低通滤波算法在加速度传感器应用中的作用
在现代系统中,加速度传感器越来越多的应用到系统中,在很多应用中需要考虑加速度传感器是不稳定性,用数字低通滤波技术可以过滤掉一些杂波,将有特征的加速度变化趋势提现出来.有着十分广泛的应用.如在计步器,移 ...
- c语言 计步算法,基于51单片机的计步器设计
基于51单片机的计步器设计(任务书,开题报告,外文翻译,论文15000字) 摘 要 随着科技发展和国民健康意识的提高,许多检测健康状态的电子产品开始普及.电子计步器作为一种越来越流行的平民锻炼检测装 ...
- 智能手机计步算法c语言实现,【转载】智能手机计步器算法的实现
现 在的智能手机嵌入了一些微小的传感器,比如重力传感器.光传感器.声音传感器等.如何有效地利用这些传感器来开发一些应用,是一个值得深入研究的课题.比 如开发医疗健康的应用.运动量监视器等.本文采用ht ...
最新文章
- 句法分析常用算法框架以及NLPIR、Dependency Viwer
- 动态匹配路由的基本用法||路由组件传递参数
- 电容屏:为什么带手套无法进行操作手机?
- MyCat好的博文收集
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- [转]计算机学习道路
- 系统页面升级系统中_中交出行通勤班线系统全新升级!页面亮点功能说明
- html加载js文件失败,firefox/chrome动态设置script加载js文件失败
- linux 运行.net 5,.NET 5 将于2020年问世
- hackerrank Java Data Structures
- camscanner(扫描全能王)功能解析与复现
- SC 防火墙防DOS工具机制
- java 成员变量 默认_为什么Java成员变量有默认值,而非成员变量没有?
- 25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!...
- uni-app 输入框类型
- 串口调试助手使用说明
- linux 目录 问号 原因,linux – 如何修复所有问号作为权限的目录
- java poi 读取 word图片_Java Poi 根据文字内容 插入 word 图片-Go语言中文社区
- saltstack-本地安装rpm方式
- Linux进程隐藏问题————显示隐藏进程