libreria-de-arduino-interpolacion

Librería de Arduino Interpolación

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.

arduino-interpolation-step

Lineal

Interpolación linea. Un parámetro adicional control si los valores fuera del rango X-Values son extrapolados o recortados.

arduino-interpolation-linear

Smooth

Aplica una función de suaviado cúbico en el cambio de valores.

arduino-interpolation-smooth

Catmull spline

Tipica interpolación de Catmull spline.

arduino-interpolation-catmull-spline

Constrained spline

Un tipo especial de spline que no sobreoscila.

arduino-interpolation-constrained-spline

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

github-full

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full