目前比较常用的特征提取是提取心电信号的各波形间期长度、波峰高度等,本文是使用ARMA模型对心电信号进行处理,使用其系数来作为特征。
一、心拍划分
大多伴有异常波形的心律失常信号,通常都会具体表现在单个心拍中,需要对信号进行心拍划分。心拍信号截取的常见方法之一是以R波位置作为定位点,前后分别截取估计的采样点数。
上图是用matlab找出的R波位置,下面附上代码。但是我直接用的注释文件中标注的R波位置。
%ecg去噪后标记QRS波、R点。
啦啦啦
本文采用的MIT-BIH心律失常数据库以及其中由权威专家标注的R波位置。
心律失常的波形异常主要出现在PR间期和QRS波群,本文以R波位置为中心定位点,为了能基本包含所有的波形特性,向前向后各截取150个样本点共计301个样本点作为一个样本心拍。
%去噪后信号&标注信息
本文从MIT-BIH数据库的48条记录种的MLII通道数据中进行心拍划分,总计获取96871个样本心拍,其中正常心拍(N)有74466个,左束支传导阻滞心拍(L)有8051个,右束支传导阻滞心拍(R)有7239个,室性早搏心拍(V)有7115个。
二、ARMA模型
三、特征提取
在开始设计和使用ARMA模型前首先需要通过定阶来确定阶数,常见的进行定阶的方法有:通过一个序列的自相关函数(ACF)和偏自相关函数(PACF)进行定阶、通过赤池信息量准则(AIC)进行定阶。
根据葛丁飞等人的利用MDL和 MDL敏感性函数作为准则进行模型定阶,或者根据毛雪岷等人所提出的按照信噪比和赤池信息量准则进行定阶,结果都可以表明当 n = 4,m = 2 时,模型拟合得到的信号与原始心电信号最为相似。因此本文选用ARMA(4,2)模型,通过R语言的arima()函数来建立模型,输出拟合的模型系数。
RStudio:
library(readxl)
X100 <- read_excel("D:/DATA/test1.xlsx", col_names = FALSE)
X=X100
N=nrow(X)ARMAnum=matrix(nrow = N,ncol = 6,byrow = TRUE)for(i in 1:N){TE=X[i,1:301]TE=t(TE)TE_AR=arima(TE,order=c(4,2,2))TE_CO=TE_AR$coeffor (n in 1:6) {ARMAnum[i,n]=TE_CO[n]}
}View(ARMAnum)write.csv (ARMAnum, file ="C:UsersDesktop数据2_处理后数据3_ARMA系数test1.csv")
本文从划分出的心拍中选取四类心拍各1700个,共计6800个样本心拍数据。
然后就可以用ARMA系数作为分类模型的输入进行训练了。