刘众 王新安 李秋平 赵天夏
1. 北京大学深圳研究生院集成微系统科学与工程应用实验室, 深圳 518055; 2. 北京大学信息科学技术学院,北京 100871; † 通信作者, E-mail: anxinwang@pku.edu.cn
睡眠是人类日常基本行为之一, 睡眠质量的好坏是判断人体健康状况的重要指标。睡眠不佳容易引起日常生活规律紊乱, 甚至可能带来疾病的困扰[1]。医院通常采用多导睡眠仪[2–3]检测睡眠质量,被检测人员的头部、胸部和手脚等区域需要贴满电极, 记录脑电信号、眼动信号和肌电信号等, 操作复杂, 人工成本高, 并且严重影响被检测人员的正常睡眠。实际上, 大部分情况下, 人们只希望了解大致的睡眠状况。因此, 需要一种既方便, 准确率又高的方法判断睡眠状态。
通过分析 ECG (Electrocardiogram)信号, 能够获得睡眠过程中心率变异性的变化情况。心率变异性(heart rate variability, HRV)与人体的自主神经活动关联比较紧密, 其高频段(HF)通常反映副交感神经的活性, 低频段(LF)同时受交感神经与副交感神经系统的调控[4–5]。在睡眠过程中, 交感神经平静下来, 副交感神经变得活跃。因此, 心率变异性能够较好地呈现类似脑电波的周期性变化[6]。Yilmaz等[7]通过提取 ECG 信号特征, 采用贝叶斯分类器,获得较好的分类结果, 但对清醒状态的识别准确率偏低。
除副交感神经表现活跃外, 人类睡眠过程中的体动状况此觉醒期少得多, 尤其是周期性腿动信号和翻身信号的差异比较显著[8]。在不同的睡眠阶段,周期性腿动的特征有明显差异, 其相对频率、持续时间和引起觉醒的效应都随睡眠逐渐加深而下降,而腿动的间隔时间增加。快速眼动期的腿动持续时间最短, 间隔时间最长[9–10]。因此, 利用体动特征可以研究人的睡眠和觉醒情况。de Chazal 等[11]通过提取体动信号特征, 采用经验判断, 能较好地区分清醒和睡眠状态, 但对睡眠状态各阶段的区分较为模糊。
本文采用多导睡眠仪和体动记录仪, 分别记录ECG 信号和体动信号。通过提取相应的特征信号,判断睡眠的阶段。由于需要实现便携式睡眠质量诊断, 而 BP 神经网络计算量小, 可行性高, 鲁棒性强[12], 因此本文使用改进的 BP 神经网络算法, 进行全自动睡眠分期识别。利用实验获取的睡眠分期标签, 设计神经网络算法。根据睡眠过程中心电信号, 和体动信号提取 HRV 和体动特征值, 结合遗传算法进行网络训练。最后, 用训练好的神经网络对睡眠进行分期, 与实际检测结果进行比较。
ECG 信号记录心脏每一次心动周期产生的电活动变化图形, 每一段心电图波段具有相应的心电活动意义, P 波代表心房除极, PR 间期代表房室传导时间, QRS 波群代表心室除极, ST 段代表心室除极完成, T 波代表心室复极化, QT 间期代表心室除极到完全复极的时间[13]。
除心脏本身节律性放电引发的跳动外, 心跳也受自律神经系统调控。Lotti[14]的研究结果表明, 自律神经系统的调控与心血管疾病(如心因性猝死、高血压、出血性休克和败血性休克等)相关的死亡率有显著的关系。
心率变异性代表逐次心跳搏动间期之间的微小变异特性, 可以作为预测心肌梗塞的重要指标[15]。通常将心率变异性的频域特征划分为 3 个部分: 超低频 VLF (<0.04 Hz)、低频段LF (0.04~0.15 Hz)和高频段 HF (0.15~0.4 Hz)。每个频段都具有相应的生理意义, 尤其是低频段 LF 和高频段 HF。低频段LF 同时反映交感神经和副交感神经的活跃程度,高频段 HF 主要反映副交感神经的活跃程度[16]。白天人体活动时交感神经活跃, 晚上睡觉时副交感神经活跃。高频段 HF 和低频段 LF 在一定程度上可以反映睡眠状况。
本文采用多导睡眠仪(S2000, 采样频率为 200 Hz)记录被试睡眠期间的 ECG 信号, 然后对其进行去除噪声处理。图 1 为 PSG 记录的心电信号数据。采用 MATLAB 软件对心电信号进行计算, 获得HRV 频域特征。通过离散傅里叶变换, 将心跳间隔的时间序列转换为频域, 获得频谱分布图, 进而得到高频段特征 HF、低频段特征 LF 以及二者的比值(LF/HF)。
图1 ECG 信号波形Fig. 1 ECG signal waveform
本文采用体动记录仪 ActiGraph GT3X+记录实验人员的体动数值(图 2), 然后对数据进行去除噪声处理。
图2 体动信号变化Fig. 2 Body movement signal variation diagram
神经网络模型是一种抽象的, 参考人脑结构的数学模型, 从现代神经科学中产生并发展起来。神经网络模型的应用非常广泛, 可以应用在规律比较复杂的分类与预测问题中。BP 神经网络是其中一种比较成熟的使用广泛的模型[17]。BP 神经网络模型通常由输入层、隐含层和输出层组成, 可以完成任意n维到m维的映射, 进而实现复杂繁琐的识别与分类功能。
BP 神经网络模型能够将具有不同特征的样本分类成预先标定的类别。为了提升模型的准确度,通常需要将样本划分为训练集和验证集。通过输入训练集, 让 BP 神经网络进行学习, 根据输出结果与期望值的差异, 反向传播调整网络的权重值, 进而对 BP 神经网络进行新一轮训练, 直到训练结果达到预先误差范围内或到预先设定的重复学习次数[18]。最终, 可以得到一个成熟的神经网络模型,通过验证集来判断模型的好坏以及是否需要进一步调整。
设每一个样本为p, 样本误差准则函数Ep[19]为
那么, 系统的总误差准则函数E[19]为
在 BP 神经网络训练过程中, 反向传播是关键的一步。根据输出层的输出结果与预期值的差异,反向逐层计算每一层神经网络中神经元的输出误差, 再根据梯度下降法, 计算每一层新的权重值和阈值。然后, 根据新的权重值和阈值, 重新计算新一轮的输出值, 实现更新后的神经网络计算结果与期望值更加接近[20]。
为了避免陷入局部最优解, 在原来 BP 神经网络的基础上引入遗传算法。遗传算法是先将现实问题进行编码表示, 模拟生物学种群繁殖的概念, 通过交叉变异, 将种群迭代进化, 获得最适应的群体,即现实问题的最优解[21]。图 3 为遗传算法–BP 神经网络的流程。
图3 遗传算法–改进的BP 神经网络流程Fig. 3 GA–impoved BP neural network flow
遗传算法的核心是选择算子、交叉算子和变异算子。选择算子的传统方法是通过轮盘进行选择,即把所有的个体累计, 根据个体的相对适应度进行选择。本文结合数据特点, 优先将选择算子中适应度低的个体直接淘汰, 不参与轮盘选择, 既能避免劣势个体对下一代种群的污染, 也可以提高遗传算法的收敛速度。交叉算子通过亲代个体交叉互换基因, 繁衍出下一代个体。本文在交叉计算前, 优先判断亲代的基因特性, 并且复制保留最优个体, 避免交叉后优良基因被破坏。传统的变异算子中, 变异的概率值为常数[22]。本文结合变异前后种群的优良程度, 动态地调整变异概率。如果种群整体上比较平稳, 则适当加大变异概率; 如果种群差异较大,则适当降低变异概率。
本研究选择 20 名被试(年龄为 18~50 岁, 男女各 10 名)参与实验。实验当天, 采集被试当晚睡眠过程中的睡眠分期状况数据。实验前, 需要准备体动记录检测仪和多导睡眠仪, 并将仪器电极贴在被试对应部位, 体动记录检测仪则佩戴在受试者手腕上。实验同步记录被试夜晚睡眠时的心电图谱和体动状况信号。实验分为 10 组进行采集, 每组两个被试, 在尽可能不影响正常作息习惯情况下采集相关数据。实验测试环境如图 4 所示。
图4 实验测试环境Fig. 4 Experimental environment
根据采集到的心电图数据, 用 Kubios 软件对心冲击信号进行时域和频域分析, 获得 HRV 信号的时域和频域特征。通过频域转换, 计算心率变异性的低频 LF 和高频 HF 特征, 进一步计算二者的比例。由于采集到的体动信号分为X轴、Y轴和Z轴3 个方向的分量, 需要汇总为体动总值。在数据处理前, 需要对体动分量数据进行滤波, 避免噪音干扰和基线漂移对数据准确度的影响。同时, 采用多导睡眠仪 PSG 采集被试人员的睡眠状态, 作为实验计算的对照结果。部分样本特征数据如图 5 所示。
图5 部分样本特征值Fig. 5 Partial sample eigenvalue
完成数据预处理后随机分组, 其中 16 例为训练数据, 4 例为测试数据。由于数据样本有限, 本文对 16 例训练数据进行交叉验证, 以便优化网络结构。通过改进的神经网络进行训练和验证, 识别睡眠和觉醒阶段的不同状况。
根据特征数据和预期目标, 我们设计一个 3 层BP 神经网络进行训练和学习。网络结构如图 6 所示。输入层为睡眠期间检测到的生理信号特征, 隐含层有 7 个神经元, 输出层为 3 个神经元。输出层的 3 个神经元分别代表觉醒期(WAKE)、非快速眼动期(NREM)和快速眼动期(REM)。
图6 BP 网络设计简化图Fig. 6 Simplified diagram of BP network design
读取划分好的训练数据后, 将特征参数进行归一化处理到[–1, 1]区间保证训练效果。首先计算样本数据的平均值, 再将样本数据分别减去平均值;然后计算样本数据的标准差, 将数据除以标准差,实现数据标准化处理, 再输入到网络中进行训练。
为了避免训练过程中出现大的波动, 设神经网络的学习速率初值为 0.001, 目标函数误差为 1.0×10–12, 并引入遗传算法计算神经网络的权重。保证当前种群最优个体不参与交叉和变异操作, 保留优秀种群; 最劣个体不参与交叉操作, 防止劣质基因遗传到下一代。通过每一代优化, 获得或逼近全局最优解。经过计算, 本文最大的迭代次数为 20。
为尽可能避免出现局部最小值, 本文采用交叉验证的方法, 权衡网络的拟合不足和过拟合情况。在划分的 16 例训练数据中, 选择 14 例进行训练,其余两例用来验证, 多次交叉验证结束后, 获得较优的神经网络。
利用 4 例测试集进行测试, 将最终测试集分类情况作为衡量神经网络分类器性能的重要指标。将LF, HF 和 LF/HF 分别与心率值和体动值一并作为网络输入进行训练, 睡眠分期结果如图 7 所示, 其中数值 0 表示 WAKE 状态, 数值 1 表示 REM 状态,数值 2 表示 NREM 状态。
图7 睡眠分期结果Fig. 7 Sleep stage results
各算法的准确率如表 1 所示, 可以看出, 基于改进的 BP 算法, 以 LF/HF、心率值和体动值作为网络输入的训练效果最好。另外, 将 LF, HF 和 LF/HF 进行排列组合, 将 LF+HF, LF+LF/HF, HF+LF/HF 和 LF+HF+LF/HF 分别与心率值和体动值一并作为输入, 进行分类。结果显示, 这 4 种方法的分类结果相近, 均比 LF/HF+心率值+体动值作为输入的准确率低。因此, 选取 LF/HF、心率值和体动值作为网络输入中最好的一组参数, 将模型固定下来。
表1 不同特征值的准确率Table 1 Accuracy of different eigenvalues
如表 2 所示, 与其他研究分析的信号特征和采用的算法相比, 本文基于 ECG 信号和体动信号进行特征提取, 取得较好的识别效果, 综合的识别准确率为 86.29%。
表2 不同算法的准确率Table 2 Accuracy of different algorithms
本文采用基于 ECG 信号和体动信号的 BP 神经网络算法, 对睡眠和觉醒的判别结果与标定的一致性较高, 尤其是对睡眠的正确识别。为了提高识别速度, 选取心率变异性和体动值作为特征值, 计算量大大减少, 识别速度得以提高。同时, 利用心率变异性的时频域特性, 减少直接采用心电信号带来的环境干扰, 提高算法的鲁棒性。利用心率变异性和体动值能够较好地反馈睡眠不同阶段的特征, 同时心电信号和体动信号的采集过程较为方便。当然, 实际应用时, 识别误差可能会变大, 因此还需要从心电信号中提取更多的特征参数, 并优化神经网络模型, 进一步提高睡眠分期的识别率。
本文利用心电信号和体动信号, 为睡眠分期的识别提供了一种较为简便有效的方法。该方法结合穿戴式设备, 可用于家庭睡眠监测, 也可用于睡眠疾病的初筛。该方法可以较好地解决多导睡眠仪在监测过程中影响正常睡眠的问题。