HRV -> Mood

Dependencies:   MAX30101 Hexi_KW40Z Hexi_OLED_SSD1351

Files at this revision

API Documentation at this revision

Comitter:
jeannie9809
Date:
Sat Mar 16 06:13:01 2019 +0000
Parent:
9:83dcb7382516
Child:
11:58a443cf3f7c
Commit message:
done with hrv finally

Changed in this revision

8cee5929f4d8/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/8cee5929f4d8/main.cpp	Sat Mar 16 05:38:01 2019 +0000
+++ b/8cee5929f4d8/main.cpp	Sat Mar 16 06:13:01 2019 +0000
@@ -270,9 +270,12 @@
         }
         movave[i] = (double)(movave[i]/avecap);
     }
+    
     // normalize ppg
     for(i = 0; i < num_samples; i++) {
         ppg[i] = ppg[i] - (int)movave[i];
+        if(ppg[i] > 1000 || ppg[i] < -1000)
+            ppg[i] = 0;
     }
     
     // smoothing curve
@@ -284,20 +287,21 @@
     // AMPD Algorithm
     const int kcap = 25;
     int m[kcap][num_samples];
-    for(int k = 0; k < kcap; k++) {
+    for(int k = 1; k <= kcap; k++) {
         for(i = 1; i < num_samples; i++) {
             if(i-1 < 0 || i-k-1 < 0 || i+k-1 >= num_samples)
-                m[k][i] = 0;
+                m[k-1][i] = 0;
             else if(ppg[i-1] > ppg[i-k-1] && ppg[i-1] > ppg[i+k-1])
-                m[k][i] = 1;
+                m[k-1][i] = 1;
             else
-                m[k][i] = 0;
+                m[k-1][i] = 0;
         }
     }
     int max_mult[num_samples];
     for(i = 0; i < num_samples; i++) { // max_mult = m(1,:)';
         max_mult[i] = m[0][i];
     }
+    
     for(int k = 1; k < kcap; k++) {
         for(i = 0; i < num_samples; i++) {
             max_mult[i] = max_mult[i]*m[k][i];
@@ -307,8 +311,10 @@
     // extract times that are max
     int num_max = 0;
     for(i = 0; i < num_samples; i++) {
-        num_max = max_mult[i];
+        num_max = num_max + max_mult[i];
     }
+//    printf("num_max = %d    ", num_max);
+    
     vector<double> time_of_max;
     vector<int> index_of_max;
     vector<int> max_points;
@@ -329,7 +335,7 @@
         index_r.push_back(index_of_max.at(i+1) - index_of_max.at(i));
         mean_inter_time = mean_inter_time + r.at(i);
     }
-    printf("num_max = %d    ", num_max);
+    
     //printf("r: %.2f %.2f %.2f   ", r.at(0), r.at(1), r.at(2));
     mean_inter_time = (double)(mean_inter_time/(num_max-1));
     
@@ -352,9 +358,23 @@
         SDNN_doub = SDNN_doub + (r.at(i)-mean_inter_time)*(r.at(i)-mean_inter_time);
     }
     SDNN = (int)(sqrt(SDNN_doub/(num_max-1))*1000);
-    printf("SDNN = %d\r\n", SDNN);
+//    printf("SDNN = %d\r\n", SDNN);
     
-    ready = false;
+    // TIME TO CALCULATE HF/LF
+    // FFT
+    /*
+    double fftppg[num_samples];
+    for(i = 0; i < num_samples; i++) {
+        double real = 0;
+        double im = 0;
+        for(j = 0; j < num_samples; j++) {
+            real = real + ppg[j] * cos((double)(2*M_PI)*(double)((double)(j*i)/num_samples));
+            im = im + ppg[j] * sin((double)(2*M_PI)*(double)((double)(j*i)/num_samples));
+        }
+        fftppg[i] = sqrt
+    }
+    */
+    ready = false; // last line
     }
     
 }
@@ -364,7 +384,7 @@
 {
 //    printf("Hello world.\r\n");
     for(int i = 0; i < num_samples; i++) {
-        TIME[i] = (double)(i*(30.0/num_samples));
+        TIME[i] = (double)(i*(12.0/num_samples)); // change to 30.0 later
     }
     
     t.start(callback(&evqueue, &EventQueue::dispatch_forever));