A weird error


hey have succeeded in making fft program runs on arduino.  however weird error serial print function when try address 2 dimensional array.  the compile goes fine no data comes through serial monitor.


int outpin=9;
int outpin2=10;
int m =0;
int n=64;
int x_n_re[63];
int inputpin=3;
int n_div_2_plus_1=33;

void setup()
{
     serial.begin(9600);        
}
     
void loop()
{
   int i=0;
   int x_n_re[]={115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115};

   int coslut[]={128,127,125,122,118,112,106,98,90,81,71,60,48,37,24,12,0,-12,-24,-37,-48,-60,-71,-81,-90,-98,-106,-112,-118,-122,-125,-127};  //cosine lookuptable
   int sinlut[]={0,12,24,37,48,60,71,81,90,98,106,112,118,122,125,127,128,127,125,122,118,112,106,98,90,81,71,60,48,37,24,12};      //sin lookuptable

byte magnlut[16][16] =
{
{0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240},
{16,22,35,50,65,81,97,113,128,144,160,176,192,208,224,240},
{32,35,45,57,71,86,101,116,131,147,163,178,194,210,226,242},
{48,50,57,67,80,93,107,121,136,151,167,182,197,213,229,244},
{64,65,71,80,90,102,115,128,143,157,172,187,202,217,232,248},
{80,81,86,93,102,113,124,137,150,164,178,193,208,222,237,252},
{96,97,101,107,115,124,135,147,160,173,186,200,214,229,243,255},
{112,113,116,121,128,137,147,158,170,182,195,208,222,236,250,255},
{128,128,131,136,143,150,160,170,181,192,204,217,230,244,255,255},
{144,144,147,151,157,164,173,182,192,203,215,227,240,252,255,255},
{160,160,163,167,172,178,186,195,204,215,226,237,249,255,255,255},
{176,176,178,182,187,193,200,208,217,227,237,248,255,255,255,255},
{192,192,194,197,202,208,214,222,230,240,249,255,255,255,255,255},
{208,208,210,213,217,222,229,236,244,252,255,255,255,255,255,255},
{224,224,226,229,232,237,243,250,255,255,255,255,255,255,255,255},
{240,240,242,244,248,252,255,255,255,255,255,255,255,255,255,255}
};

//bit reversal unrolled loop table
     i=x_n_re[1];x_n_re[1]=x_n_re[32];x_n_re[32]=i;
     i=x_n_re[2];x_n_re[2]=x_n_re[16];x_n_re[16]=i;
     i=x_n_re[3];x_n_re[3]=x_n_re[48];x_n_re[48]=i;
     i=x_n_re[4];x_n_re[4]=x_n_re[8];x_n_re[8]=i;
     i=x_n_re[5];x_n_re[5]=x_n_re[40];x_n_re[40]=i;
     i=x_n_re[6];x_n_re[6]=x_n_re[24];x_n_re[24]=i;
     i=x_n_re[7];x_n_re[7]=x_n_re[56];x_n_re[56]=i;
     i=x_n_re[9];x_n_re[9]=x_n_re[36];x_n_re[36]=i;
     i=x_n_re[10];x_n_re[10]=x_n_re[20];x_n_re[20]=i;
     i=x_n_re[11];x_n_re[11]=x_n_re[52];x_n_re[52]=i;
     i=x_n_re[13];x_n_re[13]=x_n_re[44];x_n_re[44]=i;
     i=x_n_re[14];x_n_re[14]=x_n_re[28];x_n_re[28]=i;
     i=x_n_re[15];x_n_re[15]=x_n_re[60];x_n_re[60]=i;
     i=x_n_re[17];x_n_re[17]=x_n_re[34];x_n_re[34]=i;
     i=x_n_re[19];x_n_re[19]=x_n_re[50];x_n_re[50]=i;
     i=x_n_re[21];x_n_re[21]=x_n_re[42];x_n_re[42]=i;
     i=x_n_re[22];x_n_re[22]=x_n_re[26];x_n_re[26]=i;
     i=x_n_re[23];x_n_re[23]=x_n_re[58];x_n_re[58]=i;
     i=x_n_re[25];x_n_re[25]=x_n_re[38];x_n_re[38]=i;
     i=x_n_re[27];x_n_re[27]=x_n_re[54];x_n_re[54]=i;
     i=x_n_re[29];x_n_re[29]=x_n_re[46];x_n_re[46]=i;
     i=x_n_re[31];x_n_re[31]=x_n_re[62];x_n_re[62]=i;
     i=x_n_re[35];x_n_re[35]=x_n_re[49];x_n_re[49]=i;
     i=x_n_re[37];x_n_re[37]=x_n_re[41];x_n_re[41]=i;
     i=x_n_re[39];x_n_re[39]=x_n_re[57];x_n_re[57]=i;
     i=x_n_re[43];x_n_re[43]=x_n_re[53];x_n_re[53]=i;
     i=x_n_re[47];x_n_re[47]=x_n_re[61];x_n_re[61]=i;
     i=x_n_re[55];x_n_re[55]=x_n_re[59];x_n_re[59]=i;



   
   int stage=0;
   int log_2_n = 6;
   int  n_of_b      = 32;             // number of butterflies
   int  s_of_b      = 1;       // size   of butterflies
   int  a_index     = 0;       // fft data index
   int  a_index_ref = 0;       // fft data index reference
   int x_n_im[64] = {0x0000};

     for(stage=0; stage<log_2_n; stage++)
     {
        for(int nb_index=0; nb_index<n_of_b; nb_index++)
        {
           int tf_index = 0; // twiddle factor index
           for(int sb_index=0; sb_index<s_of_b; sb_index++)
           {
               int resultmulrecos=0;
               int resultmulimcos=0;
               int resultmulresin=0;
               int resultmulimsin=0;            
               int b_index = a_index+s_of_b; // 2nd fft data index            
                         
              resultmulrecos=x_n_re[b_index]*coslut[tf_index];
              resultmulresin=x_n_re[b_index]*sinlut[tf_index];
              resultmulimcos=x_n_im[b_index]*coslut[tf_index];
              resultmulimsin=x_n_im[b_index]*sinlut[tf_index];

              x_n_re[b_index] = x_n_re[a_index]-resultmulrecos+resultmulimsin;
              x_n_im[b_index] = x_n_im[a_index]-resultmulresin-resultmulimcos;
              x_n_re[a_index] = x_n_re[a_index]+resultmulrecos-resultmulimsin;
              x_n_im[a_index] = x_n_im[a_index]+resultmulresin+resultmulimcos;
           
              if (((sb_index+1) & (s_of_b-1)) == 0)
                 a_index = a_index_ref;
              else
                 a_index++;

              tf_index += n_of_b;
           }
           a_index     = ((s_of_b<<1) + a_index) & 63;
           a_index_ref = a_index;
        }
        n_of_b >>= 1;
        s_of_b <<= 1;
     }


int mult =-1;
     for(i=0; i<n_div_2_plus_1; i++)
     {
        // if re{x(n)} negative, multiply -1
        if ((x_n_re & 0x8000)!=0x0000)
        {
           x_n_re=x_n_re*mult;
        }
        // if im{x(n)} negative, multiply -1
        if ((x_n_im & 0x8000)!=0x0000)
        {
           x_n_im=x_n_im*mult;
        }    
     }  




//convert x_n_re values magnitudes
int a=0;
for (int i=0;i<32; i++)
{
=  x_n_re >> 11 ;
 x_n_re=a;
}

//int g=magnlut[x_n_re[
m = magnlut[2][4];
   //for(i=1; i<31; i++)
   //  x_n_re = magnlut[x_n_re >> 11][x_n_im >> 11];
    //x_n_re[32] = magnlut[x_n_re[32] >> 11][0];


//int m = magnlut[12][0];



serial.print("magnitude: ");
for (int i=0;i<32; i++)
{
 
 //serial.print(a);
 //serial.print(x_n_re);
 // serial.print("done");
 serial.print(m);
 serial.print(",");

}
serial.println();

}
     
     
     


if directly address array ie xxxx[1][3]; works if use variable target value ie xxxx[a][3] no output

any advice appreciated!

thanks!!!!!!!!!!!!!!!

if want print bytes decimal values, not corresponding ascii, you'll need do:

serial.print(variable,dec);


Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > A weird error


arduino

Comments