Autor Tema: Predecir una frecuencia variable -> Filtro Kalman?  (Leído 4482 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Predecir una frecuencia variable -> Filtro Kalman?
« en: 30 de Mayo de 2012, 12:13:54 »
Bueno, pues llevo varios dias dandole vueltas al tema, el caso es que quiero medir una frecuencia en aceleracion o desaceleracion y predecir cual sera la medicion en determinado tiempo.

He visto un ejemplo y usaba un filtro kalman, pero lo veo tan sencillo que no me lo creo, aunque segun los calculos que he hecho funciona, pero no se si tendra alguna pega. Todo esto es porque he estado viendo el filtro y es bastante mas complejo de como lo pone aqui.

Segun este ejemplo lo que hace es:
Captura 1 el periodo por ejemplo pongamos que son 51us
Captura 2 lo mismo, pongamos que estamos en aceleracion y el periodo disminuye a 49us

ahora seria lo siguiente captura=captura2+captura2-captura1=47us en realidad funciona, es una simple cuenta.

Para bajas frecuencias he visto este que es mas complejo:

      ltmp1 = dt3 + dt2;
      if(ltmp1 > 0)
        ddt3 = (long)(2*(dt3 - dt2)*dt3) / (long)ltmp1; // calculate new derivative x dt3
      else
        ddt3 = 0;
      ltmp1 = dt2 + dt1;
      if(ltmp1 > 0)
        ddt2 = (long)(2*(dt2 - dt1)*dt3) / (long)ltmp1; // calculate prev derivative x dt3
      else
        ddt2 = 0;
      ltmp1 += dt3 + dt2;
      if(ltmp1 > 0)
        dddt3 = (long)(4*(ddt3 - ddt2)*dt3) / (long)ltmp1; // calc 2nd derivative x dt3
      else
        dddt3 = 0;
      dtpred = dt3 + ddt3 + dddt3;  // pred new time interval - time bet now and next plse                                                                                                                                                                                                                                    // predict next time interval

funciona mas o menos como el caso anterior, siendo dt1=captura 1, dt2= captura2, dt3=captura3

Es esto realmente el filtro kalman aplicado para este caso?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7865
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #1 en: 30 de Mayo de 2012, 14:58:35 »
Porque no nos ayudas a ayudarte diciendo que es lo que intentas hacer..
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #2 en: 30 de Mayo de 2012, 16:08:07 »
Pues seria lo siguiente: tengo un sensor que tiene me da 360 pulsos por vuelta, lo equivalente a 1º por pulso. Mi idea es calcular el tiempo por grado y hacer que cada X grados se active un pulso. Se que me direis, pues ve contando los flancos y cuando cuentes X numero de flancos activa el pulso, pero esto no es posible, ni tampoco lo quiero hacer asi. El caso es que a una velocidad constante consigo medir los grados perfectamente, osea, con un error de 0,5º como mucho (incluso menos). El problema viene cuando el motor esta acelerando (la frecuencia aumenta progresivamente) o cuando desacelera (la frecuencia disminuye), si mido la frecuencia al ser variable por la aceleracion/desaceleracion entonces al hacer una media tengo varios grados de error y es algo que quiero evitar.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7865
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #3 en: 30 de Mayo de 2012, 16:42:54 »
Hasta aqui nos explicaste la capa media del problema, y es como lo has planteado, pero seguimos sin saber el planteo concreto del problema, y es Que quieres hacer con esto, o por que quieres hacerlo??

No malinterpretes mi pregunta, no intento romperte los hue..., sino ayudarte a ver el problema con un planteo panoramico, para ello debes alejarte de la busqueda de solucion y acercarte al planteo de la problematica.
En palabras simples, debes dejar de ver el arbol y observar el bosque... :mrgreen:

Cuando logres plantear bien la problematica, es posible que tu mismo vea otra forma de solucionarlo, o que nosotros te pudieramos ayudar mejor, porque ahora si la entenderiamos bien...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #4 en: 30 de Mayo de 2012, 17:32:48 »
Además si lo que necesitas es generar un pulso cada x pulsos, porque no es posible de la forma más sencilla de realizarlo  :shock:
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #5 en: 30 de Mayo de 2012, 19:32:58 »
No se puede usar la lectura de pulsos para iniciarlo porque hay que mezclar tiempo con grados. Es decir, si yo quiero que el pulso dure 1ms, y a su vez acabe en el 270º no se podria obtener un tiempo estable teniendo una frecuencia en aceleracion/desaceleracion.

No se como explicarlo mejor, pero puedo hacer que os lo imagineis. Como digo el sensor tiene 360 pulsos por vuelta por lo cual si lo ponemos a 1000RPM obtendriamos 6000Hz, cada grado seria 166.666us, si ahora quiero que el pulso acabe en el grado 180 seria 166.666*180=30ms, activaria un comparador haciendo que el flanco de bajada acabe a los 30ms desde el 0º, entonces teoricamente ese pulso acabaria a los 180º.

EL PROBLEMA viene cuando es una aceleracion, por ejemplo, desde 0RPM a 1000RPM que tarde 1s (el tiempo es variable asiq no se puede tomar esto como referencia) en llegar, en este caso la frecuencia seria ascendente, es decir, el periodo iria disminuyendo segun aumenta la velocidad. En este caso no podria medir la frecuencia ya que al ser ascendente y usando el metodo anterior (180*periodo) el pulso no acabaria exactamente en el 180º.

En un ejemplo de lo que quiero hacer vi el tema del filtro de Kalman, que lo que hace es predecir el valor entre captura-captura de pulsos. Una frecuencia ascendente el periodo segun las capturas seria de la siguiente forma: 50us-49us-48us-47... el filtro de Kalman predeceria el siguiente valor sin tener que leerlo, siendo la aceleracion/des lineal.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7865
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #6 en: 30 de Mayo de 2012, 19:44:48 »
Mi mente es corta, sigo sin entender el uso que quieres darle a ese pulso de 180º , igual que Suky, no entiendo porque no contar los pulsos hasta 180 y subir o bajar un pin cuando eso ocurra.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #7 en: 30 de Mayo de 2012, 19:52:02 »
El pulso es temporizado o por grados? Si es por grados solo debes contar pulsos, no importa en el tiempo, y sino todavia no logras explicar lo que quieres hacer  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #8 en: 30 de Mayo de 2012, 21:02:09 »
180º es por poner un ejemplo, pero ahora decirme, como hariais para que ese pulso tuviese x tiempo, por ejemplo 1ms antes de los 180º, como ya digo la frecuencia es variable, por lo cual no se puede usar que a los 175º se encienda el pulso, y a los 180º se apage, mas que nada porque a bajas rpm 1º sera mas de 1ms




Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #9 en: 30 de Mayo de 2012, 21:16:56 »
O sea, el pulso de activarse x ms antes de y grados, no es cierto? ... No te enojes, vamos de a poquito tratando de entenderte  :tongue:
No contesto mensajes privados, las consultas en el foro

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7865
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #10 en: 30 de Mayo de 2012, 22:00:42 »
Igual en mi caso, creo que tratas de proteger tanto la base del proyecto, que no logras explicarnos bien lo que necesitas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #11 en: 30 de Mayo de 2012, 22:40:41 »
bien, os lo enfoco de otra forma para que asi veais que no se puede contar pulsos xD

tenemos un sensor que nos da 12 pulsos por vuelta, necesitamos que se active un pulso a los 153º exactamente con una precision de 1º+-. Cuando la velocidad es constante o varia muy poco no hay problema ya que se mediria la frecuencia, dividiriamos la frecuencia/360 y multiplicariamos por 153, asi obtendremos el tiempo en el que el grado 153 pasaria contando desde el 0º.

Esa parte correcta, pero ahora pasa que si el motor esta acelerando por ejemplo de 100rpm a 3000rpm en X tiempo no podemos usar el metodo de leer la frecuencia, ya que lo unico que obtendriamos es la media en esos 360º, pero al poner el tiempo*153 observamos que el pulso esta desfasado respecto al grado real 153º, esto es porque en aceleracion la frecuencia es como un acordeon, lo que necesito es saber como podria hacer para predecir el tiempo en el que pasaria el grado 153º con esta frecuencia aumentandose o disminuyendo.


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7865
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #12 en: 30 de Mayo de 2012, 22:55:30 »
Pues seria lo siguiente: tengo un sensor que tiene me da 360 pulsos por vuelta, lo equivalente a 1º por pulso. Mi idea es calcular el tiempo por grado y hacer que cada X grados se active un pulso. Se que me direis, pues ve contando los flancos y cuando cuentes X numero de flancos activa el pulso, pero esto no es posible, ni tampoco lo quiero hacer asi. El caso es que a una velocidad constante consigo medir los grados perfectamente, osea, con un error de 0,5º como mucho (incluso menos). El problema viene cuando el motor esta acelerando (la frecuencia aumenta progresivamente) o cuando desacelera (la frecuencia disminuye), si mido la frecuencia al ser variable por la aceleracion/desaceleracion entonces al hacer una media tengo varios grados de error y es algo que quiero evitar.

Aqui nos habias perdido, porque dijiste que tenias 360 pulsos por vuelta, asi que era solo contar pulsos.
En mi humilde opinion, lo que estas haciendo o queriendo hacer no es un predictor, sino mas bien un adivinator.... :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #13 en: 30 de Mayo de 2012, 23:00:28 »
bien, os lo enfoco de otra forma para que asi veais que no se puede contar pulsos xD

tenemos un sensor que nos da 12 pulsos por vuelta, necesitamos que se active un pulso a los 153º exactamente con una precision de 1º+-. Cuando la velocidad es constante o varia muy poco no hay problema ya que se mediria la frecuencia, dividiriamos la frecuencia/360 y multiplicariamos por 153, asi obtendremos el tiempo en el que el grado 153 pasaria contando desde el 0º.

Esa parte correcta, pero ahora pasa que si el motor esta acelerando por ejemplo de 100rpm a 3000rpm en X tiempo no podemos usar el metodo de leer la frecuencia, ya que lo unico que obtendriamos es la media en esos 360º, pero al poner el tiempo*153 observamos que el pulso esta desfasado respecto al grado real 153º, esto es porque en aceleracion la frecuencia es como un acordeon, lo que necesito es saber como podria hacer para predecir el tiempo en el que pasaria el grado 153º con esta frecuencia aumentandose o disminuyendo.

 :D Yo leo esto y digo, para que medir frecuencia? Si quieres saber en que grado va, hay que contar los pulsos  :D
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Predecir una frecuencia variable -> Filtro Kalman?
« Respuesta #14 en: 30 de Mayo de 2012, 23:19:55 »
bien, os lo enfoco de otra forma para que asi veais que no se puede contar pulsos xD

tenemos un sensor que nos da 12 pulsos por vuelta, necesitamos que se active un pulso a los 153º exactamente con una precision de 1º+-. Cuando la velocidad es constante o varia muy poco no hay problema ya que se mediria la frecuencia, dividiriamos la frecuencia/360 y multiplicariamos por 153, asi obtendremos el tiempo en el que el grado 153 pasaria contando desde el 0º.

Esa parte correcta, pero ahora pasa que si el motor esta acelerando por ejemplo de 100rpm a 3000rpm en X tiempo no podemos usar el metodo de leer la frecuencia, ya que lo unico que obtendriamos es la media en esos 360º, pero al poner el tiempo*153 observamos que el pulso esta desfasado respecto al grado real 153º, esto es porque en aceleracion la frecuencia es como un acordeon, lo que necesito es saber como podria hacer para predecir el tiempo en el que pasaria el grado 153º con esta frecuencia aumentandose o disminuyendo.

 :D Yo leo esto y digo, para que medir frecuencia? Si quieres saber en que grado va, hay que contar los pulsos  :D

Y como haces para saber que estas en el grado 153 con tan solo 12 pulsos por vuelta?, cada pulso serian 30º, puedes contar los pulsos, pero serian 5,1pulsos, ese 0,1 seria un error de 3º. Eso suponiendo que fuesen 153º, que si ese valor se cambia pueden ser mas de 15º de error.