原文地址:【转载】智能手机计步器算法的实现 作者:yangyon17

【转自】http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html

现 在的智能手机嵌入了一些微小的传感器,比如重力传感器、光传感器、声音传感器等。如何有效地利用这些传感器来开发一些应用,是一个值得深入研究的课题。比 如开发医疗健康的应用、运动量监视器等。本文采用htc Touch Pro 智能手机的重力传感器来开发一款监视步数的程序,程序的关键在于计步模型的建立。由于程序算法还存在一定的问题,在本文最后的“存在问题”给出。如有问题请不吝指出。

智能手机

所 谓的智能手机是指,具有独立的操作系统,用户可以自行安装第三方应用软件,通过此类程序来对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接 入的手机,它实际上就是一台迷你的个人电脑。智能手机的操作系统主要有:Windows Mobile, iPhone, BlackBerry, Linux等。

步数识别系统

步数识别系统是指运行在移动手机上,能够监视用户走了多少步的应用程序。它一般由以下3个部分构成:

· 传感器模块,用来采集传感器数据;

· 特征提取模块,处理和分析原始数据,并进行特征提取、建立模型;

· 步数识别模块,把所提取的特征用来识别步数。

硬件设备

重 力传感器(G-Sensor)又称为加速度传感器,用来感知加速度的变化,它使用三维方向的加速度分量来表示。G-Sensor被用在很多智能设备当中, 比如IBM的高端笔记本电脑内置了G-Sensor,在发生剧烈的拉动时(如跌落),立即启动硬盘保护,避免硬盘损害。再如Apple 的 iPhone 使用G-Sensor来感知手机屏幕的方向,当在观看视频时手机横放,屏幕自动跟着旋转,这使得用户体验大大增加。本文采用htc Touch Pro手机上的G-Sensor,同样也适用于htc 其它型号的G-Sensor。

方案实现

日 常生活当中,人们使用手机一般是拿在手上,放在裤兜里,女士也经常把它放在包里。因为手机外界环境总是很复杂的,裤兜有松有紧,放在松裤兜的手机比放在紧 的更容易抖动,产生的噪音也更多。为了使该算法尽可能的适用于不同的应用环境,需要对大部分的使用环境进行测试。首先,由4个人(8个或更多也可以)各自 对不同手机使用环境进行数据收集,因为人们在同样的场合使用手机的习惯是不一样的。其次,对采集来的这些数据分别进行特征提取。最后,使用提取的特征模型 进行识别检验。

数据采集

htc Touch Pro G-Sensor提供的数据如表1所示。

表1. htc Touch Pro G-Sensor 提供的数据

字段

含义

X

加速度在手机坐标X方向的分量大小,类型为 double

Y

加速度在手机坐标Y方向的分量大小,类型为double

Z

加速度在手机坐标Y方向的分量大小,类型为double

Length

加速度大小,值为,类型为double

Xangle

加速度在手机坐标X方向的分量与地平面的夹角,范围为 -180°~180°,类型为 int

Yangle

加速度在手机坐标Y方向的分量与地平面的夹角,范围为 -180°~180°,类型为 int

DateTime

采样的时间,不是G-Sensor 提供的,为了方便算法计算保留采样的时间,类型为double

本 文算法采用的采样频率为20HZ,采样环境有:慢走、快走、跑步、骑自行车、坐的士、坐公交、坐电梯(上/下)、坐地铁、上下楼梯。其中,有走路的采集走 100 步的数据(慢走、快走等),不是走路的采集1分钟的数据。由于开始和结束的时候放置手机(放口袋、包里)会有一些波动,不是我们想要的,因此这两个时间段 的数据可以删去,或不考虑。手机放在口袋,收集的原始Length字段数据,在Excel 2007上绘制波形图如图1。横轴为每个采样点的索引,纵轴为Length值大小,也就是加速度大小,值在9.8附近变化。

图 1. Length字段波形图

特征提取

