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
Inatividade.h
- Committer:
- Rogercl
- Date:
- 2019-08-04
- Revision:
- 6:e9a2bc040ada
File content as of revision 6:e9a2bc040ada:
//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; }