BioSignalPi  v2
hrvanalysis.cpp
Go to the documentation of this file.
1 /*
2  * hrvanalysis.cpp
3  *
4  * Created on: Nov 23, 2015
5  * Author: martin
6  */
7 
8 #include "hrvanalysis.h"
9 
10 #include <cmath>
11 #include <math.h>
12 #include <stddef.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include <QDebug>
16 
17 
18 
19 #include "HRV/timeDomainHRV_emxAPI.h"
20 #include "HRV/timeDomainHRV_terminate.h"
21 #include "HRV/timeDomainHRV_initialize.h"
22 
23 #include "HRV/freqDomainHRV_emxAPI.h"
24 #include "HRV/freqDomainHRV_terminate.h"
25 #include "HRV/freqDomainHRV_initialize.h"
26 
27 
28 #include "HRV/preProcessIBI_terminate.h"
29 #include "HRV/preProcessIBI_initialize.h"
30 #include "HRV/preProcessIBI.h"
31 #include "HRV/preProcessIBI_types.h"
32 
33 
34 void performTimeDomainHrv(const QVector<double>* ibiData, struct0_T *output) {
35  timeDomainHRV_initialize();
36  preProcessIBI_initialize();
37 
38  emxArray_real_T *ibi, *nibi;
39  emxArray_boolean_T *art;
40 
41  emxInitArray_real_T(&nibi, 2);
42  emxInitArray_boolean_T(&art, 1);
43 
44 
45  // Initialize function 'timeDomainHRV' input arguments.
46  // Initialize function input argument 'ibi'.
47  int i;
48  ibi = argInit_Unboundedx2_real_T(ibiData);
49  preProcessIBI(ibi, nibi, art);
50  // Call the entry-point 'timeDomainHRV'.
51  qDebug() << "Terminate Matlab function" << endl;
52  timeDomainHRV(nibi, 100, 10, output);
53  qDebug() << "Terminate Matlab function" << endl;
54  emxDestroyArray_real_T(ibi);
55  emxDestroyArray_real_T(nibi);
56  emxDestroyArray_boolean_T(art);
57  // qDebug() << "Terminate Matlab function" << endl;
58 
59  timeDomainHRV_terminate();
60  preProcessIBI_terminate();
61 }
62 void performFreqDomainHrv(const QVector<double>* ibiData,const QVector<double>* timeData, structFreq_T *output) {
63  freqDomainHRV_initialize();
64  preProcessIBI_initialize();
65  emxArray_real_T *ibi, *nibi;
66  emxArray_boolean_T *art;
67 
68  emxInitArray_real_T(&nibi, 2);
69  emxInitArray_boolean_T(&art, 1);
70  // Initialize function 'timeDomainHRV' input arguments.
71  // Initialize function input argument 'ibi'.
72  int i;
73  ibi = argInit_Unboundedx2_real_T(ibiData,timeData);
74  preProcessIBI(ibi, nibi, art);
75  // Call the entry-point 'timeDomainHRV'.
76  qDebug() << "Terminate Matlab function" << endl;
77  freqDomainHRV(nibi,output);
78  qDebug() << "Terminate Matlab function" << endl;
79  emxDestroyArray_real_T(ibi);
80  emxDestroyArray_real_T(nibi);
81  emxDestroyArray_boolean_T(art);
82  // qDebug() << "Terminate Matlab function" << endl;
83 
84  freqDomainHRV_terminate();
85  preProcessIBI_terminate();
86 
87 }
88 
89 emxArray_real_T *argInit_Unboundedx2_real_T(const QVector<double>* ibiData,const QVector<double>* timeData)
90 {
91 
92  emxArray_real_T *result;
93  int iv1[2] = { ibiData->length(), 2 };
94 
95  int idx0;
96  int idx1;
97 
98  // Set the size of the array.
99  // Change this size to the value that the application requires.
100  result = emxCreateND_real_T(2, *(int (*)[2])&iv1[0]);
101 
102  // result = emxCreateND_real_T(2, *(int (*)[ibiData->length()])&iv1[0]);
103 
104  // Loop over the array to initialize each element.
105  qDebug() << result->size[0U] << endl
106  << result->size[0] << endl
107  << ibiData->length() <<endl
108  << iv1[0] <<endl;
109  int index=0;
110  for (idx0 = 0; idx0 < result->size[0U]; idx0++) {
111  for (idx1 = 0; idx1 < 2; idx1++) {
112  // Set the value of the array element.
113  // Change this value to the value that the application requires.
114  if (idx1==0)
115  result->data[idx0 + result->size[0] * idx1] = (timeData->at(index)*1000);
116  else
117  result->data[idx0 + result->size[0] * idx1] = (ibiData->at(index++)*1000);
118  }
119  }
120 
121  qDebug() << "Created ibiFile in argInit_Unboundedx2_real_T" << endl;
122  return result;
123 }
124 
125 emxArray_real_T *argInit_Unboundedx2_real_T(const QVector<double>* ibiData)
126 {
127 
128  emxArray_real_T *result;
129  int iv1[2] = { ibiData->length(), 2 };
130 
131  int idx0;
132  int idx1;
133 
134  // Set the size of the array.
135  // Change this size to the value that the application requires.
136  result = emxCreateND_real_T(2, *(int (*)[2])&iv1[0]);
137 
138  // result = emxCreateND_real_T(2, *(int (*)[ibiData->length()])&iv1[0]);
139 
140  // Loop over the array to initialize each element.
141  qDebug() << result->size[0U] << endl
142  << result->size[0] << endl
143  << ibiData->length() <<endl
144  << iv1[0] <<endl;
145  int timeCount=0,index=0;
146 
147  for (idx0 = 0; idx0 < result->size[0U]; idx0++) {
148  for (idx1 = 0; idx1 < 2; idx1++) {
149  // Set the value of the array element.
150  // Change this value to the value that the application requires.
151  if (idx1==0) {
152  result->data[idx0 + result->size[0] * idx1] = timeCount;
153  timeCount+=ibiData->at(index);
154  }
155  else
156  result->data[idx0 + result->size[0] * idx1] = (ibiData->at(index++));
157  }
158  }
159  return result;
160 }
161 
162 emxArray_real_T *argInit_Unboundedx2_real_T()
163 {
164 
165  emxArray_real_T *result;
166  static int iv1[2] = { 2, 2 };
167 
168  int idx0;
169  int idx1;
170 
171  // Set the size of the array.
172  // Change this size to the value that the application requires.
173  result = emxCreateND_real_T(2, *(int (*)[100])&iv1[0]);
174 
175  // Loop over the array to initialize each element.
176  for (idx0 = 0; idx0 < result->size[0U]; idx0++) {
177  for (idx1 = 0; idx1 < 2; idx1++) {
178  // Set the value of the array element.
179  // Change this value to the value that the application requires.
180  result->data[idx0 + result->size[0] * idx1] = 1.075;
181  }
182  }
183 
184  qDebug() << "Created ibiFile in argInit_Unboundedx2_real_T" << endl;
185  return result;
186 }
187 
Collection of functions used to interact with the Matlab Coder generated HRV-functions.
void performTimeDomainHrv(const QVector< double > *ibiData, struct0_T *output)
Performs the Statistical Time Domain calculations for HRV Analysis.
Definition: hrvanalysis.cpp:34
emxArray_real_T * argInit_Unboundedx2_real_T(const QVector< double > *ibiData, const QVector< double > *timeData)
Creates the emxArray_real_T needed for performTimeDomainHrv() The emxArray_real_T is the input vector...
Definition: hrvanalysis.cpp:89
void performFreqDomainHrv(const QVector< double > *ibiData, const QVector< double > *timeData, structFreq_T *output)
Performs calculations for Frequency Domain HRV Analysis.
Definition: hrvanalysis.cpp:62