生理信号中的呼吸信号是一类典型的时间序列信号,可以从移动设备检测到的心电信号中提取得到或者采用其它方式获取,对呼吸信号进行分析并挖掘其中的异常呼吸事件 对研究人体睡眠质量及其他心脑血管疾病有极大的帮助。
通常这一类信号的处理会包括两大类过程:
信号预处理
1、从原始信号中提取呼吸信号:
2、提取得到的呼吸信号的前处理:
由于睡眠时身体位置的变化导致胸阻抗信号(下称呼吸信号)出现大幅度的波动,同时身体位置变化前与身体位置变化后的呼吸信号幅值具有较大的差异,为消除这种差异,方便后续通过结合幅值与排列熵算法发现呼吸暂停事件及其时长,同时更准确判定人体睡眠期间身体位置移动的次数,以期综合评价人体睡眠质量,有必要对呼吸信号进行适当的归一化处理。
比较通用的归一化方法包括全局归一化、加窗归一化,其基本思想为通过一段信号的极大值极小值进行线性映射,而一段呼吸信号的极大值极小值通常是身体位置移动造成的信号及噪声信号,因此该类归一化方法容易造成正常的呼吸信号在归一化后幅值过小、其细节无法展现的缺点。
论文[1]结合加窗归一化及自适应信号处理提出了一种新的信号归一化方法,简述如下:
设经过滤波预处理后的信号S,对其加窗分段后S共由n段窗口长度为L的信号构成:
,对Si进行自适应归一化,归一化信号为
自适应归一化算法:
我使用了一个家里采集心电数据的小设备,采集了一晚的数据,并经过带通的滤波器,得到了一段下面的呼吸原始信号,对采集的原始呼吸信号进行归一化处理:
进行呼吸信号归一化后,正常呼吸信号幅值趋于一致,而异常信号(身体移动等)等到凸显,因此在检测睡眠期间身体移动次数方面相比使用方差判断异常值更加方便。例如,这里简单粗暴的使用硬阀值threshold = 1即可简便实现身体移动次数检测。效果看下图:
呼吸信号的数据挖掘:
归一化呼吸信号后,正常呼吸信号的幅值在0至1之间,而呼吸暂停的信号幅值则将趋于0值。在使用排列熵算法确定呼吸暂停的位置点之后,再结合归一化信号的幅值可进一步确定呼吸暂停的持续时间,以便统计一段信号中持续时间超过10秒的呼吸暂停次数。
下面三个图展示了我自己在这次分析过程中出现的三种典型的疑似呼吸暂停模式:
.胸脯无运动(红色曲线),持续时间12s
胸脯无运动(红色曲线),持续时间14.8s
胸脯有运动,但信号幅值明显小于正常呼吸信号(红色曲线),疑似暂停或低通气状态,持续时间12s
在排列熵算法标记出暂停事件的位置点后,通过搜索该位置点前后连续的小幅值信号,确定呼吸暂停的准确起始位置和终止位置,得到该呼吸暂停的持续时间。值得注意的是,在呼吸暂停期间或者前后一段时间,心率都出现较大幅度的上升。在图3(a)中,心率上升时刻提前于暂停时刻、呼吸暂停发生后心率无明显上升,图3(b)中,心率上升与暂停几乎同时发生,图3(c)中,心率上升时刻较暂停时刻有一定的延迟。
论文[1][2]指出在长呼吸暂停发生后心率出现下降,其中论文[2]图例中心率出现下降是在呼吸暂停持续30s以后,而在呼吸暂停前期,其心率出现了轻微了上升。
[1]Peter Varady,“A novel method for thedetection of apnea and Hypopnea events in respiration signals”,IEEETrans.Biomedical Engineering,Vol.49,No.09,September 2002
[2]Hoshik Lee..,“A new algorithm fordetecting central apnea in neonates”,Physiol.Meas.33(2012)1-17
排列熵算法可参考我另外几篇客:排列熵算法简介 、时间序列异常事件检测