Algoritmo para Regresión Estadística en MCU

Muchas veces tenemos que ingresar la señal analógica de un sensor de cualquier tipo en un microcontrolador para que esta sea tratada o mostrada en alguna pantalla.

Lo que sucede con los sensores es que no siempre tienen respuesta lineal, o bien nos entregan valores que nos sean útiles para mostrar en una pantalla.

Suponemos un sensor de temperatura que entrega un nivel de tensión no lineal en función a la medición de la temperatura.
Tomaremos 10 muestras a distintas temperaturas y crearemos una tabla de valores de x e y, donde y serán los valores de temperatura y x serán los valores de tensión medidos en función de la temperatura.

Si quisiéramos crear algún algoritmo informático por ejemplo para leer el sensor y mostrar los datos de temperatura en pantalla, por tratarse de un sensor no lineal, deberíamos aplicar algún acondicionamiento estadístico para que en la pantalla sean lineales respecto a la temperatura.
Para esto podemos aplicar una regresión estadística que alimentaremos desde los valores de la tabla de valores que detallaba anteriormente.

Existen muchos tipos de regresiones (Lineal, Logarítmica, Exponencial, Cuadrática, Polinomica, etc…), cada tipo de regresión será elegida en función al gráfico que salga de la tabla. Es decir, si la tabla de respuesta del sensor nos indica una curva similar a una parábola, claramente debemos aplicar una regresión cuadrática, lo mismo si la curva de respuesta es logarítmica, exponencial, si posee muchos picos y valles tal vez nos convenga una polinomica o una suma de funciones, claramente se puede acomplejar tanto como uno quiera, como el procesador nos permita manejar operaciones matemáticas.

El Office, en el programa Excel, nos permite a partir de una tabla, generar el gráfico de la curva y también aplicarle la regresión que queramos dejando en evidencia la ecuación de la misma.

Por razones obvias solo mostrare los cálculos y ecuaciones de una regresión lineal, ya que el resto son más complejas y no tendría sentido en el post ya que se pueden calcular con el Excel.

Primero la tabla de valores:

Ahora vamos a trazar la curva con estos valores:


Como se puede ver en el gráfico la curva es casi lineal, si bien no es una recta podemos realizar una regresión lineal y nos dará una ecuación de dispersión que nos servirá para incorporar en el proceso informático.

Como sabemos la ecuación de una recta es: y=mx+b, ahora para darle los valores correctos a m y a b, debemos aplicar las formulas de regresión lineal.

Donde:


Primero tenemos que calcular los promedios, o las medias.


Ahora ya tenemos los pre cálculos realizados, tenemos que hallar b.


Lo haremos por partes, primero el numerador y luego el denominador.


Ahora realizamos el cálculo de m.

Ahora debemos hallar b.


Quedando así la ecuación de la recta.


Si tomamos el gráfico donde mostramos la curva que representa la tabla de valores y superponemos la recta que hallamos recién, nos quedara el siguiente gráfico.


Para nuestra comprobación, aplicaremos la ecuación lineal a la tabla de valores del sensor.


Comprobando los valores resultantes de la ecuación lineal, podemos ver que en función de la temperatura real de medición y los valores de tensión entregados por el sensor, tenemos una lectura con un error pero que aproxima a los valores reales de temperatura gracias a la dispersión lineal que se puede apreciar en los gráficos.

En nuestro programa en C, entonces leeremos el ADC.

ADC configurado a 8bit (0 a 255), +Vref: 5V, -Verf: 0V.
valSensorInt = read_adc(); Leemos ADC y alojamos en variable int8.
valSensor = 5.0 * valSensorInt / 256; Convertimos a float.
valLCD = 18.70422 * valSensor – 10.78811; Aplicamos regresion lineal.

No hay comentarios.:

Publicar un comentario