Algoritmo funcionando com a biblioteca de inatividade utilizando dos dados do acelerômetro e a biblioteca de PeakSearch se utilizando dos dados filtrados pelo filtro Kalman.
Dependencies: mbed MatrixMath Matrix nrf51_rtc BMP180 MPU9250
Diff: Inatividade.h
- Revision:
- 6:e9a2bc040ada
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Inatividade.h Sun Aug 04 11:38:08 2019 +0000 @@ -0,0 +1,108 @@ + //variaveis inatividade + +float normMean = 9.5; +float stdMean = 0.03; +int i=0; +float norma=0; +float desvio=0; +int contador_inativ=0; +int contador_desvio=0; +int flagInativ=0; +float AcelNormA=0; + +void Inatividade() +{ + //variaveis inatividade + float ACEL_CONV=9.807; + float window_filt = 10; + float window = Freq*2; + float mult_norm_stdMean = 2; + float config_stdMean = 0.03; + float AcelNorm=sqrt(ax*ax + ay*ay+ az*az)*ACEL_CONV; + + //Identifica inativo / ativo + if (i<(window_filt-1)) + { + //norma = norma + vin[i]/window_filt; + norma = norma + AcelNorm/window_filt; + } + else + { + //norma = ((window_filt - 1)/window_filt) * norma + vin[i]/window_filt; + norma = ((window_filt - 1)/window_filt) * norma + AcelNorm/window_filt; + } + + if (i>=window) + { + //INATIVO + if (!(abs(norma - normMean) > mult_norm_stdMean * stdMean)) //barreira de desvio / norma + { + contador_inativ = contador_inativ + 1; + + //INATIVO + if (contador_inativ>=Freq) + { + flagInativ=1; + iiSearch=0; + } + } + //ATIVO + else + { + flagInativ=0; + contador_inativ=0; + } + + } + + //desvio avg - corrige/adapta os paramentros de threshold da norma e std + if (i>0) + { + if (i<=(window_filt-1)) + { + //desvio = desvio + abs(vin(i)-vin(i-1))/window_filt; + desvio = desvio + abs(AcelNorm-AcelNormA)/window_filt; + } + else + { + //desvio = ((window_filt - 1)/window_filt)*desvio + abs(vin(i)-vin(i-1))/window_filt; + desvio = ((window_filt - 1)/window_filt)*desvio + abs(AcelNorm-AcelNormA)/window_filt; + } + } + + //Desvio + if (i>=window) + { + if (!(abs(desvio - stdMean) > stdMean)) // barreira de desvio / norma + { + contador_desvio = contador_desvio + 1; + if ((contador_desvio >= window/2) && (contador_desvio < 2*window)) + { + normMean = 0.95 * normMean + 0.05 * norma; + } + else if (contador_desvio >= 2*window) + { + normMean = 0.85 * normMean + 0.15 * norma; + if (flagInativ) + { + stdMean = 0.95 * stdMean + 0.05 * desvio; + + // limitante superior + if (stdMean<=2*config_stdMean) stdMean=stdMean; + else stdMean=2*config_stdMean; + + // limitante inferior + if (stdMean>=config_stdMean/2) stdMean=stdMean; + else stdMean=config_stdMean/2; + } + } + } + else + { + contador_desvio = 0; + } + } + + AcelNormA=AcelNorm; + i=i+1; +} \ No newline at end of file