
###################################################################################################
##                 Código para la construcción de las tablas de características                  ##
############################# IRENE SALVADOR ORTEGA ###############################################
###################################################################################################

library(xlsx)
library(htmlwidgets)
library(dygraphs)

# Visualización de la serie temporal
visualizaExtraccion<-function(X){
  dygraph(X, xlab="Timestamp", ylab="Coordenada", main="Visualización Serie Temporal") %>% dyRangeSelector()
}


# Devuelve el periodo al que se consigue la máxima autocorrelacion
devuelvePeriodoDeMaximaAutocorrelacion<-function(tabla){
  #Selecciona los datos de interés, que son las filas de la media y el desfase
  #Elimina las columnas que no se necesitan para trabajar con dimensión más pequeña
  datosInteres<-tabla[,c("Desfase","Media")]
  #Convierte la media a un valor numérico, ya que esta como factor. Necesario pasarlo a vector y luego a numérico.
  #De lo contrario guarda posiciones, en lugar de valores
  datosInteres$Media<-as.numeric(as.vector(datosInteres$Media))
  #Selecciona el periódo con máxima autocorrelación en valor absoluto.
  posicion_maximo<-which.max(abs(datosInteres$Media))
  signoMaximo<-sign(datosInteres$Media[posicion_maximo])
  resultado<-datosInteres[datosInteres$Media==signoMaximo*max(abs(datosInteres$Media)),"Desfase"]
  #Devuelve el resultado
  return(max(as.numeric(as.vector(resultado))))
}

# Devuelve la máxima autocorrelacion
devuelveMaximaAutocorrelacion<-function(tabla){
  #Selecciona los datos de interés, que son las filas de la componente deseada.
  #Elimina las columnas que no se necesitan para trabajar con dimensión más pequeña
  datosInteres<-tabla[,c("Desfase","Media")]
  #Convierte la media a un valor numérico, ya que esta como factor. Necesario pasarlo a vector y luego a numérico.
  #De lo contrario guarda posiciones, en lugar de valores
  datosInteres$Media<-as.numeric(as.vector(datosInteres$Media))
  #Selecciona la máxima autocorrelación 
  posicion_maximo<-which.max(abs(datosInteres$Media))
  signoMaximo<-sign(datosInteres$Media[posicion_maximo])
  resultado<-datosInteres[datosInteres$Media==signoMaximo*max(abs(datosInteres$Media)),"Media"]
  #Devuelve el resultado
  return(max(as.numeric(as.vector(resultado))))
}

# Dados los datos y el desfase, devuelve el valor de la autocorrelación con el objetivo de construir la tabla de autocorrelacion de cada ventana
calculaAutocorrelacion<-function(zona,k){
  zona<-zona[!(zona=="Inf" | zona=="-Inf")]
  n<-length(zona)
  
  mu<-mean(zona)
  sigma2<-var(zona)
  
  total<-0
  for(t in 1:(n-k)){
    total<-total+((zona[t]-mu)*(zona[t+k]-mu))
  }
  
  solucion<-round(total/(n*sigma2),4)
  return(solucion)
}

# Devuelve el periodo, dado el desfase
calculaDesfase<-function(k){
  frecuencia_muestreo<-12
  periodo<-round((1/frecuencia_muestreo)*1000)
  return(periodo*(k-1))
}

# Construye la tabla de autocorrelacion de cada ventana
construyeTablaAutocorrelaciones_ventana<-function(ventana_datosModulo){
  tabla<-data.frame(NULL,NULL,NULL)
  fila<-1  #indica el número de fila en la que nos encontramos
  columna<-2
  for(k in 11:16){
    tabla[fila,1]<-calculaDesfase(k)
    #calcular autocorrelaciones para cada zona de interes y cada valor del desfase
    tabla[fila,columna]<-calculaAutocorrelacion(ventana_datosModulo,k)
    
    #Incrementa la fila y resetea la columna a 3
    fila<-fila+1
    columna<-2
  }
  
  #Poner nombre a las columnas
  colnames(tabla)<-c("Desfase","Media")  #llamo media a las autocorrelación para adaptarlo a la función que devuelve el periodo y la maxima autocorrelacion
  return(tabla)
}

library(PerformanceAnalytics) #para la kurtosis (HA DEJADO DE FUNCIONAR)
library(e1071) #para el coeficiente de asimetria (skewness). También para la kurtosis
library(moments)  #para la kurtos y skewness.
#install.packages("moments")

