基于深度学习的心律异常分类系统设计——算法设计

基于深度学习的心律异常分类系统——算法设计

  • 第一章 研究背景
    • 算法流程
    • 本文研究内容
  • 第二章 心电信号分类理论基础
    • 心电信号产生机理
    • MIT-BIH 心律失常数据库
  • 第三章 心电信号预处理
    • 心电信号噪声来源与特点
      • 基线漂移
      • 工频干扰
      • 肌电干扰
    • 心电信号读取与加噪
    • 基于小波阈值去噪技术的应用
      • 小波降噪的基本原理
      • 小波阈值去噪
        • 小波分解层数
        • 小波基函数的选取
        • 阈值与阈值函数
      • 评价去噪效果
      • 本章小结
  • 第四章 基于1-D CNN的心律失常分类算法
    • 以R峰位基准点进行心拍分割
    • 卷积神经网络
      • 神经网络简介
      • 卷积层
      • 池化层
      • 全连接层
    • 卷积神经网络
      • 本文1-D CNN结构
      • 模型的搭建
    • 实验结果分析
  • 第五章 总结与展望
    • 对未来展望
    • 参考文献

第一章 研究背景

根据世界卫生组织(WHO)资料显示,由心血管病引起的死亡在全球范围内占1/3,而根据资料,我国现有心血管病患者人数达3.3亿,且患病率不断上升。在城市和乡村,心血管病死亡率分别超过40%和46.66%。心律失常是常见的心血管疾病,分为房性早搏(pulmonary premature)、心室颤动(ventricular fibrillation)和房室传导阻滞(ventricular migraine)等。部分心律失常甚至会危及人的生命安全,而其他的不会危及人生命安全的心律失常类型疾病也需密切观察并治疗。

因此,准确地诊断和预防心律失常,是降低心血管疾病发病率的关键,也是临床上亟待解决的问题。

伴随着科技的持续发展,在生物医学信号的检测与分析、医学图像处理等方面,计算机被持续地用于医学辅助诊断,这不但可以极大地降低医生的工作负担,提升诊断效率,节省时间和人力成本,还可以在一定程度上提升医疗质量。本项目的研究成果将有助于临床医师对病人的 ECG进行实时、准确地诊断,从而提高诊断效率,减少由于人为错误诊断而造成的死亡率。

算法流程

实现对于ECG信号的自动分类,其算法的流程图如下图1.3所示,对心电信号的预处理主要包括去除噪声和心拍分割,之后对分割后得到的单个心节进行特征提取,最后利用softmax完成信号分类。
在这里插入图片描述

本文研究内容

第二章 心电信号分类理论基础

心电信号产生机理

正常的心律,室性心律失常,室上型心律失常及与之相关的一系列心律失常(如双室早,二联律,三联律,室上心动过速,窦性停搏等),是临床上最常见的心律失常。

本论文的重点是:正常的心脏拍动(N),异常的房性早搏(A),室性早搏(V),左束支传导阻滞(L),右束支传导阻滞(R)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

MIT-BIH 心律失常数据库

国麻省理工大学MIT-BIH数据库是目前世界上最受欢迎的 ECG标准数据库。MIT-BIH心率不齐资料库中,有超过4000个从贝斯伊斯雷尔医院收集的长期 Holter记录。MIT-BIH心律失常资料库共有48条记录,每条时间在30分钟左右,取样频率为360赫兹,心拍个数超过100,000个。MIT-BIH心律失常数据库是一种可供科研人员免费获取的公共数据库,它为心电图的研究提供了大量的数据,具有非常广泛的应用前景。
在这里插入图片描述
在这里插入图片描述
MIT-BIH资料库包含了 ECG的所有种类,见表2-3,其中包括 ECG的注释编码,英文名称,注解,心律类型等。

第三章 心电信号预处理

心电信号噪声来源与特点

从 ECG的生成机制来看, ECG是一种很弱的生物电信号。从仪器上获得的心电信号,要通过安装在身体表面的检测电极,然而在收集心电信号的过程中,难免会有各种各样的噪音,而在这些噪音中,最常见的就是基线漂移,工频干扰,以及肌电干扰,下面将会对这些噪音进行详细的介绍。

基线漂移

基线漂移主要由呼吸、肢体活动或运动心电图测试等微弱体动引起。呼吸运动会导致心电图基线发生缓慢波动,频率范围通常在0.05Hz到2Hz之间。同时,人体肢体的活动或运动会导致心电电极与皮肤之间的接触电阻发生变化,进一步引起输入电压的变化,从而产生基线漂移。这种漂移噪声与心电图ST段的频谱非常接近,如果滤除方法不当,容易引起ST段严重失真。下图显示了一个基线偏移的噪音信号。
在这里插入图片描述

工频干扰

