✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍
临床医师获取患者心脏状态相对准确信息的最易获取生物电信号是心电图(ECG)。在ECG上,许多心脏问题可表现为波形畸变(ECG)。分析每次心跳并将异常与不同心脏疾病相关联是识别心脏疾病的关键环节。ECG信号通常在时域进行分析,反映了由肌肉收缩引发的电活动。正常情况下,单次心跳对应一个ECG周期[1]。心脏所有传导细胞同时产生的动作电位构成了ECG。正常或健康的心脏波形通常具有可预测的幅度和时序。心脏传导系统(可能涉及心脏相关任何问题)的异常可通过波形幅度和时序的改变提示。得益于该方法,我们现在可通过分析ECG图上捕获的电事件自动分析心率。心脏周期始于每次心跳后[2]。心脏在舒张期(心脏周期的放松阶段)和收缩期(心脏周期的收缩阶段)将血液泵出体外。一个完整的心脏周期中可见P波、QRS波群和T波。P-R间期(通过房室结传导的P波)在房室结处存在100毫秒的延迟,当P波(心房去极化)刺激沿心房表面传导时。心房收缩开始时,房室结的室间隔是Q波冲动(心室去极化的首个征象)通过的路径,随后这些冲动经由调节带穿过右心室的浦肯野纤维和乳头肌。浦肯野纤维将QRS复合波冲动(心室去极化的顶点)传导至心室心肌。心房收缩完成后,心室收缩随即开始。[3]
⛳️ 运行结果
Image
📣 部分代码
% 45. dakika 50. dakika
clear all
clc
data = load("data.mat");
a = data.ecg_data;
fs = data.fs;
T = 1;
N = length(a);
ts = 1/fs;
t = (0:N-1)*ts;
t2 = t(270000:300000);
a2= a(270000:300000);
subplot(2,1,1)
plot(t2,a2);
title("normal");
noise = 0.5 * rand(size(a2))-0.5;
%noise2 = randn(size(a))*0.15;
noise_a = a2 + noise;
treshold=0.56; %treshold for peak detection
peaks=[]; %peaks detection variables
peaks_locs=[];
N = length(noise_a);
beat_count = 0;
for i=2:(length(a2)-1)
if noise_a(i)>noise_a(i-1) && noise_a(i)>noise_a(i+1) && noise_a(i) >treshold
peaks =[peaks a(i)];
peaks_locs =[peaks_locs i];
beat_count = beat_count + 1;
end
end
subplot(2,1,2);
plot(a);
hold on
plot(peaks_locs, peaks,"r*");
display(length(peaks));
duration_in_seconds = N/fs;
duration_in_minutes = duration_in_seconds / 60;
BPM = beat_count / duration_in_minutes;
% noise kaynaklı qrs r değeri düşüyor bu yüzden threshold'un altında
% kalıyor. bu yüzden peak olarak algılanmıyor ve kalp atımı çok düşük
% bulunuyor ayrıca grafikte net bir görüntü oluşmuyor.
%noise değerinin fazla olması da datamızda büyük değişikliklere sebebiyle
%peak değerlerini az görüyor.
🔗 参考文献
Image
图片
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦: