TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hernanutn en 01 de Noviembre de 2014, 16:44:47
-
hola, mi consulta como debo realizar el codigo c para integrar valores sensados.. desde ya gracias
-
Basandome en lo que es "el area debajo de la curva" y pensando como uno llega a la integral, y ademas como es discreto y no tenes otro valor entre muestras. Lo unico que se me ocurre es por aproximaciones rectangulares. Asi como cuando te explican integrales por primera vez.
Sabiendo el intervalo de tiempo y el valor de la función ( lo que te da el ADC ), vas sumando cada una de las areas. Mientras mas pequeño sea el intervalo de tiempo mas próximo va ser el valor a la integral continua.
Podes tomar como si el valor del ADC fuera el comienzo de la grafica, tal cual como dice en Sumas superiores
O Tambien lo podes pensar de la otra forma y llegar a como en el grafico muestra Sumas inferiores.
Tanto como en una como en otra te sobra o te falta
(http://static.flickr.com/25/64165272_ae16a6b8e7.jpg?v=0)
Creo que lo mas correcto es:
Hacer una suma de los 2 ultimos valores que entran al ADC, lo dividis por 2 ( rotas 1 sola posicion ), asi te queda una aproximacion trapezoidal. Al menos es lo mas aproximado que pienso, y como dije antes, mientras mas corto el tiempo entre muestras mejor
{ [f(Xn) + f(Xn-1)] / 2 } * deltaX
Para que lo entiendas te dejo un video ( OJO que en el caso del video es una funcion continua y el 3er caso que muestra no puede realizarse en estos casos, por razones obvias )
-
gracias
-
yo lo he hecho en CCS como describe KILLERJC, a fin de sacar valor eficaz de una señal en tiempo real y funciona muy bien.
si conseguis un tiempo de muestreo multiplo de potencia de dos podes dividir por shifting y sale volando
-
float integral(float a, float b, float (*f) (float))
{
float sum = 0.0;
float x;
int n;
//Evaluar la integral {a,b} en f(x)
for(n = 0; n <= 100; n++)
{
x = ((n / 100.0) * (b-a)) + a;
sum += (f(x)*(b-a)) / 101.0;
}
return sum;
}
//Adapatado del ejemplo en http://en.wikipedia.org/wiki/Function_pointer