% _________________________________________________________________________ % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ % PREDICTION OF ACUTE HYPOTENSIVE EPISODES USING NEURAL NETWORK MULTIMODELS % _________________________________________________________________________ % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ % Copyright (C) 2009 % : Jorge Henriques ... , % : Teresa Rocha ... % This software is released under the terms of the GNU % General Public License (http://www.gnu.org/copyleft/gpl.html) % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ % mainPreprocessingABPSignal.m %__________________________________________________________________________ % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ %__________________________________________________________________________ % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ % Prepare datasets (A, B, H, C) % 1. Load a raw signal (ABP in this case) from SOURCE folder % 2. Preprocessing (missing values + noise reduction) % 3. Save the final result TARGET folder %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ INPUT % : Training {H, C} % source= '..\MIMIC_TRAIN_TXT\'; % target= '..\dataTrain\'; % : Testing {A, B} % source= '..\MIMIC_TEST_MAT\'; % target= '..\dataTest\'; %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ OUTPUT % DAT=[ YR YF YA] % : YR - Raw data (660x1) - minutes (10+1 h : before/after t0) % : YF - Filter data (660x1) - minutes (10+1 h : before/after t0) % : YA - AHE episode (660x1) - minutes (10+1 h : before/after t0) % : for dataSet A and B [600:660]=value(600) %__________________________________________________________________________ % จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ clc; clear; close all warning off showDAT= 1; %.. (0/1) Show results saveDAT= 1; %.. (0/1) Save results disp('___________________________________________________________________') disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ') disp(' mainPreprocessingABPSignal ') disp('___________________________________________________________________') disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ') pause(1) %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ % DEFINITIONS 1. %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ %__________________________________________________________________________ % Data Set - 1.1 %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ option=menu(' -------- DATASET -------- ', ... ' . H ', ' . C ',' . A ',' . B '); switch option case 1; dataSet='H'; case 2; dataSet='C'; case 3; dataSet='A'; case 4; dataSet='B'; end if dataSet=='A' | dataSet=='B' numSet='1' else option=menu(' -------- DATASET -------- ', ' . 1 ', ' . 2 '); switch option case 1; numSet='1'; case 2; numSet='2'; end end sinal ='BP'; %.. Only ABP is considered %__________________________________________________________________________ % Time - 1.2 %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ BEFORE=600; %... 10 hours before AFTER = 60; %... 1 hours after mmHG = 60; %... Limit value for computing AHE episodes %__________________________________________________________________________ % Data Sets - 1.3 %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ %Downloaded from Physionet/MIMIC II % 1.Hour 2.Day % 3.HR 4.ABPSys 5.ABPDias 6.ABPMean 7.PULSE % 8.RESP 9.SpO2 10.NBPSys 11.NBPDias 12.NBPMean ABP=6; %.. Number of column corresponding to ABP listH1={ 'h1_a40439', 'h1_a40493', 'h1_a40764', 'h1_a40834', 'h1_a40928', ... 'h1_a41200', 'h1_a41447', 'h1_a41770', 'h1_a41835', 'h1_a41882', ... 'h1_a41925', 'h1_a42277', 'h1_a42397', 'h1_a42410', 'h1_a42928'}; indBPH1= ABP*ones(length(listH1),1); indBPH1([2 8])=8; %..... consider column 8 for dataSet 2 and 8 listH2={ 'h2_a40006', 'h2_a40012', 'h2_a40050', 'h2_a40051', 'h2_a40064', ... 'h2_a40076', 'h2_a40096', 'h2_a40099', 'h2_a40113', 'h2_a40119', ... 'h2_a40125', 'h2_a40127', 'h2_a40154', 'h2_a40164', 'h2_a40172'}; indBPH2= ABP*ones(length(listH2),1); indBPH2([9 13])=8; %..... consider column 8 for dataSet 9 and 13 listC1={ 'c1_a40282', 'c1_a40473', 'c1_a40551', 'c1_a40802', 'c1_a40921', ... 'c1_a41137', 'c1_a41177', 'c1_a41385', 'c1_a41434', 'c1_a41466', ... 'c1_a41495', 'c1_a41664', 'c1_a41934', 'c1_a42141', 'c1_a42259' }; indBPC1= ABP*ones(length(listC1),1); listC2={ 'c2_a40207', 'c2_a40215', 'c2_a40225', 'c2_a40234', 'c2_a40260', ... 'c2_a40264', 'c2_a40277', 'c2_a40306', 'c2_a40329', 'c2_a40355', ... 'c2_a40374', 'c2_a40376', 'c2_a40384', 'c2_a40408', 'c2_a40424' }; indBPC2= ABP*ones(length(listC2),1); indBPC2([4])=8; %..... consider column 8 for dataSet 4 listA1={... '101bnm','102bnm','103bnm','104bnm','105bnm', ... '106bnm','107bnm','108bnm','109bnm','110bnm'}; listB1={... '201bnm','202bnm','203bnm','204bnm','205bnm', ... '206bnm','207bnm','208bnm','209bnm','210bnm', ... '211bnm','212bnm','213bnm','214bnm','215bnm', ... '216bnm','217bnm','218bnm','219bnm','220bnm', ... '221bnm','222bnm','223bnm','224bnm','225bnm', ... '226bnm','227bnm','228bnm','229bnm','230bnm', ... '231bnm','232bnm','233bnm','234bnm','235bnm', ... '236bnm','237bnm','238bnm','239bnm','240bnm'}; %__________________________________________________________________________ % Source and Target - 1.4 %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ if dataSet=='H' | dataSet=='C' source= '..\MIMIC_TRAIN_TXT\'; target= '..\dataTrain\'; cmd = [ 'list = list' char(dataSet) char(numSet) ';']; eval(cmd) cmd=['t0=load(''' source char(dataSet) char(numSet) '_Indice.txt'');']; eval(cmd); end if dataSet=='A' | dataSet=='B' source ='..\MIMIC_TEST_MAT\'; target ='..\dataTest\'; cmd = [ 'list = list' char(dataSet) char(numSet) ';']; eval(cmd) end %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ % PREPROCESSING 2. %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ clc for itlist=1:length(list) file = char(list(itlist)); %______________________________________________________________________ % Training Data {H,C} %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ if dataSet=='H' | dataSet=='C' %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data cmd=[' Yraw=load(''' source file '.txt'');']; eval(cmd); cmd=[ 'indBP=indBP' char(dataSet) char(numSet) '(itlist);']; eval(cmd) Yraw = Yraw(:,indBP); %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Missing+Noise Yraw = mmMissingValues(Yraw); Yfil = mmFilter(Yraw, 0.8, 1); %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ t0 = start of AHE indt0= t0(itlist,1); Yahe = 0*Yraw; Yahe(indt0:end) = mmHG; %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ 10+1 h(before+after) YR=Yraw(indt0-BEFORE+1:indt0+AFTER); YF=Yfil(indt0-BEFORE+1:indt0+AFTER); YA=Yahe(indt0-BEFORE+1:indt0+AFTER); YRFA=[YR YF YA]; end %______________________________________________________________________ % Testing Data {A,B} %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ if dataSet=='A' | dataSet=='B' %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data cmd=[' Yraw=load(''' source file ''');']; eval(cmd) Yraw= mmBaseGain(Yraw.val, itlist, sinal, dataSet); %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Resampling+Missing+Noise Yraw = mmResampling(Yraw, 60); Yraw = mmMissingValues(Yraw); Yfil = mmFilter(Yraw, 0.75, 1); %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ 10+1 h(before+after) YP=Yfil(end)*ones(AFTER,1); % Forecast = After = last value YR=[ Yraw; YP]; YF=[ Yfil; YP]; YA=[ 0*Yfil; mmHG*ones(size(YP))]; YRFA=[YR YF YA]; end %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ % SAVE 3. %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ if saveDAT DAT=YRFA; saveFile=[ 'save ' char(target) char(sinal) '_' ... char(dataSet) char(numSet) '_' num2str(itlist) ' DAT' ]; eval(saveFile); end %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ % SHOW 4. %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ if showDAT mmMaximize N=size(YRFA,1); figure(1) hold on plot(1:N,YRFA(:,1),'r', 1:N,YRFA(:,2),'b', 1:N,YRFA(:,3),'k',... 'LineWidth',1.5) plot(1:N,60*ones(N,1),'g:') axis([0 BEFORE+AFTER -5 max(max(YRFA))+5 ]) legend('Missing','Filter','AHE') strTitle=[ 'file: ' char(file) ' # ' ... char(dataSet) char(numSet) '-' num2str(itlist) ]; mmLabel(strTitle,'minutes','mmHG') %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ pause close all end end clc disp('___________________________________________________________________') disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ') disp([' Dataset ' char(dataSet) ' has been processed ']) disp('___________________________________________________________________') disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ') pause(1) option=1;