# Para cada ventana, devuelve una serie de estadísticos (dominio del tiempo)
propiedades_estadisticas<-function(datos){
  media_DT<-mean(datos)
  mediana_DT<-median(datos)
  maximo_DT<-max(datos)
  minimo_DT<-min(datos)
  desviacion_estandar_DT<-sd(datos)
  rango_DT<-max(datos)-min(datos)
  kurtosis_moment_DT<-kurtosis(datos)
  quantil_25_DT<-quantile(datos, probs=0.25)
  quantil_75_DT<-quantile(datos, probs=0.75)
  skewness_DT<-skewness(datos)
  return(list(media_DT=media_DT, mediana_DT=mediana_DT, maximo_DT=maximo_DT, minimo_DT=minimo_DT, 
              desviacion_estandar_DT=desviacion_estandar_DT, rango_DT=rango_DT, kurtosis_moment_DT=kurtosis_moment_DT,
              quantil_25_DT=as.numeric(quantil_25_DT),quantil_75_DT=as.numeric(quantil_75_DT),
              skewness_DT=skewness_DT))
}



library(stats)
require(graphics)
library(intervals)
#install.packages("DescTools")
library(DescTools) #Para la funcion AUC

# Para cada ventana, devuelve las siguientes características (dominio de la frecuencia no normalizando las amplitudes)
frecuenciaFourier_Ampl_NO_Norm<-function(datos, tasa_muestreo){
  fourier<-fft(datos)
  
  n<-length(datos)
  amplitud <- Mod(fourier) #sqrt(Re(fourier)*Re(fourier)+Im(fourier)*Im(fourier))
  amplitud_mitad<-amplitud[2:((length(amplitud)/2)+1)]  
  #se elimina la primera frecuencia (por dar información erronea) y la mitad por ser simétrica)
  freq<-0:(length(fourier)-1)*tasa_muestreo/length(fourier)
  freq_mitad<-freq[2:((length(fourier)/2)+1)]
  ejeX<-freq_mitad
  ejeY<-amplitud_mitad
  
  Amplitud_dominante_1_DF<-max(ejeY)
  frecuencia_dominante_1_DF<-ejeX[which.max(ejeY)]
  Amplitud_dominante_2_DF<-max(ejeY[ejeY!=max(ejeY)])
  frecuencia_dominante_2_DF<-ejeX[which(ejeY==Amplitud_dominante_2_DF)]
  
  AUC_curva_DF<-AUC(ejeX,ejeY, method="spline")
  
  #Análisis estadístico para las amplitudes (ejeY)
  media_DF<-mean(ejeY)
  mediana_DF<-median(ejeY)
  desviacion_estandar_DF<-sd(ejeY)
  rango_DF<-max(ejeY)-min(ejeY)
  kurtosis_moment_DF<-kurtosis(ejeY)
  quantil_25_DF<-quantile(ejeY, probs=0.25)
  quantil_75_DF<-quantile(ejeY, probs=0.75)
  skewness_DF<-skewness(ejeY)
  
  return(list(frecuencia_dominante_1_DF=frecuencia_dominante_1_DF, Amplitud_dominante_1_DF=Amplitud_dominante_1_DF,
              frecuencia_dominante_2_DF=frecuencia_dominante_2_DF, Amplitud_dominante_2_DF=Amplitud_dominante_2_DF, AUC_curva_DF=AUC_curva_DF,
              media_DF=media_DF, mediana_DF=mediana_DF, desviacion_estandar_DF=desviacion_estandar_DF, rango_DF=rango_DF, 
              kurtosis_moment_DF=kurtosis_moment_DF,quantil_25_DF=quantil_25_DF, quantil_75_DF=quantil_75_DF, skewness_DF=skewness_DF))
}

# Calcula el módulo a través de las componentes tri-dimensionales
devuelveModulo<-function(Timestamp, datoX, datoY, datoZ){
  modulo<-sqrt( datoX^2 + datoY^2 + datoZ^2)
  resultado<-cbind(Timestamp, modulo)
  return(resultado)
}

# Añade el tiempo acumulado a los datos
annadirTiempoAcumulado<-function(X){
  X<-as.data.frame(X)
  X$tiempoAcumulado<-cumsum(X$Timestamp)
  return(X)
}

# Formula para el calculo de la interpolación lineal entre dos puntos (x1,y1), (x2,y2)
calculaInterpolacion<-function(x,x1,y1,x2,y2){
  y<-y1+(((y2-y1)/(x2-x1))*(x-x1))
  return(y)
}

