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

相关推荐
加油,旭杏3 分钟前
【go语言】grpc 快速入门
开发语言·后端·golang
行路见知7 分钟前
1.4 Go 数组
开发语言
2501_9032386514 分钟前
Java 9模块开发:Eclipse实战指南
java·开发语言·eclipse·个人开发
ahardstone15 分钟前
【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
开发语言·python
励志成为美貌才华为一体的女子21 分钟前
python算法和数据结构刷题[4]:查找算法和排序算法
数据结构·算法·排序算法
阿豪学编程30 分钟前
c++ string类 +底层模拟实现
开发语言·c++
MoRanzhi120342 分钟前
亲和传播聚类算法应用(Affinity Propagation)
人工智能·python·机器学习·数学建模·scikit-learn·聚类
金融OG43 分钟前
99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)
人工智能·python·机器学习·数学建模·金融·数据可视化
tt5555555555551 小时前
每日一题-判断是不是完全二叉树
数据结构·算法
艾醒(AiXing-w)1 小时前
玩转大语言模型——使用langchain和Ollama本地部署大语言模型
人工智能·语言模型·langchain