基于改进滤波与R波补偿的心房颤动检测算法研究

版权申诉
0 下载量 67 浏览量 更新于2024-06-19 收藏 7.79MB PDF 举报
随着社会进步和生活节奏加快,心血管疾病如房颤(Atrial Fibrillation, AF)的发病率在全球范围内持续攀升,特别是在中国,老龄化的趋势使得房颤成为公共卫生关注的重点。本篇毕业论文深入探讨了在心电图(Electrocardiogram, ECG)分析中设计一种自动检测房颤的算法,旨在提高诊断的准确性和效率。 论文首先强调了当前常用的MIT-BIH心率失常数据库的局限性,因为它缺乏对房颤具体类型的细致分类。为了克服这一不足,研究团队开发了名为AF-7的数据集,包含2023组心电数据,涵盖了6种不同类型的房颤和1种正常心电情况,为更精准的房颤分类提供了丰富的样本资源。 针对ECG信号处理,论文提出了创新的噪声抑制策略。传统的滤波方法难以应对ECG信号中多种类型的噪声,如基线漂移和工频/肌电干扰。作者采用了一种改进的中值滤波算法来纠正基线漂移,并结合小波分解与重构技术,实现多尺度降噪,显著提升了信噪比和滤波性能。 在R波检测环节,传统的检测方法存在误检和漏检的问题。论文提出了一种结合R波特征检测与心电生理特性补偿的方法,提高了R波的识别准确性。不同于仅依赖房颤的两个主要特征(无规则的f波和绝对不规则的RR间期),研究者还考虑了其他特征,如P波、心室率、QRS波宽度、幅度和PR间期,这些综合特征使得算法能更精确地识别不同类型的房颤。 论文的核心创新在于,通过提取并整合这些特征,设计出一种能够区分不同类型房颤的检测算法。在AF-7数据集的验证阶段,该算法表现出高灵敏度、特异性和准确率,达到了95%以上,这对于临床实践具有重要的实际应用价值。 这篇毕业论文不仅解决了心电图中房颤检测的挑战,还通过创建新的数据集和优化的信号处理方法,为心脏疾病的早期识别和精确诊断提供了有力的技术支持。这不仅推动了心血管领域研究的进步,也为未来智能医疗系统的开发奠定了基础。

import wfdb import numpy as np import os import cv2 from PIL import Image import matplotlib.pyplot as plt # 设置数据集路径 data_path = 'mit-bih-arrhythmia-database-1.0.0/' # 设置输出路径 output_path = 'ImageMITBIH/' N_beats_pos = [] A_beats_pos = [] V_beats_pos = [] F_beats_pos = [] L_beats_pos = [] R_beats_pos = [] qita_beats_pos = [] # 读取数据集中所有记录的文件名 records = wfdb.get_record_list('mitdb') print('file list =', records) # 循环遍历每个记录文件 for record in records: print('\n') print('Processing record:', record) # 读取记录文件中的信号和标注信息 all_signals, fields = wfdb.rdsamp(os.path.join(data_path, record)) signals = [x[0] for x in all_signals] annotations = wfdb.rdann(os.path.join(data_path, record), 'atr') print('signals =', signals) print('signals_amount =', len(signals)) print('fields =', fields) print('annotations =', annotations) # 获取每个心拍的位置和类别 beats_pos = annotations.sample beats_labels = annotations.symbol print('beats_pos =', beats_pos) print('pos_amount =', len(beats_pos)) print('beats_labels =', beats_labels) print('labels_amount =', len(beats_labels)) print('labels_forms =', list(set(beats_labels))) for i in range(len(beats_labels)): if beats_labels[i] == 'N': # 正常心拍 N_beats_pos.append(beats_pos[i]) if beats_labels[i] == 'A': # 房性早搏 A_beats_pos.append(beats_pos[i]) if beats_labels[i] == 'V': # 室性早搏 V_beats_pos.append(beats_pos[i]) if beats_labels[i] == 'F': # 室性融合波 F_beats_pos.append(beats_pos[i]) if beats_labels[i] == 'L': # 左束传导受阻 L_beats_pos.append(beats_pos[i]) if beats_labels[i] == 'R': # 右束传导受阻 R_beats_pos.append(beats_pos[i]) else: # 其他异常心拍或无效信号 qita_beats_pos.append(beats_pos[i])解释每一句的意思

147 浏览量