# Código de la interpolación lineal, dada la señal original la devuelve interpolada
interpolacionLineal<-function(datos,tiempos,periodo){
  
  if(!is.null(dim(datos))){
    nColumnas<-dim(datos)[2]
    nFilas<-dim(datos)[1]
  }else{
    nColumnas<-1
    nFilas<-length(datos)
  }
  
  t<-tiempos[1]
  f<-1
  
  #como salida se va a tener una matriz de datos2 y un vector de tiempos2
  tiempos2 <- vector()
  datos2 <-data.frame(NULL,NULL,NULL)
  
  while(t<tiempos[nFilas]){
    p1<-1
    p2<-2
    for(i in 2:(nFilas-1)){
      if(tiempos[i]<t & tiempos[i]>tiempos[p1]){
        p1<-i
        p2<-i+1
      }
    }
    
    tiempos2[f]<-t
    for(j in 1:nColumnas){
      if(!is.null(dim(datos))){
        datos2[f,j]<-calculaInterpolacion(t,tiempos[p1],
                                          datos[p1,j],tiempos[p2],datos[p2,j])
      }else{
        datos2[f,j]<-calculaInterpolacion(t,tiempos[p1],
                                          datos[p1],tiempos[p2],datos[p2]) 
      }
    }
    t<-t+periodo
    f<-f+1
  }
  datosInter<-cbind(tiempos2,datos2)
  datosInterpolados<-datosInter[complete.cases(datosInter),]
  if(!is.null(dim(datos))){
    colnames(datosInterpolados)<-c("tiempoAcumulado","dato1","dato2","dato3")
  }else{
    colnames(datosInterpolados)<-c("tiempoAcumulado","modulo")
  }
  
  return(datosInterpolados)
}


# Código para el calculo del filtro de la media móvil, dada la señal original, devuelve la señal suavizada
filtroMediaMovilOrden3<-function(datos, interpolaLinealmente){
  n<-dim(datos)[1]
  if(interpolaLinealmente){
    solucion<-matrix(-1,ncol=dim(datos)[2],nrow=n-2)
    columnas<-dim(datos)[2]
  }else{
    solucion<-matrix(-1,ncol=dim(datos)[2]-1,nrow=n-2)
    columnas<-dim(datos)[2]-1
  }
  #Al ser un filtro de orden 5 se pierden las 2 primeras y últimas observaciones
  solucion[,1]<-datos[2:(n-1),"tiempoAcumulado"]
  for(col in 2:columnas){
    for(i in 2:(n-1)){
      solucion[i-1,col]<-(datos[i-1,col]+datos[i,col]+datos[i+1,col])/3
    }
  }
  solucion<-as.data.frame(solucion)
  colnames(solucion)<-c("tiempoAcumulado","modulo")
  return(solucion)
}

library(xlsx)  #para la lectura de la tabla de autocorrelaciones

