simple linear interpolation, maps one array on another bigger one (try different sizes)
//
// FILE: interpolation.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// PURPOSE: demo
// DATE: 2014-05-24
// URL:
//
// Released to the public domain
//
int ar1[7] = {
10, 50, 20, 70, 65, 20, 40 };
int ar2[23];
void setup()
{
Serial.begin(115200);
Serial.println("Start ");
printHistogram(ar1, 7);
linearInterpolate(ar1, ar2, 7, 23);
printHistogram(ar2, 23);
}
void loop()
{
}
void linearInterpolate(int *p, int *q, int lp, int lq)
{
float step = (1.0 * (lp-1))/(lq-1);
for (int i= 0; i < lq; i++)
{
float v = i * step;
int x = v;
v = v - x;
// Serial.print(x);
// Serial.print(" ");
// Serial.println(v);
if (i < lq-1) q[i] = (1-v)*p[x] + v*p[x+1];
else q[i] = p[x]; // prevent out of index error
}
}
void printHistogram(int p[], int len)
{
for (int i=0; i<len; i++)
{
Serial.print(p[i]);
Serial.print("\t");
for (int j=0; j < p[i]; j++)
{
Serial.print(']');
}
Serial.println();
}
Serial.println();
}
you can add small random noise to hide the linear interpolation