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

相关推荐
wx7408513266 分钟前
小琳AI课堂:大语言模型如何符合伦理限制
人工智能·语言模型·自然语言处理
虚拟搬运工20 分钟前
Python类及元类的创建流程
开发语言·chrome·python
5pace23 分钟前
机器学习(西瓜书)第 14 章 概率图模型
人工智能·机器学习
Linux猿26 分钟前
828华为云征文 | 云服务器Flexus X实例:部署 AgentOps,全方位监测智能体
人工智能·华为云·agent·autogen·flexus云服务器x实例·华为云服务器·agentops
Aurora_th39 分钟前
树与图的深度优先遍历(dfs的图论中的应用)
c++·算法·深度优先·图论·dfs·树的直径
消失的旧时光-194339 分钟前
kotlin的密封类
android·开发语言·kotlin
Rense143 分钟前
开源RK3588 AI Module7,并与Jetson Nano生态兼容的低功耗AI模块
人工智能·开源
A_cot43 分钟前
Redis 的三个并发问题及解决方案(面试题)
java·开发语言·数据库·redis·mybatis
学步_技术44 分钟前
Python编码系列—Python原型模式:深克隆与高效复制的艺术
开发语言·python·原型模式
alden_ygq1 小时前
GCP容器镜像仓库使用
java·开发语言