工频干扰则是由周围环境中用电设备产生的电磁场所引起。心电信号往往被50Hz及其整数倍的正弦波噪声所污染,这种噪声的幅值大小与周围电磁场强度有关。例如,人体的分布电容就可能引起50Hz的正弦信号及其谐波组成的干扰,其幅值通常与ECG峰峰值相当或更强。工频干扰噪声信号如下图所示。在这里插入图片描述

肌电干扰

肌电干扰主要源自人体肌肉的活动,特别是控制骨骼肌收缩较差的人群。当肌肉颤动时,会产生毫伏级的电势,对心电信号的准确检测造成影响。肌电干扰的基线通常不明显,能量主要集中在30Hz到300Hz的范围内,表现为不规则的波形,幅值大小不定。下图显示了肌电波干扰的噪音信号。
在这里插入图片描述
除此之外,ECG信号比较容易受到来自于外界环境所带来的干扰,ECG信号的噪声种类也非常多。例如:测量用到的电极与被检测的人体皮肤之间相互接触而导致出现的运动伪迹;电极接触不良或脱落;电子器件的干扰等。

心电信号读取与加噪

采用原生python波形数据库(WFDB)包。用于读取、写入和处理WFDB信号和注释的工具库。它的目标是用用户友好的API实现尽可能多的核心功能,并包含其他有用的生理信号处理工具。
在本实验中,数据集选自MIT-BIH ECG数据库中的原始ECG数据,选取了编号为101的ECG数据对算法进行一个验证。我们采用第101号数据作为实验数据,因其为正常人的心电数据,我们将此看做纯净的心电信号。模拟三种噪声的频段,通过噪声的叠加,我们可以得到含噪心电信号如下:

y ( n ) = x ( n ) + 0.02 sin ⁡ ( 100 ∗ π t ) + 0.02 sin ⁡ ( π t ) + g ( t ) y(n)=x(n)+0.02\sin(100*\pi t)+0.02\sin(\pi t)+g(t) y(n)=x(n)+0.02sin(100πt)+0.02sin(πt)+g(t)

上式中,g(t)为高斯白噪声,x(n)为不含噪声的心电信号。
Python代码如下:

record = wfdb.rdrecord('../ecg_data/101',sampfrom=0,sampto=2000,channel_names=['MLII'])fs = record.fs
# 转为数字信号
data = record.p_signal.flatten()
clean=data
# 生成时间轴
t = np.arange(0, len(data)/fs, 1/fs)# 添加50 Hz正弦波 模拟工频干扰
f_50 = 50
data = data + 0.02*np.sin(2*np.pi*f_50*t)# 添加0.5 Hz正弦波 模拟基线漂移
f_05 = 0.5
data = data + 0.02*np.sin(2*np.pi*f_05*t)# 计算信噪比对应的噪声功率
snr = 10  # 信噪比为10 dB
signal_power = np.mean(data**2)
noise_power = signal_power / (10**(snr/10))# 添加信噪比为10 dB的高斯白噪声 模拟肌电干扰
noise = np.random.randn(len(data)) * np.sqrt(noise_power)
data = data + noise

实验数据原心电信号图为:
在这里插入图片描述
加噪后的心电信号图为:
在这里插入图片描述

基于小波阈值去噪技术的应用

心电信号主要包含以下这三种类型的噪声:分别为基线漂移、工频干扰与肌电干扰。而本节的实验内容主要是针对ECG去除其广泛存在的以上三种噪声并且绘制出波形用以直观展示去噪的效果。鉴于这三类噪声各有特点,且在不同频率上的分布不同,本文拟采用小波分解与小波重构的思想,对以上的三类噪声进行去噪处理。在这个阶段,我们的重点研究问题是心电信号及其噪声的频谱分布、小波分解分层、信号有效成分的计算、阈值的选择等问题,最后达到实现心电信号噪声滤除的目的。

小波降噪的基本原理

小波去噪技术具有多分辨特性,是当前心电信号及各类信号去噪的重要手段。通过这种方法,可以把原来的含噪音的信号,按频率带分别分成高、低两类。通过对心电图信号进行小波分析,得到了在不同的分析尺度下,心电图信号与噪音信号在频谱上的差异。
小波变换是一种可以用来分析和处理心电信号中出现的不稳定、不稳定变化的心电信号的一种数据分析方法。小波分解可以很好地克服传统傅里叶变换方法的局限性。下图给出了小波变换的详细过程。
在这里插入图片描述
在小波滤波技术中,阈值滤波是一种重要的滤波算法,它具有操作简便、可获得良好的滤波效果。在处理的时候,根据小波分解后的每一层系数,对其进行有目的处理,将其转化为逆变换,再进行重建,从而获得消除噪音后的心电信号。

小波阈值去噪

本论文拟利用小波的多分辨率特性,采用小波去噪方法,将心电数据层层分解,提取出不同频率范围内的子信号,并根据子信号的频谱特性去噪,最后由子信号重构得到去噪后的心电信号。下图显示了 ECG信号的频段及其噪声。
在这里插入图片描述
根据上表所示,心电信号中,最重要的是其频段在0.7-40 Hz之间,为了消除噪声,其频段又分为低频部分和高频部分。针对 ECG信号及其噪声特性,无法从 ECG信号中实现彻底分离的问题,本项目拟采用小波分解方法,在保持 ECG信号大部分有效成分的前提下,采用小波阈值滤除其它频段的 ECG,从而降低 ECG信号中的有效成分。

