当前位置:文档之家› 人体微幅运动信号感知系统设计

人体微幅运动信号感知系统设计

人体微幅运动信号感知系统设计通信工程专业曹宇指导教师王嵩讲师摘要近年来,随着集成电路和传感器的迅速发展,可穿戴设备正逐步融入人们日常生活和工作中。

本文基于开源硬件平台Arduino自主开发一个可穿戴设备,以三轴模拟加速度传感器捕捉人“咬牙”动作并实时记录数据,通过系统信号处理单元分析动作信号特征,输出表示动作有无的‘1’、‘0’布尔值,驱动蜂鸣器鸣响作为动作响应。

本系统实现了快速准确感知人体的布尔动作,其设计原理可用于控制MP3、手机、智能眼镜、蓝牙耳机等可穿戴电子设备。

关键词开源硬件,加速度传感器,信号特征分析,可穿戴设备1 前言1.1研究背景与意义穿戴式智能设备拥有多年的发展历史,思想和雏形在20世纪60年代即已出现,而具备智能可穿戴形态的设备则于上世纪70-80年代出现。

史蒂夫•曼基于Apple-II 6502型计算机研制的可穿戴计算机原型即是其中的代表。

随着计算机软硬件的标准化以及互联网技术的高速发展,可穿戴式智能设备的形态开始变得多样化,逐渐在工业、医疗、军事、教育、娱乐等诸多领域表现出重要的研究价值和应用潜力。

穿戴式智能设备的本意,是探索人与科技的全新交互方式,为每一个人提供专属的、个性化的服务,在个人随身移动设备上形成独一无二的专属数据计算结果。

现在,穿戴式智能设备已经从幻想走进现实,它们的出现必将深刻改变现代人的生活方式。

1.2灵感来源本文作品的灵感来源于智能手环的记步功能,智能手环内嵌的加速度传感器扑捉手的动作轨迹,通过模式识别技术辨识具有特定特征的动作信号。

由此类推,监测人类的各种动作,并且通过数据分析,能赋予动作相关联的内容。

例如,通过检测每日颈椎、下肢、手腕的活动量来预测由于活动量少而导致的关节疾病。

由于人体在行动时往往具有明显的前后动作关联性,所以我们可以通过探测前一动作来预测其后的意图,从而辅助生成下一个动作想要的结果。

例如,当人想通过腕表看时间时,通常会先将胳臂抬起并略微晃动手腕。

如果将这个动作捕捉,便可探测出用户的意图,从而预先将电子表点亮激活。

这样就增强了体验,省去了用户不必要的动作[1,2]。

作者旨在自主开发一款可穿戴设备,通过咬牙来控制电子设备,从而达到方便人类与电子设备交互的目的。

2平台搭建与算法2.1实验材料2.1.1实验设备本课题使用的实验设备和材料有:Arduino UNO开源电子原型开发板一个、入耳式耳机一个、GY-61 ADXL335三轴模拟加速度传感器模块一个、蜂鸣器一个、导线若干。

2.1.2 模块介绍Arduino UNO 开发板:Arduino UNO[3]为Arduino USB接口系列的最新版本,是Arduino平台的参考标准模板。

UNO的处理器核心是ATmega328,具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器。

图1为模块实物图。

GY-61 ADXL335三轴模拟加速度传感器模块:ADXL335是一款小尺寸、薄型、低功耗、完整的三轴加速度计,提供对应三轴的三端口电压输出,能以最小±3g的满量程范围测量加速度。

它可以测量倾斜检测应用中的静态重力加速度,以及运动、冲击或振动导致的动态加速度[4]。

图2为模块实物图。

图1 Arduino UNO开发板图2 GY-61ADXL335模拟加速度传感器模块2.2 平台搭建本课题设计的系统硬件、软件原理如图3、图4所示:图3 系统硬件框图图4 系统程序框图2.3 动作捕捉与信号采样人下颌咬合时,从闭合状态开始,执行以下步骤:咬肌放松,释放下颌骨,而后立即收紧咬肌带动颌骨向上贴合,从而完成一次咬合动作。

本文作者发现,当咬肌放松、颌骨下落时,靠耳的颌骨末端会上顶耳道外部,导致外耳道发生形变。

当带上入耳式耳机时,耳机会因耳道形变向外略微移位并在咬合时还原。

为此,作者在入耳式耳机的外壳上锯出一条凹槽,将加速度传感器嵌入到凹槽中,并用速干胶填充凹槽使传感器与耳机固定成一个整体,从而确保二者之间不发生相对位移。

这一设计巧妙实现了咬合动作到电子控制信号的转化,完成了对下颌动作的捕捉[5,6,7]。

本文作者使用Arduino UNO 内部的模数转换器(ADC )对加速度数据采样,采样数据存储于flush 缓存中以便做后续信号处理。

2.3.1 采样率设定由于难以准确测量单次咬合的执行周期,本文采用对连续动作的持续时间求平均的方法来计量单次动作的执行时间。

记录连续10次咬合的时间为1次测量,计为T ,测量3次。

同时,为减小数据偏差,实验邀请了不同年龄段的两位男性、一位女性作为测试对象。

因此,单次咬合动作执行时间τ按下式估计:31231()33p p p p T T T τ=++=∑ (1) 式中,{}31pi i T =表示第p 位参试者的3次测量时间。

测量结果表明,人1次咬合的平均时间为450ms 。

所以,根据奈奎斯特采样定理,设定ADC 的采样率()10/4501000≥⨯Hz 。

2.3.2 采样数据分帧数据按帧处理,根据奈奎斯特定理和实测数据发现,每帧50个样点即能完整包含1次咬合信号周期。

虽然以帧间不重叠的方式处理信号,能有效降低MCU的计算负担,但是如果咬合冲击峰横跨相邻两帧的话(这种情况在实际测试中并不多见),将可能导致算法误判。

为降低误判率,本文作者使用帧间叠接半帧(25个样点)的方式确保被截断峰完整出现在下一帧数据中。

图5所示为叠接的帧结构。

在程序设计中,使用3个数组分别存储3个垂直轴(X、Y、Z)向上的加速度数据。

实验发现,咬合动作在Y轴(即横贯双耳的方向)方向上加速度变化明显。

为此,对Y轴上的加速度信号使用长度为50个元素的数组,而对X(正前方)、Z(头顶上方)两轴数据使用长度为25的数组,以辅助滤除噪声[8,9]。

图5 叠接帧示意图图6 标准的两次咬合信号2.3.3 采样数据可视化本文作者使用开源的轻量级串口数据可视化软件Serial Chart来对串口传输的加速度数据进行显示以便调试程序[10]。

Serial Chart为Arduino常用的串口调试软件,类似的数据可视化软件有很多,如功能强大的Processing[11]。

Serial Chart绘制的两次标准咬合波形如图6所示。

2.4 咬合动作感知算法2.4.1 消震算法人体的剧烈动作,如骑车时路面不平导致的人体震荡、猛然回头导致头部抖动等都会对检测算法造成干扰[12]。

本文作者发现,人体在做这些动作时,Y轴数组所存储的相邻数据之差比咬合动作所产生的相邻数据之差大得多。

为避免这些干扰影响准确率(定义见3.2节),作者将Y轴的50个数据两两比较,若相邻两数据的差的绝对值大于2(该阈值为经验值),则判定为非咬合信号,返回false。

若不大于2,返回true。

以下是消震算法代码:for (int i = 0; i < 48; i++) { // 遍历arrayYif ( abs(arrayY[i] - arrayY[i + 1]) > 2) {// 判断相邻两元素之差return (false);}}实测表明,该消震算法能显著提高准确率,并能有效减少MCU运算负担。

2.4.2 限幅算法限幅算法是为了滤除动作幅度相对较大的干扰信号。

人站起或坐下所引起的失重或超重现象、左右摇头、横向移动等动作都会使Y轴数据大幅度震荡[13],为此,笔者采用判断Y轴数组中最大值与最小值之差,并判断其是否介于[3,11](该阈值为经验值)的方式来滤除幅度较大的动作带来的噪声。

另外,作者还加入了一个初值为0的计数器变量[14],当人体相对地面静止250毫秒后将计数器加1,当人体相对地面大幅度运动时,计数器减1。

一旦计数器大于4则认为人体处于相对稳定的状态,这时才开始判定,否则认为人体没有控制信号发出。

同时,为防止其计数过大或过小,计数器还实现了复位功能,若计数器小于2则令其等于2,若计数器大于7则令其等于7。

2.4.3 选峰算法信号时域波形中呈现尖刺状的连续区域称为峰,若将数据存放于数组中并顺序打印出来,即可直观地看到数组中存在某一个或多个元素,其幅值大于等于两侧元素的幅值。

人下颌咬合一次会形成两个或两个以上的“峰”形的电信号,检测信号中的峰就等于在判断前一刻是否出现了一次咬合,这是选峰算法要完成的功能,如下是其代码片段:boolean judgeThePeak() {for (int i = 3; i < 46; i++) {if ((arrayY[i] >= arrayY[i + 1]) &&(arrayY[i + 1] > arrayY[i + 2]) &&(arrayY[i] > arrayY[i + 3]) &&(arrayY[i] >= arrayY[i - 1]) &&(arrayY[i - 1] > arrayY[i - 2]) &&(arrayY[i] > arrayY[i - 3]) &&(arrayY[i] > arrayY[i + 4])) number++; //峰数量累加}if(number > 1){ // 如果大于1就初始化为0,以便继续使用number = 0; return (true);} else{number = 0; return (false);}}2.4.4 方差预处理咬合准确是基于处理Y轴数据而得,但若每次都对Y轴数据作完整处理,而无预处理的话,将不仅增加MCU的运算负荷,还要额外增加其不必要的功耗。

实验发现,如果人在X、Z轴向上产生动作信号,那么该方向上的信号方差必会较平稳时大。

而剧。

相关主题