Hi,
I am using the Open Music Labs FHT library in my recent (and first Arduino) project and I am stuck on the function below. The problem is that as soon as I call fht_mag_lin(), it changes the value of FHTnum variable. Actually adds 512 to it. Also, if I put Serial.print (FHTnum) right before calling the doFHT(), everything works fine.
Thanks for help,
Pavel.
void calculateAverageFHT (){
#define FHT_GRAPH_POINTSPERCHAR 45.0
unsigned int n = 0;
unsigned int pointer = (bufferPointer + 1) % BUFFER_LENGTH;
#ifdef TRACE_INPUT_BUFFER
showBuffer ();
#endif
for (unsigned int FHTnum = 1; FHTnum <= FHTS; ++FHTnum)
{
for (unsigned int curSample = 0; curSample < FHT_N; ++curSample)
{
fht_input[curSample] = inputBuffer[pointer] * 32;
pointer = (pointer + 1) % BUFFER_LENGTH;
}
#ifdef TRACE_FHT_SWITCH
Serial.println (" ");
Serial.println ("*** FHT *********************************************************************************************");
Serial.print (FHTnum);
Serial.print (" / ");
Serial.println (FHTS);
#endif
// Serial.print (FHTnum);
doFHT ();
for (unsigned int curBin = 2; curBin < FHT_N/2; ++curBin)
{
if (FHTnum == 1) {
averageFHT[curBin] = fht_lin_out [curBin];
}
else if (FHTnum == FHTS) {
averageFHT[curBin] = (averageFHT[curBin] + fht_lin_out [curBin]) / FHTS;
}
else {
averageFHT[curBin] = (averageFHT[curBin] + fht_lin_out [curBin]);
}
#ifdef TRACE_FHT_SWITCH
Serial.print (curBin);
if (curBin < 10) Serial.print (": ");
else Serial.print (": ");
n = fht_lin_out [curBin] / FHT_GRAPH_POINTSPERCHAR;
for (unsigned int j = 1; j < n; ++j)
{
Serial.print ("‒");
}
Serial.print ("● ");
Serial.println (fht_lin_out [curBin]);
#endif
}
}
void doFHT () {
fht_window(); // window the data for better frequency response
fht_reorder(); // reorder the data before doing the fht
fht_run(); // process the data in the fht
fht_mag_lin(); // take the output of the fht
}