中国矿业大学(北京)机电学院 何澳来 韩雪倩 王春满 金昭明 李成昱 胡小红
针对生理电信号分析是实现人体疲劳状态监测最客观有效的途径。为此,本文通过对多名志愿者在不同疲劳状态下脉搏信号的检测,提取了时域和频域的多种特征值,并利用随机森林算法来检测和判断志愿者的疲劳状态。结果显示,脉搏可以较好的反映人体的疲劳状态,该研究的目的在于为基于生理电信号分析的疲劳检测提供新的研究思路和分析途径。
人们在经历长时间的劳动后会产生疲劳感。不同于身体机能运动导致的疲劳,只因过度用脑而产生的疲劳,定义为“精神性疲劳”。“精神性疲劳”会引发工作效率低,长期处于此状态还会导致内心焦虑、抑郁等一系列严重心理问题,而目前针对精神性疲劳的量化检测方法并不完善,需要有效的疲劳检测方法来判断人们的疲劳状态。
近些年,已有研究者证实过脉搏,心电,脑电等生理信号与疲劳程度息息相关并建立了相关数学模型。本文基于前人研究,结合脉搏信号受外界环境干扰小、易检测、与疲劳程度相关性较高等特点,选择使用脉搏信号来进行疲劳量化。量化方法使用生理参数测量法,对人体脉搏特征进行多层次时频域特征提取,并利用特征值通过随机森林算法进行疲劳分类。
选择健康的检测对象20名,男10名,女10名。所选志愿者均为壮年,且无心脑血管等疾病,脉波平稳。平均年龄为23.85岁。志愿者均为考研学习者、硕士和单位文事人员,平时工作主要为脑力劳动,并保证所测数据当日未进行过剧烈的体力活动。实验所用的仪器为光电式脉搏采样仪,扫描周期为200Hz,脉搏高度单位为mm汞柱。
采集前,志愿者先通过表格自测,通过志愿者主观的感受初步分类疲劳状态,以确定数据的可信性,表格使用11个形容词对身体状态进行描述,分别为“愉快—痛苦”、“欲睡—清醒”、“走神—精力集中”等。形容词对交叉分布。并将这些形容词对都分为 7 档,定义为“非常—比较—有点—无影响—有点—比较—非常”,并予以相应的分值。数据采集方法为志愿者安静地坐在椅子上,使用仪器的架夹子夹住食指或中指前端,测量实时脉搏,持续一分钟。
脉搏波信号在时域下的峰值,周期等特征与疲劳有较强的相关性。本项目主要通过MATLAB对脉波信号进行时域分析,可得到峰谷值、第二个脉搏峰值比例、周期等多组特征值进行研究。大体经过平滑滤波、取反取极值、提取等步骤。
2.1.1 脉搏波信号预处理
由于波形提取过程中的环境以及设备的自身干扰,原始波形存在较多的尖刺波导致图像不单调,影响了后续的波峰特征值提取,如图1所示。所以调用MATLAB的smoothdata函数中的高斯滤波进行平滑滤波处理,如图2所示。
即:smoothdata(d,'gaussian',10);其中d为数据,'gaussian'为高斯滤波器。10为数据窗口。
图1 滤波前的脉波信号
图2 滤波后的脉波信号
2.1.2 提取第二个波峰值及周期
洋桔梗适合的土壤EC值为1.0~1.3[1]。栽苗后第10 d可施第1次肥,以浓度约为0.1%~0.2%的高磷肥为主,以促进植株根系的生长;生长前期主要施用高N肥,如N∶P∶K=30∶10∶10的水溶肥促进叶片、茎秆生长;在中期每隔10 d左右施用1次平衡肥,如N∶P∶K=20∶20∶20的水溶肥或N∶P∶K=17∶17∶17的复合肥;大约定植后50 d生长到第7节位时,进入花蕾期要施高钾肥,如K2SO4;中后期土壤施肥的同时要结合叶面肥,如KH2PO4喷施,每隔7 d喷1次。在花芽形成前随着苗正常生长而慢慢上调肥料EC值。
本文在峰值提取过程中主要利用的是MATLAB里面的findpeaks函数组成的特征值提取算法,该特征提取算法有较高的准确性,可以快速有效的提取相关时域特征。
即:[maxv,maxl]=findpeaks(d,'minpeakdistance',60)
其中d为所要处理的波形,60为两个峰值之间间隔的最小距离,提取后的峰值点坐标保存在[maxv,maxl]中。
将保存到输出矩阵里的波峰特征值导出,分别提取出第一个波峰(高)和第二个波峰(低),并通过波谷与第二个波峰的横坐标之差乘以采样周期,即可获得第二个波的周期。
此特征值是用matlab的快速傅里叶变换得到频域下的图像,通过程序找到第二个峰值对应的频率并读出。因为在不同疲劳程度下频域下的第二峰值有所不同,故取其为特征值。快速傅里叶变换及作图,如图3所示。
图3 频域下的第二峰值傅里叶变换图
峭度是反映随机变量分布特性的数值统计量,是4阶累积量。有正常峰度(即零峭度)、正峭度和负峭度之分。
裕度是统计学术语,指留有一定余地的程度,允许有一定的误差。公差裕度是根据统计的对象和范围来规定的。如:噪音裕度、相位裕度、安全裕度等。
对比于其它算法,支持向量机的样本大规模训练难以实施;神经网络有黑盒子性质,数据量大,开发时间长。而随机森林算法具有很好的准确率,能够处理多维特征的样本而不需要降维,能够评估各个特征在分类问题上的重要性,对于缺省值问题也能够获得很好得结果。综上,选用随机森林算法进行机器学习较为适宜。
首先对得到的数据进行预处理,将存在明显数量级错误的数据视为噪声,统一置为0。然后使用sklearn库建立随机森林对象,训练模型。最后用十折交叉验证的方式评估模型的置信度,并显示出每个特征值训练出的权重,其中权重值高的为与疲劳度最相关的特征值。
(1)由于树的个数不宜太多,也不宜太少。经过多次实验分析结果,认为选择31棵最合适。
(2)在实验中,我们采用了固定的random_state(随机种子),可以保证程序每次运行都分割一样的训练集和测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。
(3)由于随机森林中的树个数过多时会浪费掉约37%的训练数据(袋外数据,oob),它们不参与建模。于是我们就使用这些数据作为测试集,这样大大提高了数据的利用率。
在对参数进行优化之后,相同样本下的置信度从87%提高至90.63%。
实验首先测量了100余组数据进行10折交叉验证测试,在交叉验证时我们测量出它的置信度超过90%,并分析出与结果关系最密切的特征值为频域第二个波峰特征值,几乎是其他特征值相关度的2倍。我们又测量了38组数据,对这100组数据训练出的模型进行测试,正确率高达100%。综上,实验结果置信度较高,验证本文的疲劳检测结果有效整个实验程序的流程图如图4所示:
图4 算法流程图
结论:本文通过采集20个脑力劳动者的200余组脉搏波信号,利用数据处理软件进行信号滤波去噪处理,并提取出可用的特征值,基于这些特征值训练出随机森林模型进行疲劳评估,在十折交叉验证下置信度高达90%,这个结果表明了在上述参数下训练出的模型可以有效地实现疲劳检测,不过在本文的研究中仅仅使用了20名志愿者的数据作为疲劳检测的原始数据,数据量来源比较单一。由于不同人的生理特征可能影响脉搏,脉搏波形的个体差异会不会影响疲劳检测系统的训练效果,这个问题值得探讨。在未来的研究中,可以增加数据来源,同时针对更多的场景进行研究,避免此类影响。