光电测量仪(PPG)生物信号处理附matlab代码
光电测量仪(PPG)生物信号处理附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
个人主页: Matlab科研工作室
个人信条:格物致知。
更多Matlab仿真内容点击
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
⛄ 内容介绍
PPG是一种新兴的光学技术,用于检测心脏引起的血容量变化,在身体周边部位的微血管床,如手指、前额、耳垂和脚趾。这项技术是基于使用一个光学传感器,向皮肤发射光,然后接收透射或反射的光、接收透射或反射的光。
因此,PPG检测由心血管系统产生的活动,这些活动是通过自律神经系统介导的。通过自律神经系统。PPG信号是前向传播的和反射的血容量波的总和。
根据朗伯-比尔定律,PPG信号与血液的光吸收率和 与血液对光的吸收率相关,并代表血容量的变化。PPG信号的交流成分 PPG信号的交流成分与动脉内的血量变化有关,并与心跳同步。
在这方面,PPG信号融合了关于心脏周期和血液传输的宝贵信息。因此,这种技术代表了一种有前途的、低成本的技术,可以 应用于心血管监测的各个方面,如检测血氧饱和度、心率、血压、心输出量、呼吸、血管评估、动脉顺应性、动脉老化、内皮功能、静脉评估、微血管血流、自律神经等功能。
⛄ 部分代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PPG Feature Extraction
% Function Name:
% Last update date:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PPG Feature Point Name
%PPG : O S N D
%VPG : w y z
%APG : a b c d e
%% Turotial 2 : Start Here
%set the search path for the subfunction
addpath(genpath(pwd));
pwd;
clc;
close all;
%% flag
flag_plot_figure = 1;
%% initialization variable
error_code = 0;
sample_time = 0.001; %sencond
%% %%%%%%%%%%%%%%%%%%%%%%%% Code Area %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Signal Data Index----change as your data path
path.data = ’.DATA’;
path.output = ’.OUTPUT’;
path.T3_data = ’..T3_ClassificationDATA’;
path.subject_info = ’.DATAsubject_info’;
D = dir(’.DATA*.txt’);
disp(length(D));
delete([path.output ’BP_PPG_Feature_dataset.csv’]);
delete([path.output ’BP_PPG_discard_record.csv’]);
for subject_index = 1:1:length(D)
disp(subject_index);
error_code = 0;
filename = D(subject_index).name;
[subject.num,wavedata] = load_wave(path.data,filename);
subject_data = load([path.subject_info ’PPG_BP.txt’]);
[error_code,subject.info] = read_subject_info(error_code,subject.num,subject_data);
wave.ppg_raw = zscore(wavedata);
%% Filtering PPG signal
[wave.ppg,filter_SOS] = filter_home_bandpass(wave.ppg_raw,1,2,1000,0.5,10);
%% Calculate SQI
S_SQI_ppg = ppg_sqi(wave.ppg);
[SQI_max_ppg,SQI_window_ppg] = ppg_window_sqi(wave.ppg);
[SQI_max_ppg,Index_ppg] = max(SQI_window_ppg);
%% vpg, apg, 3rd, 4th
[wave.vpg,wave.apg,wave.third,wave.fourth] = multi_derivative(wave.ppg);
wave.vpg = zscore(wave.vpg);
wave.apg = zscore(wave.apg);
wave.third = zscore(wave.third);
wave.fourth = zscore(wave.fourth);
%% PPG Feature point extraction
[error_code,Loc.PPG,Loc.VPG,Loc.APG] = ppg_point_extraction(error_code,wave.ppg,wave.vpg,wave.apg,wave.third);
%If you have done this step, you can establish your model to classification or prediction next step.
%Please put the dataset file to the ’T3_ClassificationDATA’ folder.
%If you want to watch or check the extracted PPG point, you can set ’flag_plot_figure’ to be 1 in the start of code.
%% watch the waveform and SQI value
if flag_plot_figure == 1
if error_code == 0
plot_multi(subject_index,2,3);
n = 1:1:length(wave.ppg);
plot(n*sample_time,wave.ppg,’k’,n*sample_time,wave.vpg,’b’,n*sample_time,wave.apg,’r’,...
...%n*sample_time,wave.third,’m’,...
...%n*sample_time,wave.fourth,’c’,...
Loc.PPG*sample_time,wave.ppg(Loc.PPG),’*r’,...
Loc.VPG*sample_time,wave.vpg(Loc.VPG),’*r’,...
Loc.APG*sample_time,wave.apg(Loc.APG),’*r’);
legend(’PPG’,’VPG’,’APG’);
axis([0 length(wave.ppg)*sample_time -5 5]);
title(subject.num);
text(0,4.5,’SQI’);
text(0,4,num2str(SQI_max_ppg));
text(0.5,4.5,’AGE’);
text(0.5,4,num2str(subject.info(3))); %age
text(1,4.5,’SBP’);
text(1,4,num2str(subject.info(6))); %SBP
text(1.25,4.5,’DBP’);
text(1.25,4,num2str(subject.info(7))); %SBP
text(0,-4,’PASS’);
text(0,-4.5,num2str(error_code));
%%show the PPG points
text(Loc.PPG(1)*sample_time,wave.ppg(Loc.PPG(1)),’O’);
text(Loc.PPG(2)*sample_time,wave.ppg(Loc.PPG(2)),’S’);
text(Loc.PPG(3)*sample_time,wave.ppg(Loc.PPG(3)),’N’);
text(Loc.PPG(4)*sample_time,wave.ppg(Loc.PPG(4)),’D’);
text(Loc.PPG(5)*sample_time,wave.ppg(Loc.PPG(5)),’O2’);
text(Loc.PPG(6)*sample_time,wave.ppg(Loc.PPG(6)),’S2’);
text(Loc.VPG(1)*sample_time,wave.vpg(Loc.VPG(1)),’w’);
text(Loc.VPG(2)*sample_time,wave.vpg(Loc.VPG(2)),’y’);
text(Loc.VPG(3)*sample_time,wave.vpg(Loc.VPG(3)),’z’);
text(Loc.VPG(4)*sample_time,wave.vpg(Loc.VPG(4)),’w2’);
text(Loc.APG(1)*sample_time,wave.apg(Loc.APG(1)),’a’);
text(Loc.APG(2)*sample_time,wave.apg(Loc.APG(2)),’b’);
text(Loc.APG(3)*sample_time,wave.apg(Loc.APG(3)),’c’);
text(Loc.APG(4)*sample_time,wave.apg(Loc.APG(4)),’d’);
text(Loc.APG(5)*sample_time,wave.apg(Loc.APG(5)),’e’);
text(Loc.APG(6)*sample_time,wave.apg(Loc.APG(6)),’a2’);
text(Loc.APG(7)*sample_time,wave.apg(Loc.APG(7)),’b2’);
xlabel(’t/s’);
ylabel(’Normalized value’);
grid on;
hold on;
else
plot_multi(subject_index,2,3);
n = 1:1:length(wave.ppg);
plot(n*sample_time,wave.ppg_raw,’k’,n*sample_time,wave.ppg,’k’,...
n*sample_time,wave.vpg,’b’,n*sample_time,wave.apg,’r’,...
n*sample_time,wave.third,’m’,n*sample_time,wave.fourth,’c’);
legend(’PPG’,’VPG’,’APG’);
axis([0 length(wave.ppg)*sample_time -5 5]);
title(subject_num);
text(0,4.5,’SQI’);
text(0,4,num2str(SQI_max_ppg));
text(0.5,4.5,’AGE’);
text(0.5,4,num2str(subject.info(3))); %age
text(1,4.5,’SBP’);
text(1,4,num2str(subject.info(6))); %SBP
text(1.25,4.5,’DBP’);
text(1.25,4,num2str(subject.info(7))); %SBP
text(0,-4,’FAIL’);
text(0,-4.5,num2str(error_code));
xlabel(’t/s’);
ylabel(’Normalized value’);
grid on;
hold on;
end
end
end
% Finish to extract ppg feature
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Turotials 2 : Stop Here
⛄ 运行结果
⛄ 参考文献
1 Elgendi, M. On the analysis of fingertip photoplethysmogram signals. Current cardiology reviews 8 , 14-25 (2012).
2 Alian, A. A. & Shelley, K. H. Photoplethysmography: Analysis of the Pulse Oximeter Waveform.
165-178, doi:10.1007/978-1-4614-8557-5_19 (2014).
3 Shelley, K. H. Photoplethysmography: beyond the calculation of arterial oxygen saturation and
heart rate. Anesthesia and analgesia 105 , S31-36, tables of contents,
doi:10.1213/01.ane.0000269512.82836.c9 (2007).
4 Alian, A. A. & Shelley, K. H. Photoplethysmography. Best practice & research. Clinical
anaesthesiology 28 , 395-406, doi:10.1016/j.bpa.2014.08.006 (2014).
5 Allen, J. & Murray, A. Age-related changes in peripheral pulse timing characteristics at the ears,
fingers and toes. Journal of human hypertension 16 , 711-717, doi:10.1038/sj.jhh.1001478
(2002).
6 Murray, J. A. a. A. Age-related changes in the characteristics of the photoplethysmographic
pulse shape at various body sites. Physiological measurement, 24 , 297-307 (2003).
⛳️ 完整代码
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
