TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Ruco en 01 de Julio de 2020, 19:45:26

Título: Reducir expresión para leer sensores
Publicado por: Ruco en 01 de Julio de 2020, 19:45:26

Saludos amigos de este foro.

Necesito ayuda para reducir una expresión de código en ccs c. El caso es el siguiente:

Estoy leyendo 5 sensores a los cuales les aplico un filtro de kalman para ellos, la cosa es que mi código se vuelve un poco largo y me gustaría saber si se puede reducir con algún ciclo For por ejemplo. Nota: el código así como lo tengo funciona solo quiero reducirlo para no hacerlo tan largo

La expresión de código que quiero reducir es el siguiente:

Código: C++
  1. float Xe[5];
  2.  
  3.  
  4. // kalman process
  5.          Pc = P + varProcess;
  6.          G = Pc/(Pc + varVolt);    // kalman gain
  7.          P = (1-G)*Pc;
  8.          Xp = Xe[0];
  9.          Zp = Xp;
  10.          Xe[0] = G*(((float) ADC_Read[0] * ADC_Coef[0])-Zp)+Xp;   // valor de salida kalman
  11.          
  12.          // kalman process
  13.          Pc = P + varProcess;
  14.          G = Pc/(Pc + varVolt);    
  15.          P = (1-G)*Pc;
  16.          Xp = Xe[1];
  17.          Zp = Xp;
  18.          Xe[1] = G*(((float) ADC_Read[1] * ADC_Coef[1])-Zp)+Xp;   // valor de salida kalman
  19.          
  20.          // kalman process
  21.          Pc = P + varProcess;
  22.          G = Pc/(Pc + varVolt);    
  23.          P = (1-G)*Pc;
  24.          Xp = Xe[2];
  25.          Zp = Xp;
  26.          Xe[2] = G*(((float) ADC_Read[2] * ADC_Coef[2])-Zp)+Xp;   // valor de salida kalman
  27.          
  28.          // kalman process
  29.          Pc = P + varProcess;
  30.          G = Pc/(Pc + varVolt);    
  31.          P = (1-G)*Pc;
  32.          Xp = Xe[3];
  33.          Zp = Xp;
  34.          Xe[3] = G*(((float) ADC_Read[3] * ADC_Coef[3])-Zp)+Xp;   // valor de salida kalman
  35.          
  36.          // kalman process
  37.          Pc = P + varProcess;
  38.          G = Pc/(Pc + varVolt);    
  39.          P = (1-G)*Pc;
  40.          Xp = Xe[4];
  41.          Zp = Xp;
  42.          Xe[4] = G*(((float) ADC_Read[4] * ADC_Coef[4])-Zp)+Xp;   // valor de salida kalman


Lo e intentado así pero no funciona, ya que los valores de lectura están muy por debajo de los reales.

Código: C++
  1. for(int i=0; i<5;i++)
  2. {
  3.          // kalman process
  4.          Pc = P + varProcess;
  5.          G = Pc/(Pc + varVolt);    
  6.          P = (1-G)*Pc;
  7.          Xp = Xe[i];
  8.          Zp = Xp;
  9. }
  10. Xe[0] = G*(((float) ADC_Read[0] * ADC_Coef[0])-Zp)+Xp;   // valor de salida kalman
  11. Xe[1] = G*(((float) ADC_Read[1] * ADC_Coef[1])-Zp)+Xp;   // valor de salida kalman
  12.  Xe[2] = G*(((float) ADC_Read[2] * ADC_Coef[2])-Zp)+Xp;   // valor de salida kalman
  13. Xe[3] = G*(((float) ADC_Read[3] * ADC_Coef[3])-Zp)+Xp;   // valor de salida kalman
  14. Xe[4] = G*(((float) ADC_Read[4] * ADC_Coef[4])-Zp)+Xp;   // valor de salida kalman

Alguna ayuda?.
Título: Re:Reducir expresión para leer sensores
Publicado por: KILLERJC en 01 de Julio de 2020, 20:37:01
Esto es lo que queres hacer?

Código: C
  1. for(int i=0; i<5;i++)
  2. {
  3.          Pc = P + varProcess;
  4.          G = Pc/(Pc + varVolt);    
  5.          P = (1-G)*Pc;
  6.          Xp = Xe[i];
  7.          Zp = Xp;
  8.          Xe[i] = G*(((float) ADC_Read[i] * ADC_Coef[i])-Zp)+Xp;
  9. }

Aunque podrias simplificarlo un poquito mas:

Código: C
  1. for(int i=0; i<5;i++)
  2. {
  3.          Pc = P + varProcess;
  4.          G = Pc/(Pc + varVolt);    
  5.          P = (1-G)*Pc;
  6.          Xe[i] = G*(((float) ADC_Read[i] * ADC_Coef[i])-Xe[i])+Xe[i];
  7. }

Ya que Zp=Xp=Xe
Título: Re:Reducir expresión para leer sensores
Publicado por: Ruco en 01 de Julio de 2020, 21:34:16
 :o Funciona  :) :) :)

Gracias, ahora funciona todo bien. Y todo simplificado KILLERJC.
Título: Re:Reducir expresión para leer sensores
Publicado por: Eduardo2 en 01 de Julio de 2020, 23:21:11

Código: [Seleccionar]
P = (1-G)*Pc;
¿Qué sentido tiene esto si no se lo usa?
Título: Re:Reducir expresión para leer sensores
Publicado por: KILLERJC en 02 de Julio de 2020, 00:21:01
Lo usa en la próxima vuelta