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

So im back at trying to build a large spectrum analyzer and ive come across this tutorial on imgur: Arduino Spectrum Analyzer - Album on Imgur

I can reproduce that but i need more bars since its going to be big.

I read that i can code it as to interpolate the data to create "averages" in between the frequency bars. I can't find that code though. Can someone help me out on how i can add additional bars to the spectrum analyzer?

Im not building the thing to be scientific and accurate. Its being built to look nice so each bar doesnt need to represent a frequency. It just needs to look nice. I feel if i can get maybe 24-32 bars, i can make a really nice looking unit.

Link to his code: #include <math.h>#include <Adafruit_NeoPixel.h>#include "Timer.h"Timer t - Pastebin.com
Link to his video: - YouTube

I got a reply from the arduino subreddit.

http://www.reddit.com/r/arduino/comments/25ldjz/interpolating_data_from_msgeq7_to_create/chieifp

I recall focalist creating a 20-bar analyzer using FFT that played on TV using TVout library maybe.
Would have been 2+ years ago I think. See if you can track that down.

Ill have to take a look into that.

I saw some people doing small LCDs and that just looked really complicated for me. Plus ive worked with the MSGEQ7 previously so im sort of familiar with that route.

The big issue that i have is generating more than the 7 frequencies.

mjkelly93:
The big issue that i have is generating more than the 7 frequencies.

You can't do it with that MSGEQ7.

"Interpolating" doesn't gain you anything except more lights. It's certainly not separating out more frequencies.

Yeah i understand it doesnt gain me any more frequencies. I would be doing it just to generate more lights to fill in the valleys between the 7 frequency peaks.

Say i built this on a large scale, can i use multiple transformers to power the strips by just running additional positive and negative wires to each strip? Im more familiar with the regular SMD 5050 lights and how that signal works. It seems all i need to do with this is power the strips and then let the signal run from start to finish, no need to boost the signal or anything. Am i correct?

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