Created
July 1, 2015 04:35
-
-
Save mfurquimdev/380b5e9536e314770e11 to your computer and use it in GitHub Desktop.
Heart frequency analysis
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <cstdlib> | |
#include <cmath> | |
using namespace std; | |
static const int WINDOW = 120000; | |
float sdnn_function (float*, int); | |
float rmssd_function (float*, int); | |
float frequency (int, int); | |
float sdnn_function (float* rr, int nr) | |
{ | |
float sdnn = 0; | |
float sum = 0; | |
float avg = 0; | |
for (int i = 0; i < nr; i++) | |
sum += rr[i]; | |
avg = sum / nr; | |
cout << "AVG\t" << avg << endl; | |
sum = 0; | |
for (int i = 0; i < nr; i++) | |
sum += pow ((rr[i] - avg), 2); | |
sdnn = sum / (nr - 1); | |
sdnn = sqrt(sdnn); | |
return sdnn; | |
} | |
float rmssd_function (float* rr, int nr) | |
{ | |
float rmssd = 0; | |
float sum = 0; | |
for (int i = 1; i < nr; i++) | |
sum += pow ((rr[i] - rr[i - 1]), 2); | |
rmssd = sum / (nr - 1); | |
rmssd = sqrt(rmssd); | |
return rmssd; | |
} | |
float frequency (int sum, int nr) | |
{ | |
float fc; | |
sum /= 60000; | |
fc = nr/sum; | |
return fc; | |
} | |
int main (int argc, char* argv[]) | |
{ | |
int* rr; | |
int* rr2; | |
int sum = 0; | |
int samples = atoi(argv[1]); | |
rr = (int*) malloc (sizeof(int) * samples); | |
rr2 = (int*) malloc (sizeof(int) * samples); | |
for (int i = 0; i < samples; i++) { | |
cin >> rr[i]; | |
rr2[i] = 0.0; | |
} | |
int i = samples - 1; | |
int nr = 0; | |
while (sum < WINDOW) | |
{ | |
sum += rr[i]; | |
rr2[samples - (i + 1)] = rr[i]; | |
i--; | |
nr++; | |
} | |
float soma = 0; | |
float *nrm; | |
nrm = (float*) malloc (sizeof(float) * nr); | |
for (i = nr - 1; i >= 0; i--){ | |
nrm[nr - (i + 1)] = rr2[i]; | |
soma += rr2[i]; | |
} | |
float sdnn = sdnn_function (nrm, nr); | |
float rmssd = rmssd_function (nrm, nr); | |
cout << "SDNN\t" << sdnn << endl; | |
cout << "RMSSD\t" << rmssd << endl; | |
float fc = frequency(soma, nr); | |
cout << "Frqncy\t" << fc << endl; | |
float media = soma / nr; | |
float* c_nrm; | |
c_nrm = (float*) malloc (sizeof(float) * samples); | |
for (i = 0; i < nr; i++) | |
c_nrm[i] = nrm[i]; | |
cout << endl << "CORRIGINDO...\n" << endl; | |
for (int count = 0; count < 8; count ++) | |
{ | |
switch (count) | |
{ | |
case 0: | |
cout << "\nDividido pela Media." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] / media; | |
break; | |
case 1: | |
cout << "\nDividido pela Raiz da Media." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] / sqrt (media); | |
break; | |
case 2: | |
cout << "\nDividido pela Media ao Quadrado." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] / pow (media,2); | |
break; | |
case 3: | |
cout << "\nDividido pela Media a Quarta." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] / pow (media,4); | |
break; | |
case 4: | |
cout << "\nMultiplicado pela Media." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] * media; | |
break; | |
case 5: | |
cout << "\nMultiplicado pela Raiz da Media." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] * sqrt (media); | |
break; | |
case 6: | |
cout << "\nMultiplicado pela Media ao Quadrado." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] * pow (media,2); | |
break; | |
case 7: | |
cout << "\nMultiplicado pela Media a Quarta." << endl; | |
for (i = 0; i < nr; i++) | |
nrm[i] = c_nrm[i] * pow (media,4); | |
break; | |
default: | |
cout << "ERROR!" << endl; | |
break; | |
} | |
sdnn = sdnn_function (nrm, nr); | |
cout << "SDNN\t" << sdnn << endl; | |
rmssd = rmssd_function (nrm, nr); | |
cout << "RMSSD\t" << rmssd << endl; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment