PhysioNet Cardiovascular Signal Toolbox 1.0.0
(3,509 bytes)
function [rr,t] = Analyze_ABP_PPG_Waveforms(Waveform,Type,HRVparams,detectedQRS,subjectID)
%
% Analyze_ABP_PPG_Waveforms(Waveform,Type,HRVparams,detectedQRS,subjectID)
% OVERVIEW:
% Analyze ABP or PPG waveform
%
% INPUT:
% Waveform - matrix containing the a raw signal in each column
% Type - array containing the signal type of waveforms in each column:
% 'APB' for ABP waveform
% 'PPG' for PPG waveform
% HRVparams - struct of settings for HRV analysis
% subjectID - string to identify current subject
%
% OUTPUT
% Annotation files
%
% DEPENDENCIES & LIBRARIES:
% PhysioNet Cardiovascular Signal Toolbox
% https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox
%
% REFERENCE:
% Vest et al. "An Open Source Benchmarked HRV Toolbox for Cardiovascular
% Waveform and Interval Analysis" Physiological Measurement (In Press), 2018.
%
% REPO:
% https://github.com/cliffordlab/PhysioNet-Cardiovascular-Signal-Toolbox
% ORIGINAL SOURCE AND AUTHORS:
% Written by Giulia Da Poian (giulia.dap@gmail.com) on Sep 6, 2017.
% Dependent scripts written by various authors
% (see functions for details)
% COPYRIGHT (C) 2018
% LICENSE:
% This software is offered freely and without warranty under
% the GNU (v3 or later) public license. See license file for
% more information
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NmbOfSigs = size(Waveform,2);
AnnotationFolder = strcat(HRVparams.writedata, filesep, 'Annotation', filesep);
if ~exist(AnnotationFolder, 'dir')
mkdir(AnnotationFolder)
end
addpath(AnnotationFolder)
rr = [];
t = [];
for i = 1:NmbOfSigs
current_type = Type{i};
switch current_type
case 'PPG'
% PPG Detection - qppg
[PPGann] = qppg(Waveform(:,i),HRVparams.Fs);
% PPG SQI
[ppgsqi,ppgsqiMatrix,~,~] = PPG_SQI_buf(Waveform(:,i),PPGann,[],[],HRVparams.Fs);
ppgsqi_numeric = round(mean(ppgsqiMatrix(:,1:3),2)');
% Write PPG annotations
write_ann(strcat(AnnotationFolder, subjectID),HRVparams,'ppg',PPGann);
write_ann(strcat(AnnotationFolder, subjectID),HRVparams,'sqippg',PPGann(1:length(ppgsqi)),char(ppgsqi),ppgsqi_numeric);
rr = diff(PPGann)./HRVparams.Fs;
t = PPGann(2:end)./HRVparams.Fs;
case 'ABP'
% ABP
ABPann = run_wabp(Waveform(:,i));
% ABP SQI
ABPfeatures = abpfeature(Waveform(:,i), ABPann, HRVparams.Fs);
[BeatQ, ~] = jSQI(ABPfeatures, ABPann, Waveform(:,i));
if ~isempty(detectedQRS)
% Pulse Transit Time
ptt = pulsetransit(detectedQRS, ABPann);
% Plot BP vs PTT
syst = ABPfeatures(:,2);
if HRVparams.gen_figs
figure;
plot(syst,ptt(:,3)./HRVparams.Fs,'o');
xlabel('BP (mmHg)'); ylabel('PTT (s)');
title('Pulse Transit Time - BP vs PTT (ABP - QRS)')
end
end
% Write ABP annotations
write_ann(strcat(AnnotationFolder, subjectID),HRVparams,'abpm',ABPann);
write_ann(strcat(AnnotationFolder, subjectID),HRVparams,'sqiabp',BeatQ(:,1));
end
end