心电信号处理算法(包括基线漂移消除技术,高通、低通和陷波滤波,等值线校正和QRS等波群标记等,MATLAB代码)

由于心电信号是心脏活动产生的电位差变化并在人体皮肤表面采集得到的微弱信号,频率大致为0.05Hz~100Hz,波形幅值在10μV~5mV内。与其他生理信号不同之处是,心电信号的频率较低且波形幅值小,在采集时容易被各种噪声干扰。心电信号由于佩戴者的各种日常活动影响,往往采集到的信号中伴随着大量的噪声。心电信号一旦受到噪声的干扰,其原有的波形形态发生改变而不能得到有效利用,甚至完全失去其医学价值,所以滤除心电信号中的复杂噪声对准确诊断心血管疾病具有重要意义。为此,不论是医生对患者的心脏疾病的诊断还是远程心电监护系统的智能分析,都需要先获得降噪后的心电信号波形,医生才可以依据其所包含的波形特征信息中来诊断心脏疾病。故而,对心电信号采用降噪处理具有十分重要的临床医学意义。国内外研究人员针对滤除采集到的心电信号的复杂噪声进行了大量研究,且取得丰硕的成果。但鉴于心电信号的波形幅值较小且干扰噪声复杂随机产生,导致降噪时会丢失部分波形信息,致使重构后的心电信号波形不完整。所以,若滤除采集的心电信号中的复杂噪声且尽可能多的保留信号有价值的波形信息,仍需进一步研究。

鉴于此,提出一种心电信号处理算法,主要包括基线漂移消除技术,高通、低通和陷波滤波,等值线校正和QRS等波群标记等,运行环境MATLAB。主代码如下:

复制代码
%% Feature calculation
% produce FPT Table
% usage: [FPT_MultiChannel,FPT_Cell]=Process_ECG_Multi(signal,samplerate,varargin)
[FPT_MultiChannel,FPT_Cell]=Annotate_ECG_Multi(ecg_filtered_isoline,Fs);

% extract FPTs for Channel 1 (Lead I):
FPT_LeadI = FPT_Cell{3,1};

Pwave_samples = reshape(FPT_LeadI(:,1:3), [1,size(FPT_LeadI(:,1:3),1)*size(FPT_LeadI(:,1:3),2)]);
QRS_samples = reshape([FPT_LeadI(:,4),FPT_LeadI(:,6), FPT_LeadI(:,8)] , [1,size(FPT_LeadI(:,1:3),1)*size(FPT_LeadI(:,1:3),2)]);
Twave_samples = reshape(FPT_LeadI(:,10:12), [1,size(FPT_LeadI(:,10:12),1)*size(FPT_LeadI(:,10:12),2)]);

% visualize fiducial points
figure; 
plot(ecg_filtered_isoline(:,3));
hold on; 
scatter(Pwave_samples, ecg_filtered_isoline(Pwave_samples,3), 'g', 'filled');
scatter(QRS_samples, ecg_filtered_isoline(QRS_samples,3), 'r', 'filled');
scatter(Twave_samples, ecg_filtered_isoline(Twave_samples,3), 'b', 'filled');
title('Filtered ECG');
xlabel('samples'); ylabel('voltage');
legend({'ECG signal', 'P wave', 'QRS complex', 'T wave'});

%% Calculate timing and amplitude features from FPT table
[Amplitude_feature_12leads] = ExtractAmplitudeFeaturesFromFPT(FPT_Cell, ecg_filtered_isoline);
[Timing_feature_12leads, Timing_feature_sync] = ExtractIntervalFeaturesFromFPT(FPT_Cell, FPT_MultiChannel);

% visualize R amplitude for lead II and V1
figure; hold all; 
nbrBeats = size(Amplitude_feature_12leads, 2);
scatter(1:1:nbrBeats, Amplitude_feature_12leads(2,:,3), 'r+'); % lead II (entry 2), all beats, R peak amplitude (entry 3)
scatter(1:1:nbrBeats, Amplitude_feature_12leads(7,:,3), 'ro'); % lead V1 (entry 7), all beats, R peak amplitude (entry 3)
xlabel('Beat ID')
ylabel('R peak amplitude in mV') 
legend({'R amplitude in II', 'R amplitude in V1'})

%% Determine P-wave morphology
完整代码:https://mbd.pub/o/bread/mbd-Y56bm59q
[PMorph, Peaks] = Get_P_Morphology(ecg, Fs, FPT_Cell);

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

相关推荐
Takoony3 分钟前
正则表达式r前缀使用指南
开发语言·正则表达式·r语言
知舟不叙3 分钟前
基于OpenCV的实时文档扫描与矫正技术
人工智能·opencv·计算机视觉·透视变换·实时文档扫描与矫正
搏博8 分钟前
WPS中代码段的识别方法及JS宏实现
开发语言·javascript·wps
vortex513 分钟前
Bash fork 炸弹 —— :(){ :|:& };:
运维·服务器·开发语言·网络安全·bash
花火QWQ15 分钟前
图论模板(部分)
c语言·数据结构·c++·算法·图论
Blossom.11830 分钟前
基于区块链技术的供应链溯源系统:重塑信任与透明度
服务器·网络·人工智能·目标检测·机器学习·计算机视觉·区块链
Pacify_The_North30 分钟前
【进程控制二】进程替换和bash解释器
linux·c语言·开发语言·算法·ubuntu·centos·bash
说私域43 分钟前
O2O电商变现:线上线下相互导流——基于定制开发开源AI智能名片S2B2C商城小程序的研究
人工智能·小程序·开源·零售
xiaohanbao091 小时前
day29 python深入探索类装饰器
开发语言·python·学习·机器学习·pandas
轮到我狗叫了1 小时前
力扣310.最小高度树(拓扑排序,无向图),力扣.加油站力扣.矩阵置零力扣.二叉树中的最大路径和
算法·leetcode·职场和发展