La libraría Arduino Interpolation proporciona funciones para interpolación Step, Lineal, Smooth, Catmull Spline, y Constrained Spline
Manual de uso
Todas las funciones de la librería son funciones estáticas que reciben dos arrays de X-Values e Y-Values, el tamaño de los arrays, y el punto X donde realizar la interpolación y reciben el valor Y estimado en el punto X.
Modos de interpolación
Step
Simple interpolación de tipo Step, estima el valor como Yn-1 o Yn en función de la ubicación del punto X en cada intervalo. El punto relativo de cambio, dentro del intervalo, es un parámetro opcional. 0.0 significa cambio al principio del intervalo, 1.0 al final del intervalo, mientras que 0.5 significa cambio en el medio del intervalo.
Lineal
Interpolación linea. Un parámetro adicional control si los valores fuera del rango X-Values son extrapolados o recortados.
Smooth
Aplica una función de suaviado cúbico en el cambio de valores.
Catmull spline
Tipica interpolación de Catmull spline.
Constrained spline
Un tipo especial de spline que no sobreoscila.
Ejemplos
La librería Arduino Interpolation incluye los siguientes ejemplos para ilustrar su uso.
- Example: Ejemplo que muestra el uso de las distintas funciones de interpolación
#include "InterpolationLib.h"
const int numValues = 10;
double xValues[10] = { 5, 12, 30, 50, 60, 70, 74, 84, 92, 100 };
double yValues[10] = { 150, 200, 200, 200, 180, 100, 100, 150, 220, 320 };
void setup()
{
while (!Serial) { ; }
Serial.begin(115200);
for (float xValue = 0; xValue <= 110; xValue += .25)
{
Serial.print(Interpolation::Step(xValues, yValues, numValues, xValue, 0.0));
Serial.print(',');
Serial.print(Interpolation::Step(xValues, yValues, numValues, xValue, 0.5));
Serial.print(',');
Serial.print(Interpolation::Step(xValues, yValues, numValues, xValue, 1.0));
Serial.print(',');
Serial.print(Interpolation::SmoothStep(xValues, yValues, numValues, xValue));
Serial.print(',');
Serial.print(Interpolation::Linear(xValues, yValues, numValues, xValue, false));
Serial.print(',');
Serial.print(Interpolation::Linear(xValues, yValues, numValues, xValue, true));
Serial.print(',');
Serial.print(Interpolation::CatmullSpline(xValues, yValues, numValues, xValue));
Serial.print(',');
Serial.println(Interpolation::ConstrainedSpline(xValues, yValues, numValues, xValue));
}
}
void loop()
{
}
Instalación
- Descargar la última versión desde GitHub
- Descomprimir el archivo
- Copiar en tu carpeta de librerías (normalmente Mis Documentos\Arduino\libraries)
- Relanzar el IDE de Arduino
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.