由于收集的数据包含有噪声,特别是在两个动作切换之间Length字段值的波动比较大,比如慢走和上楼梯的过程。这里使用快速傅里叶变换(FFT)来处理Length字段的数据,波形图如图2。纵轴已向下平移9.8。

图 2. 经过FFT处理的Length字段波形图

我 们发现上面经过FFT处理的波形表现出一定的规则,就是在一定的时间间格内总有一个波谷,我们称这个点为“踩点”(如图3中的1、2、3、4点),也就是 加速度最小的时刻(脚往下踩,手机相对有一个往下“掉”的过程)。另外,图3上A点也是波谷,但这一点是一个波动点,需要排除。所以踩点还必须小于一定的 值-Threshold。当脚抬起来的时候(“起点”),身体对手机的作用力会增大,加速度也增大。所以起点必须大于Threshold,大于 Threshold的都称为起点,因为我们只关心状态的变化。通常地,走路的时候步与步之间的有一定的时间间隔,走快些间隔小,走慢些间隔大。如果是跑的 话,人类的极限是1秒种跑5步,也就是1步0.2秒。从起点到踩点状态变化1次就是走了1步。所以,我们建立包含如下2个要素的模型M:

1. Length满足一定阀值,比如 –Threshold < Length < Threshold

2. 两个连续踩点的时间间隔必须在Timespan (200~2000毫秒)之内

图 3. 模型满足的条件

步数识别

我们把建立的模型用来检验在坐的士环境下所采集的数据,波形图如图4.

图 4. 用模型检验的士环境下的数据

我 们可以看到后面的一段时间是比较平稳的,前面有一些波动,这些波动导致了错误的识别,识别为走路。我们可以改进这个模型,增加一个约束条件:在监视了连续 k(比如3)个踩点后才开始计步,所以从图3上标号为4的点开始计步。这样的约束就可以把大部分的抖动给去掉。把最终的模型用来检验所采集的不同环境下的 数据得到的计步结果还是比较准确的。

存在问题

如 果拿着手机左右摇摆,采集的数据经过FFT 处理后的波形也符合上面的模型,但这并不是走路的状态,产生了错误的计步。直觉上认为这可以通过监视Xangle,Yangle 两个字段(在某一范围来回变化)来预防这种情况的发生。但使用htc G-Sensor采集的这两个字段的数据得到的效果并不好。

经验教训

以 上模型使用的数据只有Length字段,其它字段并没有用到。实际上,在决定只使用 Length 字段建立模型之前,有尝试使用Xangle,Yangle,并推导出Zangle(htc G-Sensor没有给出这个字段),使用这三个角度的状态变化来辅助判断计步。事实上这三个量的数值并不可靠,比如把手机水平放置,做左右摇摆,得到的 Xangle,Yangle 的范围变化有超过 30°的。另外,也可以尝试使用Samsung,iPhone 上的G-Sensor,但本文并没有实现该想法。

总结

使 用智能手机来计步这个课题比较新颖,而且很容易实现个人健康监视的手机助理。收集不同使用环境下的数据是一个比较耗时的过程,需要由不同的人员在不同的环 境下收集。整个计步的关键过程在于模型的建立,而且必须满足使用手机的任意性和处理不同环境下的噪声。所使用的算法也比较简单,用FFT 来处理原始数据,设立一定的阀值和时间间隔,然后监视过程的变化(踩点->起点->踩点)。其中采样率、Length阀值和时间间隔等参数的 设置也是需要一个一个调试的,在本文的程序里采样率为20HZ,Threshold取1,时间间隔在200~2000毫秒。