小波分解层数

ECG信号以低频为主,对其进行小波分析时,首先要考虑的就是如何对其进行有效的降噪处理,而小波分析的层数是 ECG信号处理的基础。本文所使用的 ECG信号取样频率为360赫兹,根据奈奎斯特采样原理, ECG信号的取样频率为0-180赫兹。通过小波变换,并对其频域进行二次分割,提取出近似系数和细节系数。根据 ECG信号的频谱和有效成分,我们可以得出,分解的层数应为 log ⁡ 2 ( 180 ÷ 0.7 ) ≈ 8 。 \log_2{\left(180\div0.7\right)\approx8}。 log2(180÷0.7)8
在这里插入图片描述

由上表3-2可以看出,在对ECG信号进行小波八层分解,分解后我们看出子信号频率分布的说明,其中的cDi代表在第i尺度中的近似系数,cAj代表在第j尺度下的细节系数。

小波基函数的选取

小波基函数有多种类型,本实验利用Sym8小波本身的对称性,将其应用于心电信号的分解和重建中,以Sym8小波为例,研究其在心电信号中的应用。首先,通过对第一和第二尺度细节系数cD1和cD2和第八尺度近似系数cA8置0去噪,并对其它尺度信号进行阈值去噪、迭代和重建,从而实现小波降噪算法。

阈值与阈值函数

阈值的选择至关重要。阈值设置的过于小,会造成去噪的不彻底;如果阈值设置的过于大,就会使得有用的信号被舍弃。传统的硬、软阈值函数分别是:
硬阈值函数的定义:
在这里插入图片描述
软阈值函数的定义:
在这里插入图片描述
式中 s i g n ( ω j , k ) sign(\omega_{j,k}) sign(ωj,k)为符号函数, λ = σ 2 ln ⁡ N \lambda=\sigma\sqrt{2\ln{N}} λ=σ2lnN σ = M x 0.6745 \sigma = \frac{M_x}{0.6745} σ=0.6745Mx
M(x)是cD1层小波系数的中位数。在上述公式中,每一层的小波系数门限被设定为固定,但是,与噪声相对应的小波系数会随其层数而改变,所以我们使用了自适应阈值的方法,阈值为:

λ = σ j × 2 ln ⁡ N j ln ⁡ ( j + 1 ) \lambda = \sigma_j \times \frac{\sqrt{2 \ln{N_j}}}{\ln{(j + 1)}} λ=σj×ln(j+1)2lnNj

j为进行阈值去噪的小波系数所在的层数, σ j \sigma_j σj第j层小波分解系数中的噪声标准方差,Nj为第j层小波分解的系数个数。
小波去噪函数完整实现python代码如下:

def denoise(data): signals = pywt.wavedec(data=data, wavelet='sym8', level=8)cA8,cD8,cD7, cD6, cD5, cD4, cD3, cD2, cD1 = signalsthre=np.zeros(len(signals))for i in range(1,len(signals)):sigma=np.median(np.abs(signals[i])) / 0.6745thre[i]=sigma * np.sqrt(2 * np.log(len(signals[i])))/np.log(10-i)print(thre[i])cD1.fill(0)cD2.fill(0)cA8.fill(0)for i in range(1, len(signals)-2):signals[i] = pywt.threshold(signals[i], thre[i])rdata = pywt.waverec(coeffs=signals, wavelet='sym8')return rdata

评价去噪效果

应选用与心电图波形最为接近的小波函数,以使得相应的小波系数和噪声小波系数之间的差别尽可能地显著化。用去噪后重建的信号的信噪比和均方误差来衡量去噪能力。
信噪比和均方误差分别定义如下:

S N R = 20 log ⁡ { ∑ n = 1 N a 2 ( n ) ∑ n = 1 N [ a ( n ) − b ( n ) ] 2 } SNR\ =\ 20\log{\left\{\frac{\sum_{n=1}^{N}{a^2(n)}} {\sum_{n=1}^{N}\left[a(n)\ -\ b(n)\right]^2}\right\}} SNR = 20log{n=1N[a(n)  b(n)]2n=1Na2(n)}

M S E = ∑ n = 1 N [ a ( n ) − b ( n ) ] 2 N MSE\ =\ \frac{\sum_{n=1}^{N}\left[a(n)\ -\ b(n)\right]^2}{N} MSE = Nn=1N[a(n)  b(n)]2

式中,a(n)为原始的实验心电信号,b(n)为小波降噪后得到的重构信号。
在模拟噪声的加入后,经过软阈值去噪处理,得到的自适应阈值和固定阈值的图像差别、信噪比与均方误差如下:

