HRV -> Mood
Dependencies: MAX30101 Hexi_KW40Z Hexi_OLED_SSD1351
Revision 10:3ddf92687e34, committed 2019-03-16
- 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));