TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: MerLiNz en 30 de Mayo de 2012, 12:13:54

Título: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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?
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT en 30 de Mayo de 2012, 14:58:35
Porque no nos ayudas a ayudarte diciendo que es lo que intentas hacer..
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT 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...
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Suky 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:
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT 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.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Suky 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:
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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



Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Suky 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:
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT 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...
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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.

Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT 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
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Suky 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
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz 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.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT en 30 de Mayo de 2012, 23:27:07
Insisto en que no hay filtro que funcione con menos informacion que la necesaria para poder trabajar, si quieres tener seguridad en el empleo del filtro deberas muestrear al doble de la frecuencia de la señal, por lo tanto como dice Suky, estarias contando con precision y no necesitas ningun filtro.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Suky en 31 de Mayo de 2012, 00:04:52
Pero no tenia 360 pulsos por vuelta?  :z) O era otro ejemplo con datos erróneos para explicar el caso?
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 00:09:37
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.



Te he puesto este ejemplo, leetelo.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Nocturno en 31 de Mayo de 2012, 02:23:21
¿La aceleración o deceleración de tu encoder es siempre la misma o varía en cada caso?
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 11:09:37
varia pero es lineal, es decir, quizas en X ocasion la aceleracion es de 0-1000RPM en 1s, y en otra ocasion puede ser 0-1000RPM en 0,5s, esto por poner ejemplos
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT en 31 de Mayo de 2012, 11:26:37
Es una llenadora volumetrica ?? :lol:
Y quieres cortar por grados para llegar a un peso estandar ? ;-)
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 12:07:19
no, es una centralita para automovil, el control de encendido de las bobinas.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT en 31 de Mayo de 2012, 12:12:49
Del encendido del motor  ?? :shock: :shock: :shock: :shock:
En mi auto no lo pruebo !!  :D :D :D :D
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Nocturno en 31 de Mayo de 2012, 13:26:54
Si la aceleración es lineal, podrías predecir la velocidad y la posición en cualquier momento.
Sólo tendrías que hacer los cálculos tras varias lecturas después del arranque para determinar cual es esa aceleración.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 14:12:20
Vaya, yo que pensaba usarte como conejillo de indias MLGSOFT xD

Sobre el calculo, seria de la siguiente forma no?

Si las capturas son 55-50-45-40... entonces en caso de querer predecir 10º seria 5*10º cierto?
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 20:03:47
bueno estos son los resultados:

(http://img825.imageshack.us/img825/6531/screenshotfh.png)

aunque hay unos 100us de error mas o menos esta aceptable, de todas formas seguramente sera por que uso un motorcillo electrico que tiene una aceleracion bastante rapida (0-20000RPM <1s) y un frenado tambien bastante rapido
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MGLSOFT en 31 de Mayo de 2012, 20:56:50
Que usaste para medir eso ??
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 31 de Mayo de 2012, 21:05:57
el minilogic, aunq no se como lo denominan, pero es un clone del usbee (analizador logico), la verdad esq me he quedado corto de canales xD
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Nocturno en 01 de Junio de 2012, 02:08:39
No entiendo qué significa esa gráfica, pero respecto al ejemplo que pusiste antes
Si las capturas son 55-50-45-40... entonces en caso de querer predecir 10º seria 5*10º cierto?

Ahí no hay aceleración, eso es velocidad constante, ¿no?
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: Picuino en 01 de Junio de 2012, 02:22:06
Creo que lo que quieres en definitiva es saber dónde está tu motor y dónde va a estar dentro de un rato (en que grado de giro)

Creo que la solución es programar una simulación del movimiento, simular con ecuaciones sencillas la posición del eje motor en cada momento.
Si tienes datos de la posición del acelerador y de la resistencia que encuentra el motor mejor.

Después tienes que realizar los cálculos de cinemática inversa (tus fórmulas predicen la posición y tú debes calcular el tiempo a partir de ellas)

La simulación más sencilla sería:

   ángulo_futuro = angulo_actual + velocidad_angular * tiempo + 1/2 * aceleración_angular * tiempo ^ 2

La aceleración debe ser constante para esta fórmula. Para aceleración no constante la fórmula se complica un poco más.

Si lo que quieres conocer es el tiempo que tardará en llegar al ángulo_futuro, debes despejar la fórmula directamente.
En algunas ocasiones despejar estas fórmulas es difícil, de manera que no se despeja directamente. Lo que se hace es ir introduciendo distintos valores de tiempo hasta que cuadra la solución con el ángulo_futuro que desees.
El método se llama algoritmo de Newton y sirve para encontrar soluciones de ecuaciones.



Saludos.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 01 de Junio de 2012, 10:54:54
En ese momento si, el problema esq capturarlo en aceleracion es muy dificil con el motor que uso para emularlo. Pero luego lo pondre donde se ven mas separados y se ve juntandose.
Título: Re: Predecir una frecuencia variable -> Filtro Kalman?
Publicado por: MerLiNz en 01 de Junio de 2012, 12:45:26
aqui mas o menos se puede ver, pero como digo, el motor que uso para emularlo es demasiado rapido, un motor de combustion no llega a las 0->15000rpm en 0,5s xD
(http://img14.imageshack.us/img14/5787/screensho2t.png)