自适应阈值去噪图像:
自适应阈值去噪图像
固定阈值去噪图像:
在这里插入图片描述

通过图像可以看出,两种阈值的选取都极大程度过滤了噪声,还原了心电图像,但是从图像无法直观看出两种阈值选择的优劣,我们通过计算信噪比(SNR)和均方误差(MSE)来评价两种阈值选择的优劣。
在这里插入图片描述

本章小结

本章从 ECG的基本原理出发,按顺序对 ECG的生理特征和噪声源进行了分析,为深入了解 ECG的基本原理奠定了基础;其次,使用 WFD软件对 ECG数据进行了读出,并对原始 ECG数据进行了噪声处理,以达到对降噪效果的客观定量的评估;对心电信号进行小波八层分解,选择sym8小波基函数,并选择自适应阈值进行阈值去噪,依次展示了自适应阈值法对噪声的去除效果并对比了固定阈值法的去噪结果,最后用信噪比(SNR)和均方误差(MSE)进行量化评价对比。本章的研究内容为后续的工作提供了基础。

第四章 基于1-D CNN的心律失常分类算法

卷积神经网络作为一种热门的分类算法,该算法无需对输入的数据进行人工的预处理,而是将其直接输入到CNN中,由CNN进行特征的提取。在我们的论文中,由于输入的心电信号是一维数据,因此二维CNN模型已经被修改和优化为一维网络结构。

以R峰位基准点进行心拍分割

Python的WFDB包中的annotation标记了R峰所在的位置以及单段心电信号的类型,通过读取并标记可以看出R峰的位置,如下图所示。
在这里插入图片描述
在心电信号的预处理完成后,我们开始进行心拍分割的操作,即将整段的心电信号分割为一段段单个的心拍。R波是 ECG中最显著的一种,它是 ECG中发现其他波形的基础,对 ECG中的心律失常等疾病的诊断具有指导意义,并为 ECG图像的心拍分割提供了重要的参考。在MIT-BIH心律失常数据库中,我们可以从annotation中得到精确的R峰值坐标。本文将降噪后的心电信号选用了R峰点前60、后70个采样点作为单段心电图截取,截取后的单个完整心电信号如下图所示。
在这里插入图片描述
截取时,去掉整条记录中前10个以及最后5个心电信号,以保持截取信号的稳定性。R峰点位心拍分割的处理函数代码如下:

def get_data_set(number, X_data, Y_data):ecgClassSet = ['N', 'A', 'V', 'L', 'R']print("loading the ecg data of No." + number)record = wfdb.rdrecord('ecg_data/' + number, channel_names=['MLII'])data = record.p_signal.flatten()rdata = denoise(data)#小波去噪函数annotation = wfdb.rdann('ecg_data/' + number, 'atr')Rlocation = annotation.sampleRclass = annotation.symbolstart = 10end = 5i = startj = len(annotation.symbol) - endwhile i < j:try:lable = ecgClassSet.index(Rclass[i])x_train = data[Rlocation[i] - 60:Rlocation[i] + 70]X_data.append(x_train)Y_data.append(lable)   i += 1except ValueError:i += 1return

在对图像进行切分之后,采用留出法,选取其中的30%作为待测样本,剩余的70%作为训练样本,将其输入到卷积神经网络中。

卷积神经网络

传统的卷积神经网络结构如下图4.3所示:
在这里插入图片描述

神经网络简介

