DATA PROCESSING FOR SPO2 AND HR

Dependents:   MAX30100_FirstTry MAX30100_V04

Committer:
Ferszt
Date:
Tue May 30 00:59:56 2017 +0000
Revision:
4:ce356ed18c86
Parent:
1:7e5b24227d0a
Ultima prueba

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cesarcazal 0:264c403954d8 1 /*int muestras_50hz[200];
cesarcazal 0:264c403954d8 2 int matriz_minimos[30][2], matriz_maximos[30][2],max_min_period[2];
cesarcazal 0:264c403954d8 3 int pico_pico,cresta, valle, cantidad;
cesarcazal 0:264c403954d8 4 float frecuencia,periodo;*/
cesarcazal 0:264c403954d8 5
cesarcazal 0:264c403954d8 6 //int index, aux1, nmuestra;
cesarcazal 0:264c403954d8 7
cesarcazal 0:264c403954d8 8 /*EJEMPLO DE UTILIZACION DEL SISTEMA DE PROCESAMIENTO.
cesarcazal 0:264c403954d8 9 int main(int argc, char *argv[]) {
cesarcazal 0:264c403954d8 10 promedio(muestras_100hz, muestras_50hz);
cesarcazal 0:264c403954d8 11 periodo = valores(muestras_50hz,matriz_minimos,matriz_maximos,max_min_period);
cesarcazal 0:264c403954d8 12 for(aux1=0;aux1<30;aux1++){
cesarcazal 0:264c403954d8 13 printf("%d,%d \n%d,%d \n",matriz_maximos[aux1][0],matriz_maximos[aux1][1],matriz_minimos[aux1][0],matriz_minimos[aux1][1]);
cesarcazal 0:264c403954d8 14 //printf("%d , %d \n",matriz_minimos[aux1][0],matriz_minimos[aux1][1]);
cesarcazal 0:264c403954d8 15 }*/
cesarcazal 0:264c403954d8 16 /* pico_pico=max_min_period[0]-max_min_period[1];
cesarcazal 0:264c403954d8 17 frecuencia=60/(periodo*0.02);
cesarcazal 0:264c403954d8 18 //printf("el valor medio del maximo es %d\n", pico_pico);
cesarcazal 0:264c403954d8 19 printf("el valor medio del pico_pico es %f\n", frecuencia);
cesarcazal 0:264c403954d8 20 return 0;
cesarcazal 0:264c403954d8 21 }*/
cesarcazal 0:264c403954d8 22
cesarcazal 1:7e5b24227d0a 23 float valores(int muestras[200],int resultados[2]){//EMITE EL PERIODO, EL VALOR MAXIMO Y EL VALOR MINIMO COMO RESPUESTA.
cesarcazal 0:264c403954d8 24 int a,b=0,posibilidad_anteriores=0,posibilidad_sucesores=0,indice=0;
cesarcazal 0:264c403954d8 25 int posicion=0,Vpp,minimos=4194303, prom_max=0, prom_min=0, periodo_max=0, periodo_min=0,maximos=-4194303, magnitud=4194303, copy_min[30][2],copy_max[30][2];
cesarcazal 1:7e5b24227d0a 26 int min_pos[30][2]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
cesarcazal 1:7e5b24227d0a 27 int max_pos[30][2]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
cesarcazal 0:264c403954d8 28 float res_period,num_prom;
cesarcazal 0:264c403954d8 29 for(a=6;a<194;a++){
Ferszt 4:ce356ed18c86 30 if((muestras[a]<magnitud)){//segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 31 magnitud=muestras[a];
cesarcazal 0:264c403954d8 32 posicion=a;
cesarcazal 0:264c403954d8 33 for (b=1;b<7;b++){
Ferszt 4:ce356ed18c86 34 if((muestras[a]<=muestras[a-b])){//segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 35 posibilidad_anteriores++;
cesarcazal 0:264c403954d8 36 }
Ferszt 4:ce356ed18c86 37 if((muestras[a]<=muestras[a+b])){//segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 38 posibilidad_sucesores++;
cesarcazal 0:264c403954d8 39 }
cesarcazal 0:264c403954d8 40 }
cesarcazal 0:264c403954d8 41 if ((posibilidad_anteriores>5)&&(posibilidad_sucesores>5)){
cesarcazal 0:264c403954d8 42 min_pos[indice][0]=magnitud;
cesarcazal 0:264c403954d8 43 min_pos[indice][1]=posicion;
cesarcazal 0:264c403954d8 44 if(magnitud<minimos)
cesarcazal 0:264c403954d8 45 minimos=magnitud;
cesarcazal 0:264c403954d8 46 indice++;
cesarcazal 0:264c403954d8 47 a=a+10;
cesarcazal 0:264c403954d8 48 }
cesarcazal 0:264c403954d8 49 magnitud=4194303;
cesarcazal 0:264c403954d8 50 posibilidad_anteriores=0;
cesarcazal 0:264c403954d8 51 posibilidad_sucesores=0;
cesarcazal 0:264c403954d8 52 }
cesarcazal 0:264c403954d8 53 }
cesarcazal 0:264c403954d8 54 indice=0;
cesarcazal 0:264c403954d8 55 magnitud=-4194303;
cesarcazal 0:264c403954d8 56 posicion=0;
cesarcazal 0:264c403954d8 57 for (a=6;a<194;a++){
Ferszt 4:ce356ed18c86 58 if((muestras[a]>magnitud)){//EL 125000 DEBE SER 45000 segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 59 magnitud=muestras[a];
cesarcazal 0:264c403954d8 60 posicion=a;
cesarcazal 0:264c403954d8 61 for (b=1;b<7;b++){
Ferszt 4:ce356ed18c86 62 if((muestras[a]>=muestras[a-b])){//EL 125000 DEBE SER 45000 segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 63 posibilidad_anteriores++;
cesarcazal 0:264c403954d8 64 }
Ferszt 4:ce356ed18c86 65 if((muestras[a]>=muestras[a+b])){//EL 125000 DEBE SER 45000 segun recomendacion de https://www.youtube.com/watch?v=36cELpNGJZY
cesarcazal 0:264c403954d8 66 posibilidad_sucesores++;
cesarcazal 0:264c403954d8 67 }
cesarcazal 0:264c403954d8 68 }
cesarcazal 0:264c403954d8 69 if ((posibilidad_anteriores>5)&&(posibilidad_sucesores>5)){
cesarcazal 0:264c403954d8 70 max_pos[indice][0]=magnitud;
cesarcazal 0:264c403954d8 71 max_pos[indice][1]=posicion;
cesarcazal 0:264c403954d8 72 if(magnitud>maximos)
cesarcazal 0:264c403954d8 73 maximos=magnitud;
cesarcazal 0:264c403954d8 74 indice++;
cesarcazal 0:264c403954d8 75 a=a+10;
cesarcazal 0:264c403954d8 76 }
cesarcazal 0:264c403954d8 77 posibilidad_anteriores=0;
cesarcazal 0:264c403954d8 78 posibilidad_sucesores=0;
cesarcazal 0:264c403954d8 79 magnitud=-4194303;
cesarcazal 0:264c403954d8 80 }
cesarcazal 0:264c403954d8 81 }
cesarcazal 0:264c403954d8 82 a=0;
cesarcazal 0:264c403954d8 83 b=0;
cesarcazal 0:264c403954d8 84 indice=0;
cesarcazal 0:264c403954d8 85 Vpp=maximos-minimos;
cesarcazal 0:264c403954d8 86 if (max_pos[0][1]<min_pos[0][1]){
cesarcazal 0:264c403954d8 87 if(((max_pos[0][0]-min_pos[0][0])*2)<Vpp){
cesarcazal 0:264c403954d8 88 max_pos[0][1]=401;
cesarcazal 0:264c403954d8 89 max_pos[0][0]=maximos;
cesarcazal 0:264c403954d8 90 min_pos[0][1]=401;
cesarcazal 0:264c403954d8 91 min_pos[0][0]=minimos;
cesarcazal 0:264c403954d8 92
cesarcazal 0:264c403954d8 93 }
cesarcazal 0:264c403954d8 94 a=1;
cesarcazal 0:264c403954d8 95 }
cesarcazal 0:264c403954d8 96 while ((max_pos[a][1])!=0){
cesarcazal 0:264c403954d8 97 if((((max_pos[a][0]-min_pos[b][0])*2)<Vpp)&&((max_pos[a][0]-min_pos[b][0])<(max_pos[a][0]-min_pos[b+1][0]))){
cesarcazal 0:264c403954d8 98 max_pos[a][1]=401;
cesarcazal 0:264c403954d8 99 min_pos[b][1]=401;
cesarcazal 0:264c403954d8 100 max_pos[a][0]=maximos;
cesarcazal 0:264c403954d8 101 min_pos[b][0]=minimos;
cesarcazal 0:264c403954d8 102 }
cesarcazal 0:264c403954d8 103 else{
cesarcazal 0:264c403954d8 104 if(((max_pos[a][0]-min_pos[b+1][0])*2)<Vpp){
cesarcazal 0:264c403954d8 105 max_pos[a][1]=401;
cesarcazal 0:264c403954d8 106 min_pos[b+1][1]=401;
cesarcazal 0:264c403954d8 107 max_pos[a][0]=maximos;
cesarcazal 0:264c403954d8 108 min_pos[b+1][0]=minimos;
cesarcazal 0:264c403954d8 109 }
cesarcazal 0:264c403954d8 110 }
cesarcazal 0:264c403954d8 111 b++;
cesarcazal 0:264c403954d8 112 a++;
cesarcazal 0:264c403954d8 113 }
cesarcazal 0:264c403954d8 114 b=0;
cesarcazal 0:264c403954d8 115 for (a=0;a<30;a++){
cesarcazal 0:264c403954d8 116 if ((max_pos[a][1]>0)&&(max_pos[a][1]<400)){
cesarcazal 0:264c403954d8 117 copy_max[indice][0]=max_pos[a][0];
cesarcazal 0:264c403954d8 118 copy_max[indice][1]=max_pos[a][1];
cesarcazal 0:264c403954d8 119 prom_max=prom_max+max_pos[a][0];
cesarcazal 0:264c403954d8 120 if (b>0){
cesarcazal 0:264c403954d8 121 periodo_max=periodo_max+max_pos[a][1]-copy_max[indice-1][1];
cesarcazal 0:264c403954d8 122 }
cesarcazal 0:264c403954d8 123 indice++;
cesarcazal 0:264c403954d8 124 }
cesarcazal 0:264c403954d8 125 if ((min_pos[a][1]>0)&&(min_pos[a][1]<400)){
cesarcazal 0:264c403954d8 126 copy_min[b][0]=min_pos[a][0];
cesarcazal 0:264c403954d8 127 copy_min[b][1]=min_pos[a][1];
cesarcazal 0:264c403954d8 128 prom_min=prom_min+min_pos[a][0];
cesarcazal 0:264c403954d8 129 if (b>0){
cesarcazal 0:264c403954d8 130 periodo_min=periodo_min+min_pos[a][1]-copy_min[b-1][1];
cesarcazal 0:264c403954d8 131 }
cesarcazal 0:264c403954d8 132 b++;
cesarcazal 0:264c403954d8 133 }
cesarcazal 0:264c403954d8 134 if((max_pos[a+1][1]==0)&&(min_pos[a+1][1]==0)){
cesarcazal 0:264c403954d8 135 posicion=a+1;
cesarcazal 0:264c403954d8 136 a=29;
cesarcazal 0:264c403954d8 137 }
cesarcazal 0:264c403954d8 138 }
cesarcazal 0:264c403954d8 139 resultados[0]=prom_max/indice;//VALOR MAXIMO
cesarcazal 0:264c403954d8 140 resultados[1]=prom_min/b;//VALOR MINIMO
cesarcazal 0:264c403954d8 141 res_period=(periodo_max+periodo_min);
cesarcazal 0:264c403954d8 142 num_prom=(b+indice-2);
cesarcazal 0:264c403954d8 143 res_period=res_period/num_prom;
cesarcazal 0:264c403954d8 144 //printf("minimo %d \n", period);
cesarcazal 0:264c403954d8 145 if (indice>b)
cesarcazal 0:264c403954d8 146 b=indice;
cesarcazal 0:264c403954d8 147 for(a=0;a<30;a++){
cesarcazal 0:264c403954d8 148 if (a<b){
cesarcazal 0:264c403954d8 149 max_pos[a][0]=copy_max[a][0];
cesarcazal 0:264c403954d8 150 max_pos[a][1]=copy_max[a][1];
cesarcazal 0:264c403954d8 151 min_pos[a][0]=copy_min[a][0];
cesarcazal 0:264c403954d8 152 min_pos[a][1]=copy_min[a][1];
cesarcazal 0:264c403954d8 153 }
cesarcazal 0:264c403954d8 154 else{
cesarcazal 0:264c403954d8 155 max_pos[a][0]=0;
cesarcazal 0:264c403954d8 156 max_pos[a][1]=0;
cesarcazal 0:264c403954d8 157 min_pos[a][0]=0;
cesarcazal 0:264c403954d8 158 min_pos[a][1]=0;
cesarcazal 0:264c403954d8 159 }
cesarcazal 0:264c403954d8 160 }
cesarcazal 0:264c403954d8 161 return(res_period);
cesarcazal 0:264c403954d8 162 }
cesarcazal 0:264c403954d8 163
cesarcazal 0:264c403954d8 164 void promedio(int *muestras400, int *muestras200){
cesarcazal 0:264c403954d8 165 int aux;
cesarcazal 0:264c403954d8 166 for (aux=0; aux<400; aux=aux+2){
cesarcazal 0:264c403954d8 167 *(muestras200+aux/2)=(*(muestras400+aux)+*(muestras400+aux+1))/2;
cesarcazal 0:264c403954d8 168 }
cesarcazal 0:264c403954d8 169 }