# FUNCIÓN PRINCIPAL para el calculo de la tabla de características de todos los usuarios
# También devuelve una tabla que va indicando las autocorrelaciones máximas y mínimas de cada usuario en cada muestra
# Guarda los resultados en formato CSV
ejecutaTablasExtensionesVentana<-function(guardarGraficos, dispositivo, tipo, extension_ventana, solapamiento, interpolaLinealmente, filtroMediaMovil_Orden5, filtroMediaMovil_Orden3){
  ruta_inicio<-paste("C:/Users/Irene Salvador/Desktop/QUINTO CURSO/---------- TFG/RendimientoFinal_seq/",dispositivo,tipo,"/datos_labels_ocultos/",sep="")
  
  #Se crea la lista inicialmente vacía
  for(user in 0:20){
    assign(paste("usuario",user, sep=""), list())
  }
  
  if(dispositivo=="Micro"){
    dispaux<-2
  }else if(dispositivo=="Moto"){
    dispaux<-1
  }
  
  for(user in 0:20){
    #En función del usuario, el número de datos es distinto
    if(user==0 || user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
      numero<-2
    }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
             || user==14 || user==15 || user==18){
      numero<-4
    }
    
    if(numero==2 & user!=5 & user!=17){
      for(i in 1:numero){
        if( (dispositivo=="Micro" & tipo=="ACC") | (dispositivo=="Micro" & tipo=="GYR" & user==19 & i==2) | 
            (dispositivo=="Micro" & tipo=="GYR" & user==20 & i==1) | (dispositivo=="Moto" & tipo=="ACC" & user==19 & i==2) |
            (dispositivo=="Moto" & tipo=="ACC" & user==4 & i==1) | (dispositivo=="Moto" & tipo=="GYR" & user==19 & i==2) | 
            (dispositivo=="Moto" & tipo=="GYR" & user==4 & i==1) ){
          eval(parse(text=paste("usuario",user,"[[",i,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",i,"_",dispaux,"_",1,".csv\",header=TRUE, sep=\";\", dec=\",\")", sep="")))
        }else{
          eval(parse(text=paste("usuario",user,"[[",i,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",i,"_",dispaux,"_",1,".csv\",header=TRUE, sep=\";\", dec=\".\")", sep="")))
        }
        
      }
    }else if(numero==2 & (user==5 | user==17)){
      for(i in 1:numero){
        if( (dispositivo=="Micro" & tipo=="ACC") | (dispositivo=="Micro" & tipo=="GYR" & user==19 & i==2) | 
            (dispositivo=="Micro" & tipo=="GYR" & user==20 & i==1) | (dispositivo=="Moto" & tipo=="ACC" & user==19 & i==2) |
            (dispositivo=="Moto" & tipo=="ACC" & user==4 & i==1) | (dispositivo=="Moto" & tipo=="GYR" & user==19 & i==2) | 
            (dispositivo=="Moto" & tipo=="GYR" & user==4 & i==1) ){
          eval(parse(text=paste("usuario",user,"[[",i,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",1,"_",dispaux,"_",i,".csv\",header=TRUE, sep=\";\", dec=\",\")", sep="")))
        }else{
          eval(parse(text=paste("usuario",user,"[[",i,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",1,"_",dispaux,"_",i,".csv\",header=TRUE, sep=\";\", dec=\".\")", sep="")))
        }
        
      }
    }else if(numero==4){
      indice<-1
      for(i in 1:2){
        for(j in 1:2){
          if( (dispositivo=="Micro" & tipo=="ACC") | (dispositivo=="Micro" & tipo=="GYR" & user==19 & i==2) | 
              (dispositivo=="Micro" & tipo=="GYR" & user==20 & i==1) | (dispositivo=="Moto" & tipo=="ACC" & user==19 & i==2) |
              (dispositivo=="Moto" & tipo=="ACC" & user==4 & i==1) | (dispositivo=="Moto" & tipo=="GYR" & user==19 & i==2) | 
              (dispositivo=="Moto" & tipo=="GYR" & user==4 & i==1) ){
            eval(parse(text=paste("usuario",user,"[[",indice,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",i,"_",dispaux,"_",j,".csv\",header=TRUE, sep=\";\", dec=\",\")", sep="")))
          }else{
            eval(parse(text=paste("usuario",user,"[[",indice,"]]<-read.csv2(\"",ruta_inicio,"usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",i,"_",dispaux,"_",j,".csv\",header=TRUE, sep=\";\", dec=\".\")", sep="")))
          }
          indice<-indice+1
        }
      }
    }
    cat("Fin del usuario",user,"\n")
  }
  
  for(user in 1:20){
    #En función del usuario, el número de datos es distinto
    if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
      numero<-2
    }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
             || user==14 || user==15 || user==18){
      numero<-4
    }
    
    if(numero==2 & user!=5 & user!=17){
      for(i in 1:numero){
        eval(parse(text=paste("usuario",user,"[[",i,"]]<-devuelveModulo(usuario",user,"[[",i,"]][,\"Timestamp\"], usuario",user,"[[",i,"]][,\"dato1\"], usuario",user,"[[",i,"]][,\"dato2\"], usuario",user,"[[",i,"]][,\"dato3\"])", sep="")))
      }
    }else if(numero==2 & (user==5 | user==17)){
      for(i in 1:numero){
        eval(parse(text=paste("usuario",user,"[[",i,"]]<-devuelveModulo(usuario",user,"[[",i,"]][,\"Timestamp\"], usuario",user,"[[",i,"]][,\"dato1\"], usuario",user,"[[",i,"]][,\"dato2\"], usuario",user,"[[",i,"]][,\"dato3\"])", sep="")))
      }
    }else if(numero==4){
      indice<-1
      for(i in 1:2){
        for(j in 1:2){
          eval(parse(text=paste("usuario",user,"[[",indice,"]]<-devuelveModulo(usuario",user,"[[",indice,"]][,\"Timestamp\"], usuario",user,"[[",indice,"]][,\"dato1\"], usuario",user,"[[",indice,"]][,\"dato2\"], usuario",user,"[[",indice,"]][,\"dato3\"])", sep="")))
          indice<-indice+1
        }
      }
    }
    cat("Fin del usuario",user,"\n")
  }
  
  ##############################################################################################################################
  # Añadir el tiempo acumulado
  ##############################################################################################################################
  for(user in 1:20){
    #En función del usuario, el número de datos es distinto
    if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
      numero<-2
    }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
             || user==14 || user==15 || user==18){
      numero<-4
    }
    
    for(i in 1:numero){
      eval(parse(text=paste("usuario",user,"[[",i,"]]<-annadirTiempoAcumulado(usuario",user,"[[",i,"]])", sep="")))
    }
    cat("Fin añadir tiempo acumulado del usuario ",user,"\n")
  }
  
  
  frecuencia_muestreo<-12
  periodo<-round((1/frecuencia_muestreo)*1000)
  
  ####### --> Interpolación lineal
  if(interpolaLinealmente){
    for(user in 1:20){
      #En función del usuario, el número de datos es distinto
      if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
        numero<-2
      }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
               || user==14 || user==15 || user==18){
        numero<-4
      }
      
      for(i in 1:numero){
        eval(parse(text=paste("usuario",user,"[[",i,"]]<-interpolacionLineal(usuario",user,"[[",i,"]][,\"modulo\"],usuario",user,"[[",i,"]][,\"tiempoAcumulado\"],",periodo,")", sep="")))
      }
      cat("Fin interpolación del usuario ",user,"\n")
    }
  }
  
  ####### --> Filtro Media Movil
  if(filtroMediaMovil_Orden5){
    tipoFiltroMediaMovil<-"filtroMediaMovilOrden5"
  }else if(filtroMediaMovil_Orden3){
    tipoFiltroMediaMovil<-"filtroMediaMovilOrden3"
  }
  
  if(filtroMediaMovil_Orden5==TRUE | filtroMediaMovil_Orden3==TRUE){
    for(user in 1:20){
      #En función del usuario, el número de datos es distinto
      if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
        numero<-2
      }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
               || user==14 || user==15 || user==18){
        numero<-4
      }
      for(i in 1:numero){
        eval(parse(text=paste("usuario",user,"[[",i,"]]<-",tipoFiltroMediaMovil,"(usuario",user,"[[",i,"]], interpolaLinealmente)", sep="")))
      }
      cat("Fin ",tipoFiltroMediaMovil, "del usuario ",user,"\n")
    }
  }
  
  if(interpolaLinealmente){
    nombre_ruta_preprocesamiento<-"datos_interpolados"
  }else if(filtroMediaMovil_Orden3){
    nombre_ruta_preprocesamiento<-"datos_MM3_originales"
  }else{
    nombre_ruta_preprocesamiento<-"datos_originales"
  }
  
  if(guardarGraficos){
    for(user in 1:20){
      if(user==0 || user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
        numero<-2
      }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12 || user==13
               || user==14 || user==15 || user==18){
        numero<-4
      }
      
      for(i in 1:numero){
        if(i==1){
          iaux<-1
          jaux<-1
        }else if(i==2 & numero==2 & (user==5 | user==17)){
          iaux<-1
          jaux<-2
        }else if(i==2 & numero==2 & user!=5 & user!=17){
          iaux<-2
          jaux<-1
        }else if(i==2 & numero==4){
          iaux<-1
          jaux<-2
        }else if(i==3 & numero==4){
          iaux<-2
          jaux<-1
        }else if(i==4 & numero==4){
          iaux<-2
          jaux<-2
        }
        eval(parse(text=paste("saveWidget(visualizaExtraccion(usuario",user,"[[",i,"]][,c(\"tiempoAcumulado\",\"modulo\")]), \"C:/Users/Irene Salvador/Desktop/QUINTO CURSO/---------- TFG/RendimientoFinal_seq/",dispositivo,tipo,"/Graficos_serie/",nombre_ruta_preprocesamiento,"/usuario",user,"/",dispositivo,"_",tipo,"_usuario",user,"_",iaux,"_",dispaux,"_",jaux,"_modulo.html\", selfcontained = FALSE)", sep="")))
      }
      cat("Fin guardar gráfico del usuario",user,"\n")
    }
  }
  
  #tabla para cada usuario y para cada toma...
  for(user in 1:20){
    assign(paste("tabla_usuario",user,sep=""), list())
  }
  #para cada toma se hace un data.frame(NULL, NULL, NULL)
  #mas tarde se unirán todas
  
  normalizar_Fourier<-FALSE
  tasa_muestreo<-12
  for(user in 1:20){  #para cada usuario...
    if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
      numero<-2
    }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12
             || user==14 || user==15 || user==18){
      numero<-4
    }else if(user==13){
      numero<-3
    }
    
    for(toma in 1:numero){  #para cada toma de datos de cada usuario...
      #Obtengo el máximo de las autocorrelaciones
      #Lectura de la tabla de autocorrelaciones:
      ruta_inicio<-"C:/Users/Irene Salvador/Desktop/QUINTO CURSO/---------- TFG/NO/MODULO/Datos/autocorrelaciones/"
      if(numero==2 & user!=5 & user!=17){
        tabla_autocorrelaciones<-read.xlsx2(paste(ruta_inicio,"usuario",user,"/","Micro","_","ACC","_usuario",user,"_",toma,"_",2,"_",1,".xlsx",sep=""),sheetIndex=1,header=TRUE)
      }else if(numero==2 & (user==5 | user==17)){
        tabla_autocorrelaciones<-read.xlsx2(paste(ruta_inicio,"usuario",user,"/","Micro","_","ACC","_usuario",user,"_",1,"_",2,"_",toma,".xlsx",sep=""),sheetIndex=1,header=TRUE)
      }else if(numero==4 || numero==3){
        if(toma==1){
          i<-1
          j<-1
        }else if(toma==2){
          i<-1
          j<-2
        }else if(toma==3){
          i<-2
          j<-1
        }else if(toma==4){
          i<-2
          j<-2
        }
        tabla_autocorrelaciones<-read.xlsx2(paste(ruta_inicio,"usuario",user,"/","Micro","_","ACC","_usuario",user,"_",i,"_",2,"_",j,".xlsx",sep=""),sheetIndex=1,header=TRUE)
      }
      #este es el valor del periodo
      maximo_autocorrelacion<-devuelvePeriodoDeMaximaAutocorrelacion(tabla_autocorrelaciones)
      
      #este es el valor de la autocorrelacion
      maximo_autocorrelacion_num<-devuelveMaximaAutocorrelacion(tabla_autocorrelaciones)
      
      tiempo_ventana<-maximo_autocorrelacion*extension_ventana
      n_ventana<-tiempo_ventana/periodo
      
      #Dividir en ventanas e ir añadiendo a la tabla con todas las características en el dominio del tiempo y de la frecuencia:
      fila<-1
      columna<-1
      muestras_solapadas<-round(n_ventana*(solapamiento/100))
      
      #intervalos_interes<-eval(parse(text=paste("u",user,"_interesComun[[",toma,"]]", sep="")))
      #n_intervalos_interes<-dim(intervalos_interes)[1]
      
      eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]]<-data.frame(NULL, NULL, NULL)", sep="")))
      #for(zonaInteres in 1:n_intervalos_interes){ #para cada zona de interés de cada toma de cada usuario...
      
      eval(parse(text = paste("datos_de_interes<-usuario",user,"[[",toma,"]][,c(\"modulo\",\"tiempoAcumulado\")]", sep = "")))
        
      #sobre estos datos son sobre los que hay que hacer ventanas...
      n_total_zona_interes<-dim(datos_de_interes)[1]
        
      tamanno<-1  #porque empieza en la muestra 1
      #Cuando 1 de las 3 componentes (X, Y, Z) haya acabado, todas han acabado
      while(n_total_zona_interes>(tamanno+n_ventana-1)){
        if(tamanno!=1){
          tamanno<-tamanno+muestras_solapadas
        }
          
        #me quedo con la zona de interes de las 3 coordenadas:
        if(tamanno==1){
          datos_zona_interes<-eval(parse(text = paste("datos_de_interes[tamanno:(tamanno+n_ventana-1),]", sep = "")))
        }else{
          datos_zona_interes<-eval(parse(text = paste("datos_de_interes[(tamanno-muestras_solapadas):(tamanno-muestras_solapadas+n_ventana-1),]", sep = "")))
        }
        
        if(length(table(datos_zona_interes$modulo)) != 1){
        
          #Relleno la tabla. Aquí estoy descartando ventanas que toman siempre el mismo valor y generan NAns (con el if)
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"usuario",user,"\"", sep="")))  #indicando el número de usuario
          columna<-columna+1
          if(numero==2 & user!=5 & user!=17){ #indicando la muestra y sesión que es
            if(toma==1){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S1\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M1\"", sep="")))
            }
            if(toma==2){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S2\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M1\"", sep="")))
            }
          }else if(numero==2 & (user==5 | user==17)){
            if(toma==1){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S1\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M1\"", sep="")))
            }
            if(toma==2){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S1\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M2\"", sep="")))
            }
          }else if(numero==4 || numero==3){
            if(toma==1){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S1\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M1\"", sep="")))
            }else if(toma==2){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S1\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M2\"", sep="")))
            }else if(toma==3){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S2\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M1\"", sep="")))
            }else if(toma==4){
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-\"S2\"", sep="")))
              eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna+1]<-\"M2\"", sep="")))
            }
          }
          columna<-columna+2
          
          #Se guarda el periodo de la maxima autocorrelación en cada eje (X, Y, Z)
          tabla_aux_autocorr<-construyeTablaAutocorrelaciones_ventana(datos_zona_interes$modulo)
          
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-devuelvePeriodoDeMaximaAutocorrelacion(tabla_aux_autocorr)", sep="")))
          columna<-columna+1
          
          #Se guarda la maxima autocorrelación en cada eje (X, Y, Z) a la que se consigue el periodo anterior
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-devuelveMaximaAutocorrelacion(tabla_aux_autocorr)", sep="")))
          columna<-columna+1
          
          
          #Propiedades estadísticas en el modulo
          prop_estadisticas<-propiedades_estadisticas(datos_zona_interes$modulo[!(datos_zona_interes$modulo=="Inf" | datos_zona_interes$modulo=="-Inf")])
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$media_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$mediana_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$maximo_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$minimo_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$desviacion_estandar_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$rango_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$kurtosis_moment_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$quantil_25_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$quantil_75_DT", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_estadisticas$skewness_DT", sep="")))
          columna<-columna+1
          
          #Propiedades en el dominio de la frecuencia
          #Para la componente del modulo
          if(normalizar_Fourier){
            nombre_funcion_Fourier<-"frecuenciaFourier_AmplNorm"
          }else{
            nombre_funcion_Fourier<-"frecuenciaFourier_Ampl_NO_Norm"
          }
          eval(parse(text=paste("prop_DF<-",nombre_funcion_Fourier,"(datos_zona_interes$modulo[!(datos_zona_interes$modulo==\"Inf\" | datos_zona_interes$modulo==\"-Inf\")]-mean(datos_zona_interes$modulo[!(datos_zona_interes$modulo==\"Inf\" | datos_zona_interes$modulo==\"-Inf\")]), tasa_muestreo)", sep="")))
          
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$frecuencia_dominante_1_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$Amplitud_dominante_1_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$frecuencia_dominante_2_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$Amplitud_dominante_2_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$AUC_curva_DF", sep="")))
          columna<-columna+1
          #Características estadísticas en el dominio de la frecuencia (componente X) para el eje Y (amplitudes)
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$media_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$mediana_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$desviacion_estandar_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$rango_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$kurtosis_moment_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$quantil_25_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$quantil_75_DF", sep="")))
          columna<-columna+1
          eval(parse(text=paste("tabla_usuario",user,"[[",toma,"]][fila, columna]<-prop_DF$skewness_DF", sep="")))
          columna<-columna+1  
          
          fila<-fila+1
          
        }  
        
          #actualizar tamanno
        if(tamanno==1){
          tamanno<-tamanno+n_ventana-1-muestras_solapadas
        }else{
          tamanno<-tamanno-muestras_solapadas+n_ventana-1-muestras_solapadas
        }
          
        #cat("Fin de la fila ", fila, " con tamaño X=",tamanno_X,",Y=",tamanno_Y,",Z=",tamanno_Z,"(n_total_zona_interes =",n_total_zona_interes,")\n")
        
        columna<-1
      }
        
      #}
      
      eval(parse(text=paste("colnames(tabla_usuario",user,"[[",toma,"]])<-c(\"usuario\",\"sesion\",\"muestra\",
                            \"Periodo\", \"Autocorr\",
                            \"media\",\"mediana\",\"maximo\",\"minimo\",\"sd\",\"rango\",
                            \"kurtosis\",\"quantil25\",\"quantil75\", \"skewness\",
                            \"Freq_dom1\",\"Amp_dom1\", \"Freq_dom2\",\"Amp_dom2\", \"AUC\",
                            \"media_Ampl\",\"mediana_Ampl\",\"sd_Ampl\",
                            \"rango_Ampl\",\"kurtosis_Ampl\",\"quantil25_Ampl\",\"quantil75_Ampl\", \"skewness_Ampl\")", sep="")))
      
      cat("Fin de la toma ",toma," del usuario ",user,"\n")
    }
  }

  #union de todas las tablas para obtener la tabla general
  tabla_general<-data.frame(NULL, NULL, NULL)
  for(user in 1:20){
    if(user==4 || user==5 || user==6 || user==7 || user==16 || user==17 || user==19 || user==20){
      numero<-2
    }else if(user==1 || user==2 || user==3 || user==8 || user==9 || user==10 || user==11 || user==12
             || user==14 || user==15 || user==18){
      numero<-4
    }else if(user==13){
      numero<-3
    }
    for(toma in 1:numero){
      eval(parse(text=paste("tabla_general<-rbind(tabla_general, tabla_usuario",user,"[[",toma,"]])", sep="")))
    }
  }
  dim(tabla_general)
  
  tabla_general_autocorr<-data.frame(NULL, NULL, NULL)
  fila<-1
  for(user in 1:20){
    for(sesion in 1:2){
      for(muestra in 1:2){
        if(nrow(eval(parse(text = paste("tabla_general[tabla_general[,\"usuario\"]==\"usuario",user,"\" & tabla_general[,\"sesion\"]==\"S",sesion,"\" & tabla_general[,\"muestra\"]==\"M",muestra,"\",]", sep = "")))) != 0){
          tabla_general_autocorr[fila,1]<-paste("usuario",user,sep="")
          tabla_general_autocorr[fila,2]<-paste("S",sesion,sep="")
          tabla_general_autocorr[fila,3]<-paste("M",muestra,sep="")
          
          valores_autocorr<-eval(parse(text = paste("tabla_general[tabla_general[,\"usuario\"]==\"usuario",user,"\" & tabla_general[,\"sesion\"]==\"S",sesion,"\" & tabla_general[,\"muestra\"]==\"M",muestra,"\", \"Autocorr\"]", sep = "")))
          
          valores_autocorr<-abs(valores_autocorr)
          
          tabla_general_autocorr[fila,4]<-min(valores_autocorr)
          tabla_general_autocorr[fila,5]<-max(valores_autocorr)
          tabla_general_autocorr[fila,6]<-length(which(valores_autocorr>=0 & valores_autocorr<=0.2))
          tabla_general_autocorr[fila,7]<-length(which(valores_autocorr>0.2 & valores_autocorr<=0.3))
          tabla_general_autocorr[fila,8]<-length(which(valores_autocorr>0.3 & valores_autocorr<=0.4))
          tabla_general_autocorr[fila,9]<-length(which(valores_autocorr>0.4 & valores_autocorr<=0.5))
          tabla_general_autocorr[fila,10]<-length(which(valores_autocorr>0.5 & valores_autocorr<=0.6))
          tabla_general_autocorr[fila,11]<-length(which(valores_autocorr>0.6 & valores_autocorr<=1))
          
          fila<-fila+1
        }
      }
    }
    cat("Fin del usuario",user,"\n")
  }
  colnames(tabla_general_autocorr)<-c("usuario","sesion","muestra","min","max","|(0,0.2)|","|(0.2,0.3)|","|(0.3,0.4)|","|(0.4,0.5)|","|(0.5,0.6)|","|(0.6,1)|")
  
  
  #Guardar la tabla final
  ruta_inicio<-paste("C:/Users/Irene Salvador/Desktop/QUINTO CURSO/---------- TFG/RendimientoFinal_seq/",dispositivo,tipo,"/",sep="")
  write.csv2(tabla_general,paste(ruta_inicio,"tablas_caract/",nombre_ruta_preprocesamiento,"/",file=dispositivo,"_",tipo,"_",extension_ventana,"veces_",solapamiento,"%solap_modulo.csv",sep=""), row.names=FALSE)
  write.csv2(tabla_general_autocorr, paste(ruta_inicio,"tablas_autocorr/",nombre_ruta_preprocesamiento,"/",file=dispositivo,"_",tipo,"_",extension_ventana,"veces_",solapamiento,"%solap_modulo.csv",sep=""), row.names=FALSE)
  
}