神经元是神经网络的基础操作单元。它接受外部或内部的信息,并经过加工后输出。每一个输入都有一个对应的权值,该权值反映了输入之间的重要程度。神经元是用每个输入和对应的权重的加权和来计算的,神经元计算方式下所示:
y = f { ∑ i = 1 n ω i a i − b } y=f\left\{\sum_{i=1}^{n}{\omega_ia_i-b}\right\} y=f{i=1nωiaib}
其中, a i a_i ai是第i个元素信息的输入, ω i \omega_i ωi是当前神经元与下一个神经元之间的权重, b \ b  b为偏置, f ( ) f() f()是激活函数, y y y为输出。加入激活函数使线性的内容经过神经元转变为非线性的内容,以下的三种激活函数为最常使用的。

  1. S i g m o i d Sigmoid Sigmoid激活函数
    Sigmoid\ 函数的公式如下所示,其可以将神经网络的输出映射到(0,1)之中,公式如下所示。
    s i g m o i d ( x ) = 1 1 + e − x sigmoid(x)=\frac{1}{1+e^{-x}} sigmoid(x)=1+ex1
    函数图像如下:
    在这里插入图片描述
    如图上图所示,当输入的值趋于正无穷或负无穷时,梯度会趋近零,神经网络学习不到特征,从而导致深度神经网络无法进行训练。
  2. T a n h Tanh Tanh激活函数
    Tanh 激活函数与 Sigmoid 函数的区别在于将网络的输出映射在(-1,1)之间。公式如下所示:
    tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex
    函数图像如下:
    在这里插入图片描述
    Tanh 函数以0为中心的对称函数,收敛迅速,但是同样容易出 现梯度消失的现象。
  3. R e L U ReLU ReLU激活函数
    R e L U ReLU ReLU 函数的特点是,当输入小或等于0,则返回0,当输入大于0时,则返回输入值,公式如下所示。
    r e l u ( x ) = { 0 , x ≤ 0 x , x ≥ 0 relu(x) = \begin{cases} 0, & \text{} x \leq 0 \\ x, & \text{} x ≥ 0 \end{cases} relu(x)={0,x,x0x0
    函数图像如下:
    在这里插入图片描述
    如上图所示,在x≤0的范围内,梯度为0,在x>0的部分梯度为常数,所以不会出现梯度消失的问题,而且同一时间只有部分神经元会被激活,使网络具有稀疏性,从而更好的挖掘特征。

卷积层

卷积的过程实际上是对特征进行提取的过程,是卷积神经网络最为重要的一个部 分。对于输入的数据,将其按照一定规律分为若干个和卷积核相同大小的矩阵,每个 矩阵和卷积核进行相应的运算,得到特征图,公式如下所示:

f i l = g ( z l ) = g ( ∑ j ∈ M j f j l − 1 ∗ K i l + b i l ) f_i^l=g(z^l)=g(\sum_{j\in M_j}{f_j^{l-1}\ast K_i^l+b_i^l}) fil=g(zl)=g(jMjfjl1Kil+bil)

其中, f i l f_i^l fil为𝑙层的第𝑖个卷积核得到的特征图, f j l − 1 f_j^{l-1} fjl1为第𝑙 − 1层通过运算得到的第𝑗个特征图, M j M_j Mj为第𝑙 − 1层得到的特征图的集, K i l K_i^l Kil为𝑙层的第𝑖个卷积核, b i l b_i^l bil代表偏置值,激活函数由𝑔(*)表示
卷积运算可以看作矩阵之间相乘再相加的一个过程,对输入数据进行卷积运算时,往往从输入数据的第0行第0列开始,即(0,0)点坐标的位置。本文中以5×5 的一个输入数据矩阵为例,卷积核设置为 3×3,步长为1,即卷积核在卷积过程中,从左到右、从上到下都依次移动一个位置进行卷积运算。每一次的卷积运算都按照如下公式计算,一次卷积运算过程如下图所示。

e = ∑ i ∑ j x i j y i j e=\sum_{i}\sum_{j}{x_{ij}y_{ij}} e=ijxijyij

以上公式中, x i j x_{ij} xij表示卷积核, y i j y_{ij} yij表示输入数据, e e e为卷积运算后的结果。
1234
上图中按照滑动步长为1移动,最终得到一个 3×3 的特征图,具体地,第一个特征图计算如下:
𝑒 = 0×0+1×1+2×0+2×2+4×0+3×1+5×1+0×0+2×1=15
经过以上一系列计算得到完整的特征图后,该特征图即为下一层的输入数据。

池化层

池化层也称采样层,可以降低特征维度,减少网络复杂度,同时也可以减少训练 的参数数量。一般情况下,最大池化和平均池化是最为常用的池化操作。最大池化是 在指定范围内选择出数值最大的一个作为池化操作的输出;平均池化是将计算出的指 定范围内的平均值作为池化操作的输出。最大池化过程和平均池化过程分别如下图所示。
在这里插入图片描述
在这里插入图片描述
图4.5和4.6分别展示了最大池化和平均池化的操作过程,对于一个 4×4 的特征图,采用22的滑动窗口,设置步长为 2,最终得到22的结果矩阵,体现出了池化层可降低特征维度的作用。

全连接层

全连接层通常为卷积神经网络的最后一层,位于卷积层和池化层之后,作用主要是将特征进行非线性组合来得到最终的输出。全连接层实际上是其每个神经元和上一层的全部神经元进行连接的过程,网络结构见下图
在这里插入图片描述
从图 3.8 中可以看出,需要将每个神经元进行连接,因此在网络中计算量最大、参数最多的部分便是全连接层。在全连接层中采用的激活函数有多种,比如 Sigmoid函数、tanh 函数、ReLU 函数,但是为了使网络拥有更加优越的性能,多数情况下将ReLU 函数作为激活函数。对于多分类研究来说,全连接层的输出将是多分类函数的输入,在此常采用 Softmax 函数作为分类器,以完成最终的分类。

卷积神经网络

本文1-D CNN结构

在这里插入图片描述
卷积层处理之后输出的特征向量X的计算公式为:

X = W − F + 2 P S + 1 X=\frac{W-F+2P}{S}+1 X=SWF+2P+1

其中W是输入的信号的长度,F是卷积核的大小,P的值的选取时根据全零填充确定, S为我们选择的滑动步长大小。
池化层输出的特征向量的长度Y计算公式如下:

Y = W − F S + 1 Y=\frac{W-F}{S}+1 Y=SWF+1

其中W是输入信号的长度,F是池化核的大小,S为池化核每步步长。
我们搭建的网络所使用的卷积核大小为3,滑动步长为1,采用最大值池化的方式。池化核大小为2,选择的滑动步长为2,我们将心电信号输入为1维的长度为130的numpy数组,其中每层的运算如下表所示:
在这里插入图片描述

模型的搭建

本实验所采用的1- D CNN结构如图上图所示,该模型包括输入层1个,卷积层5个,下采样层4个,BN层5个,全连通层1个。第一层到第四层是卷积层后面跟着一个下采样层以及BN层,在第五个卷积层之后直接跟着的是一个BN层。激活函数采用ReLU函数。
模型的建立和参数的训练是采用 TensorFlow框架完成的。其中,优化器选择的是 Adam自适应最优器,学习率是自适应的学习率,损失函数是crossentropy,网络的评估指标是 accuracy。
实现代码如下:

newModel = tf.keras.models.Sequential([tf.keras.layers.InputLayer(input_shape=(130,)),tf.keras.layers.Reshape(target_shape=(130, 1)),tf.keras.layers.Conv1D(filters=28, kernel_size=3, strides=1, padding='SAME', activation='relu'),tf.keras.layers.MaxPool1D(pool_size=2, strides=2, padding='SAME'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Conv1D(filters=28, kernel_size=3, strides=1, padding='SAME', activation='relu'),tf.keras.layers.MaxPool1D(pool_size=2, strides=2, padding='SAME'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Conv1D(filters=28, kernel_size=3, strides=1, padding='SAME', activation='relu'),tf.keras.layers.MaxPool1D(pool_size=2, strides=2, padding='SAME'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Conv1D(filters=28, kernel_size=3, strides=1, padding='SAME', activation='relu'),tf.keras.layers.MaxPool1D(pool_size=2, strides=2, padding='SAME'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Conv1D(filters=28, kernel_size=3, strides=1, padding='SAME', activation='relu'),tf.keras.layers.BatchNormalization(),tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(rate=0.2),tf.keras.layers.Dense(5, activation='softmax')
])

实验结果分析

本实验的操作环境为:Intel® Core™ i5-9300H CPU @ 2.40GHz处理器、NVIDIA GTX1660Ti 6G GDDR6独立显卡、Windows10 系统、8GB 内存、笔记本计算机。使用的语言为 Python,深度学习框架为TensorFlow,数据处理工具为Python语言的WFDB数据包。在 CNN 网络特征提取部分,学习率设置为自适应,批次大小设置为128,Dropout 值为0.2,迭代训练次数为30次。
为测试本文所提模型的性能,使用灵敏度(Se)、阳性预测值(PPV)、分类准确率(Acc)3 种评估指标来衡量模型的性能。三个评估指标所对应的计算过程如下所示:

S e = T P T P + F N Se=\frac{TP}{TP+FN} Se=TP+FNTP

P P V = T P F P + T P PPV=\frac{TP}{FP+TP} PPV=FP+TPTP

A c c = T P + T N T P + F P + T N + F N Acc=\frac{TP+TN}{TP+FP+TN+FN} Acc=TP+FP+TN+FNTP+TN

在上述公式中,TP、TN、FP和FN的含义见下表:
在这里插入图片描述
心电信号自动分类实验结果的混淆矩阵如下图所示。
在这里插入图片描述
根据混淆矩阵可计算出模型的评价指标,本文实验使用1D-CNN模型进行特征的提取与识别,最后利用Softmax完成分类,本文模型的分类准确率较高,达到了 97.5%;N、A、V、L、R五类心跳的灵敏度(Se)分别为99.26%、71.50%、93.89%、97.03%、94.16%,阳性预测值(PPV)分别为98.49%、79.00%、96.64%、97.54%、96.04%。

第五章 总结与展望

伴随人们对心脏疾病相关危害的深入了解,对心脑的重视程度也不断提高,越来越多的学者开始了对心律异常自动判别的研究,同时也提出各种分类方法。本文的主要研究工作如下:
(1)针对 ECG信号中的各种噪声干扰,本文提出了一种自适应阈值的降噪算法。为客观量化评价去噪效果,我们采用mit-bih数据库编号为101的数据中的MLII导联作为为纯净的ECG信号。然后,在纯净信号的基础上分别加入50Hz正弦波模拟工频干扰、0.5Hz正弦波模拟基线漂移和信噪比为10dB的高斯白噪声模拟肌电干扰。加噪心电信号以后,经过实验对比自适应阈值法和固定阈值法的去噪效果,通过去噪的图像难以分辨出孰优孰劣。由此引入信噪比(SNR)和均方误差(MSE)量化评价,经过实验对比,两种方法均能有效降噪,还原纯净心电信号波形。但自适应阈值法更优,因此选用自适应阈值法作为数据预处理阶段的方法。
(2)针对 ECG信号的特征抽取与分类问题,本项目拟采用一维 CNN实现 ECG信号的自动分类。心电信号的自动分类主要由四个步骤组成:预处理、心拍分割、特征提取和分类。心电信号预处理使用本文所提出的小波自适应阈值法,对心电信号进行八层分解并选用sym8小波基函数,特征提取和分类则采用基于1-D CNN网络的方法实现。心电信号分段读取annotation中的R峰点位,之后在R峰点位前、后各截取60、70个采样点。利用一维 CNN对 ECG信号进行特征提取,其中包括5个卷积层、4个池化层、5个标准化层以及1个完全连通层。最后,利用 Softmax 函数完成所需分类。通过实验可以看出,本文所提方法的分类准确率达到了97%以上。

对未来展望

对未来的展望
本文完整地对心电信号的预处理以及特征提取、分类做了详细的研究,可以大大地减轻医护人员的工作量,提高医疗水平上的工作效率。但本论文研究还存在一些局限性,故还需对以下问题进行改善:
(1)本论文使用的数据集是MIT-BIH数据集,该数据集十分权威,在国内外也享有盛誉。但仍存在一定的局限性:本数据库中心律失常的样本较少。故接下来的工作首先是对训练的数据集进行补充,在这一点上可以和广大的医院进行合作。医院每天都要进行大量的心电数据监测,其中也不乏心律失常的大量样本。故通过实地的考察研究,用生活中的大量数据作为训练数据的补充,对于模型的训练以及评价都十分的具有实际的意义。
(2)本论文采用的方法是小波变换并采用自适应阈值的小波硬阈值去噪方法,通过大量的实验,可以有效的去除心电信号中广泛存在的三种噪声并且极大程度的保留了已有的有效信息成分。但本实验仍有不足,即为心电信号还含有其他类型的噪声,后续的工作应在于了解和认识其他类型的噪声、了解多种去噪方法,通过大量的实验得出最适用的去噪方法。
(3)对于心拍分割后的单个心拍的长度,本文还需要通过大量实验,对比从R-峰点位左右截取的数据段长度的变化对实验结果带来的影响,选择最适合本文提出的去噪方法和模型的心拍截取长度。
(3)本论文提出的1-D CNN模型在本文的数据集上表现良好,且高于列出的其他文献中模型方法的准确率。但本文的心电数据采用单导联,其适用范围相对较窄,为提升临床 ECG诊断的适应性,本课题将重点关注多导联 ECG的自动识别,并进一步增强分类模型的实际应用价值。

参考文献

胡盛寿, 高润林, 刘力生, 等. 中国心血管病报告2018概要. 中国循环杂志 [J], 2019, 34(3): 209-220
刘昱昕,张延华,杨睿哲. 基于小波去噪和深度学习的含噪声心电信号分类
盛志强等 心电分析系统的设计与实现
刘昱昕,张延华 ,杨睿哲基于小波去噪和深度学习的含噪声心电信号分类
郑敏敏、高小榕、 谢海鹤心电信号小波去噪的改进算法研究
代码参考:
Python中的WFDB库使用
使用Python+TensorFlow2构建基于卷积神经网络(CNN)的ECG心电信号识别分类(四)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机抓包也太简单好玩了吧!

我们选择Charles来作为抓包工具&#xff0c;本文将从0到1讲解从电脑端抓包到手机端抓包。 Charles是一款被广泛使用的网络抓包工具&#xff0c;它可以用来监控和调试通过HTTP和HTTPS协议发送和接收的所有网络请求和响应。Charles通常用于网页和网络应用的开发过程中&#xff0…

基于python+vue家政服务系统flask-django-php-nodejs

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低家政公司的运营人员成本&#xff0c;实现了家政服务的标准化、制度化、程序化的管理&#xff0c;有效地防止了家政服务的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地…

9.测试教程-性能测试概述

文章目录 1.常见的性能问题2.为什么要进行性能测试3.性能测试实施的流程4.概念和术语介绍5.性能测试模型6.性能测试方法介绍7.性能测试实施与管理8.性能测试前期准备9.测试工具引入10.性能测试方案11.性能测试设计与开发12.性能测试设计与管理13.性能测试设计与调优14.性能测试…

【.net/.net core】后台生成echarts图片解决方案及.net core html转word方法

工具环境下载&#xff1a; EChartsConvert&#xff1a;https://gitee.com/saintlee/echartsconvert EChartsConvert为生成echarts图片的服务端&#xff0c;用于接收参数和生成echarts图表图片BASE64编码 PhantomJS:Download PhantomJS PhantomJS用来发布EChartsConvert服务…

在 3D 虚拟城市中展示自定义建筑

在本教程中&#xff0c;您将学习如何创建 Cesium 应用程序&#xff0c;用您自己的 3D 模型替换真实城市中的建筑物。您可以使用它来可视化拟建建筑的影响&#xff0c;及如何改变天际线&#xff1f;从特定楼层或房间看到的景色会是什么样子&#xff1f; 我们将介绍如何&#xf…

Web and HTTP

Web and HTTP First, a review… ▪ web page consists of objects ▪ object can be HTML file, JPEG image, Java applet, audio file,… ▪ web page consists of base HTML-file which includes several referenced objects ▪ each object is addressable by a URL, e.g.,…

MAC本安装telnet

Linux运维工具-ywtool 目录 1.打开终端1.先安装brew命令2.写入环境变量4.安装telnet 1.打开终端 访达 - 应用程序(左侧) - 实用工具(右侧) - 终端 #注意:登入终端用普通用户,不要用MAC的root用户1.先安装brew命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/H…

Databend x CubeFS:面向未来的企业级云原生数据存储与分析

用场景的丰富&#xff0c;企业面临着前所未有的数据存储挑战。大规模数据存储变得日常化&#xff0c;伴随着超大容量和快速变化的I/O需求&#xff0c;传统的存储解决方案已经难以满足企业对弹性、运维效率及总体拥有成本&#xff08;TCO&#xff09;的更高要求。这些挑战促使基…

基于傅里叶描述子的手势动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

数学建模(灰色关联度 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 案例&#xff1a;哪些原因影响结婚率 数据标准化&#xff1a; 灰色关联度系数&#xff1a; 完整代码&#xff1a; 结果&#xff1a; 介绍&#xff1a; 灰色关联度是一种多指标综合评价方法&#xff0c;用于分析和评价不同指标之…

由浅到深认识Java语言(9):Eclipse IDE简介

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

华为配置蓝牙终端定位实验

配置蓝牙终端定位示例 组网图形 图1 配置蓝牙终端定位示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 商场管理员希望在已有WLAN覆盖业务的基础上&#xff0c;使用蓝牙定位技术&#xff0c;根据顾客所在的位置&#xff0c;提供商场导航、导…

php 对接Vungle海外广告平台收益接口Reporting API

今天对接的是Vungle广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到Vungle后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://support.vungle.com/hc/en-us/articles/211365828-Publisher-Reporting…

AI助力生产制造质检,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建工业生产制造场景下的瓷砖瑕疵检测识别分析系统

瓷砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光&#xff0c;最后进行质量检测和包装。得益于产业自动化的发展&#xff0c;目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说&#xff0c;一条产线需要配数名质检工&…

【C++】1416. 求长方形的周长和面积

问题&#xff1a;1416. 求长方形的周长和面积 类型&#xff1a; 基本运算、整数运算 题目描述&#xff1a; 从键盘读入2个整数&#xff0c;分别代表一个长方形的长和宽&#xff0c;请计算长方形的周长和面积&#xff1b; 输入&#xff1a; 从键盘读入2个整数&#xff0c;用…

STM32利用串口外设发送数据

今天2024.3.21日上午学习了一下基本的串口初始化&#xff0c;利用串口发送一个字节的数据&#xff0c;看时间也快11点了&#xff0c;上午就学习这么多吧&#xff0c;把上午的知识总结一下&#xff0c;串口初始化的过程&#xff1a; 看着图来编写串口初始化的过程&#xff1a; …

GPT-4 vs. ChatGPT:19个弱项问题(多步逻辑推理、概念间接关联)的横向对比

测试对比&#xff1a;在逻辑推理和概念关联方面&#xff0c;GPT-4 显著优于 ChatGPT&#xff0c;准确率从37%提升至100%。智力水平&#xff1a;GPT-4 的思维智力表现可能超过了95%的人。技术进步&#xff1a;短时间内&#xff0c;GPT-4 显著进步&#xff0c;尤其在逻辑能力和多…

超越 GPT-4V 和 Gemini Pro!HyperGAI 发布最新多模态大模型 HPT,已开源

随着AI从有限数据迈向真实世界&#xff0c;极速增长的数据规模不仅赋予了模型令人惊喜的能力&#xff0c;也给多模态模型提供了更多的可能性。OpenAI在发布GPT-4V时就已经明确表示&#xff1a; 将额外模态&#xff08;如图像输入&#xff09;融入大语言模型&#xff08;LLMs&am…

java JVM详解(持续更新)

JVM定义 JVM结构 类装载子系统 双亲委派模型 运行时数据区 方法区&#xff08;Method Area&#xff09; 堆区&#xff08;Heap&#xff09; 虚拟机栈区 程序计数区 执行引擎子系统 垃圾回收机制 内存分代机制 JVM调优 JVM面试题 JVM定义 JVM它是jre的一部分&#xff0c;也…

静态路由实验(HCIP部分)

1、拓扑信息 2、需求分析 3、IP规划 4、配置截图 5、测试 1、拓扑信息 2、需求分析 1、 R6为isp,接口IP地址均为公有地址&#xff1b;该设备只能配置IP地址&#xff0c;之后不能再对其进行其他任何配置; 分析&#xff1a; R6只需配置一个环回和链路物理接口IP即可 2 、R1-R5为…