【转载】智能手机计步器算法…相关推荐

  1. 一种基于陀螺仪传感器的准确计步器算法

    一种基于陀螺仪传感器的准确计步器算法 A Gyroscope Based Accurate Pedometer Algorithm 作者:Sampath Jayalath.Nimsiri Abhaya ...

  2. 安卓学习之路---计步器算法

    关于网上找的一个算法的自己的一点理解 package cn.edu.hit.run.service;import android.content.Context; import android.har ...

  3. Android计步器算法实现(2)

    Android计步器算法实现(2) 前言 算法实现的意义 现实原因 优缺点 算法原理 运动状态判断 计步原理 步长计算原理 Java实现 补充 观测点的作用 数据的存放方式 前言 在之前我也写过两篇关 ...

  4. Android计步器算法实现

    最近在研究惯性导航和其他导航算法的融合,顺手把计步.步长等一堆算法写成类了,舒服~ 这篇文章我不会具体的讲解实现原理,有兴趣研究的朋友直接看我写的计步算法实现和步长计算. Android系统有自带的计 ...

  5. # Pedometer 计步器算法简介

    Pedometer 计步器算法简介 以Android 6.0 M 为例,它为Pedometer计步器(以下简称Pedo)提供了两颗虚拟传感器(以下用sensor):Step Counter和Step ...

  6. 智能手机计步算法c语言实现,【转载】智能手机计步器算法的实现

    现 在的智能手机嵌入了一些微小的传感器,比如重力传感器.光传感器.声音传感器等.如何有效地利用这些传感器来开发一些应用,是一个值得深入研究的课题.比 如开发医疗健康的应用.运动量监视器等.本文采用ht ...

  7. 对大量转载贴识别算法的研究

    要识别论坛中被大量转载的同一篇文章,初看起来不是一个很难的技术问题,只要生成所有文章的信息指纹,再将相同指纹分组就可以了.至于产生信息指纹的方式,最简单的是用MD5或者SHA等单向Hash函数,如果为 ...

  8. [转载]中国公历算法

    中国公历算法 中国公历算法不是太难,关键是星期值的确定.这里给出了简单算法: public static int dayOfWeek(int y, int m, int d) { int w = 1; ...

  9. 【转载】KMP算法详解

    如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢 这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句话说,给你两个 ...

最新文章

  1. 二维“有序”数组查找问题
  2. 人脸对齐端到端Super-FAN
  3. 农历法定日历_木瓜日历安卓版下载-木瓜日历V1.5下载
  4. tkinter中scale拖拉改变值控件(十一)
  5. java获取每月最后一天_java获取每月的最后一天实现方法
  6. 微软或将全资收购 GitHub,价格达 50 亿美元或更高
  7. 2022年C语言教程入门和最新C语言自学教程C语言进阶教程大全
  8. 华为交换机配置时区_把华为交换机设置成时钟源服务器(NTP)
  9. 考研高等数学张宇30讲笔记——第十一讲 多元函数微分学
  10. 咸鱼ZTMR实例—PS2手柄控制板载LED
  11. postman设置域名_Postman中文文档——设置
  12. PSSP Based on Data Partition and Semi-Random Subspace Method 论文笔记
  13. 手机信息通知标为已读实现原理_27条iPhone苹果(附iPhoneX)手机使用技巧,你用过多少条?...
  14. 利用开区间覆盖的约简给出有限覆盖定理的一个新证明
  15. 两个互质整数的线性组合问题
  16. asp.net房屋出租销售网
  17. 作业一:数据软件系统的介绍及spss的操作简介
  18. CCS:Type region `APP_CODE_MEM' overflowed by 641240 b
  19. SDUT 2504 多项式求和
  20. Chrome 扩展程序——Imagus:图片放大预览工具

热门文章

  1. 【转载】SpringMVC的工作原理
  2. 倍福工控机维修控制器主机维修C5102-0060
  3. 浅谈Python自带数据库SQLite3模块的使用(全面详细)
  4. hadoop大数据基础复习笔记-day1
  5. 地质员小哥转行IT:人生若波澜,世路有屈曲
  6. 三星i9300手机电池拆解分析
  7. html 数字自动换行,css怎么让连续数字字母强制换行?
  8. HTML练习之路10
  9. 桌面快捷方式的图片看不见了怎么办?
  10. 元宇宙,终产者的起点~