Skip to main content
. 2025 Mar 18;25(6):1868. doi: 10.3390/s25061868
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}