心电信号处理算法(包括基线漂移消除技术,高通、低通和陷波滤波,等值线校正和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等。

相关推荐
py有趣12 分钟前
LeetCode算法学习之移动0
学习·算法·leetcode
lixinnnn.16 分钟前
算法总结篇(枚举-分治)
算法·1024程序员节
百锦再17 分钟前
Go与Python在AI大模型开发中的深度对比分析
java·开发语言·人工智能·python·学习·golang·maven
on_pluto_17 分钟前
【基础复习3】决策树
算法·决策树·机器学习
熬了夜的程序员18 分钟前
【LeetCode】90. 子集 II
数据结构·算法·leetcode·链表·职场和发展·排序算法
moisture20 分钟前
集合通信原语
后端·算法
junziruruo24 分钟前
计算机视觉、医学图像处理、深度学习、多模态融合方向分析
图像处理·深度学习·计算机视觉
量子位26 分钟前
黄仁勋台上最强GPU炸场,台下感叹“中国芯片爆发”,瞄准6G投资诺基亚
人工智能
熬了夜的程序员26 分钟前
【LeetCode】91. 解码方法
算法·leetcode·链表·职场和发展·排序算法
一个处女座的程序猿29 分钟前
LLMs之PE:PromptX(将 AI 智能体从通用助手转变为具备行业/角色能力的交互平台)的简介、安装和使用方法、案例应用之详细攻略
人工智能·交互·agent·promptx