# Llamada a la función principal en diversas situaciones:
#---> datos_interpolados
ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Micro", tipo="ACC", extension_ventana=6, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=7, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=8, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=9, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=10, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Micro", tipo="GYR", extension_ventana=6, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=7, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=9, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Moto", tipo="ACC", extension_ventana=6, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=7, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=8, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=9, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=10, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Moto", tipo="GYR", extension_ventana=6, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=7, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=9, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=TRUE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)


######################### FILTRO MEDIA MÓVIL ORDEN 3
#---> datos_originales
ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Micro", tipo="ACC", extension_ventana=6, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=7, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=9, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="ACC", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Micro", tipo="GYR", extension_ventana=6, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=7, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=9, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Moto", tipo="ACC", extension_ventana=6, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=7, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=9, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)

ejecutaTablasExtensionesVentana(guardarGraficos = TRUE, dispositivo = "Moto", tipo="GYR", extension_ventana=6, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=7, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=9, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=TRUE)


#AUXILIAR: datos_originales
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=3, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Micro", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)

ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=3, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="ACC", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)

ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=3, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=8, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
ejecutaTablasExtensionesVentana(guardarGraficos = FALSE, dispositivo = "Moto", tipo="GYR", extension_ventana=10, solapamiento=20, interpolaLinealmente=FALSE, filtroMediaMovil_Orden5=FALSE, filtroMediaMovil_Orden3=FALSE)
