Interpolating data from the MSGEQ7 shield to add more bars for spectrum analyzer

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