The C program below determines the period of minimum activity using the techniques described above. Its input should be a list of instantaneous heart rates (in bpm) at uniform intervals of 0.5 seconds; tach[3] can produce these data given a list of beat arrival times. The program makes a measurement of the activity index once every 2.5 minutes; each measurement reflects activity over the previous five minutes.
#include <stdio.h> #include <math.h> #define DT (0.5) #define N 300 main() { double a, amin = -1.0, h[2*N], hs0, hs1, mh, p, s; int i = 0, i0 = N; long t, tmin; for (t = 1L; scanf("%lf", &h[i]) == 1; t++) { if (++i >= i0+N) { if (amin < 0.) for (i = 0, hs0 = 0.; i < N; i++) hs0 += h[i]; else hs0 = hs1; for (i = i0, hs1 = 0.; i < i0+N; i++) hs1 += h[i]; mh = (hs0 + hs1)/(2*N); s = fabs(hs0 - hs1)/N; for (i = 0, p = 0.; i < 2*N; i++) p += (h[i] - mh)*(h[i] - mh); p /= 2*N; if (p > 100.) p = 100.; a = sqrt((mh-40)*(mh-40) + 10*s*s + 100*p); if (mh < 25.) a += 25. - mh; if (a < amin || amin < 0.) { amin = a; tmin = t; } i = i0 = N - i0; } } if (amin >= 0.) printf("Minimum activity from %g to %g\n", (tmin - 2*N)*DT, tmin*DT); }
Author's address: MIT Room E25-505A, Cambridge, MA 02139 USA.