| Algorithm 2. Data Preprocessing and Feature Extraction |
| 1: Data Preprocessing 2: for each d in participant data do 3: s ← MAF(PPG) {moving average filter} 4: d′ ← SGF(s) {Savitzky–Golay filter} 5: X ← a(n) 6: end for 7: Feature Extraction 8: for each d′ do 9: AR ← CalcAR(d′) 10: Fppg ← {AR.F 1, AR.F 2, AR.F 3, AR.F 4, AR.F 5} 11: KTE ← CalcKTE(d′) 12: FKT E ← {KTE.µ, KTE.skew, KTE.IQR, KTE.σ} 13: HRV ← CalcHRV(d′) 14: FHRV ← {HRV.α, HRV.β, HRV.IQR, HRV.skew} 15: SE ← CalcSE(d′) 16: FSE ← {SE.α, SE.β, SE.IQR, SE.skew} 17: EP ← CalcLogEP(d′) 18: FLogEP ← {EP.AR.F 1, EP.AR.F 2, EP.AR.F 3, EP.AR.F 4, EP.AR.F 5, EP.β, EP.IQR} 19: PTT ← CalcPTT(d′) 20: FP T T ← {PTT.α, PTT.β, PTT.IQR, PTT.skew} 21: PPI ← CalcPPI(d′) 22: FP P I ← {PPI.α, PPI.β, PPI.IQR, PPI.skew} 23: FV ← Combine(Fppg, FKT E, FHRV, FSE, FLogEP, FP T T, FP P I ) 24: end for 25: Data Splitting 26: TR, TE ← Split(FV, 0.8) {80:20 Split} |