const int uuTable[]=
{
0x0,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
0x8,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
0x4,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
0xc,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,
0x2,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,
0xa,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,
0x6,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,
0xe,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,
0x1,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,
0x9,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,
0x5,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,
0xd,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,
0x3,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,
0xb,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,
0x7,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,
0xf,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff,
};
Cos_TAB[]=
{1,1,0.999,0.997,0.995,0.992,0.989,0.985,0.981,0.976,0.97,0.963,0.957,0.949,0.941,0.932,0.923,0.914,0.903,0.892,0.881,0.869,0.857,0.844,0.83,0.816,0.802,0.787,0.771,0.755,0.739,0.722,0.705,0.687,0.669,0.651,0.632,0.612,0.593,0.573,0.552,0.532,0.511,0.489,0.468,0.446,0.424,0.401,0.378,0.355,0.332,0.309,0.285,0.262,0.238,0.214,0.19,0.166,0.141,0.117,0.092,0.068,0.043,0.018,-0.006,-0.031,-0.055,-0.08,-0.105,-0.129,-0.153,-0.178,-0.202,-0.226,-0.25,-0.274,-0.297,-0.321,-0.344,-0.367,-0.39,-0.412,-0.435,-0.457,-0.479,-0.5,-0.521,-0.542,-0.563,-0.583,-0.603,-0.622,-0.641,-0.66,-0.678,-0.696,-0.714,-0.731,-0.747,-0.763,-0.779,-0.794,-0.809,-0.823,-0.837,-0.85,-0.863,-0.875,-0.887,-0.898,-0.908,-0.918,-0.928,-0.937,-0.945,-0.953,-0.96,-0.967,-0.973,-0.978,-0.983,-0.987,-0.991,-0.994,-0.996,-0.998,-0.999,-1,-1,-0.999,-0.998,-0.996,-0.994,-0.991,-0.987,-0.983,-0.978,-0.973,-0.967,-0.96,-0.953,-0.945,-0.937,-0.928,-0.918,-0.908,-0.898,-0.887,-0.875,-0.863,-0.85,-0.837,-0.823,-0.809,-0.794,-0.779,-0.763,-0.747,-0.731,-0.714,-0.696,-0.678,-0.66,-0.641,-0.622,-0.603,-0.583,-0.563,-0.542,-0.521,-0.5,-0.479,-0.457,-0.435,-0.412,-0.39,-0.367,-0.344,-0.321,-0.297,-0.274,-0.25,-0.226,-0.202,-0.178,-0.153,-0.129,-0.105,-0.08,-0.055,-0.031,-0.006,0.018,0.043,0.068,0.092,0.117,0.141,0.166,0.19,0.214,0.238,0.262,0.285,0.309,0.332,0.355,0.378,0.401,0.424,0.446,0.468,0.489,0.511,0.532,0.552,0.573,0.593,0.612,0.632,0.651,0.669,0.687,0.705,0.722,0.739,0.755,0.771,0.787,0.802,0.816,0.83,0.844,0.857,0.869,0.881,0.892,0.903,0.914,0.923,0.932,0.941,0.949,0.957,0.963,0.97,0.976,0.981,0.985,0.989,0.992,0.995,0.997,0.999,1,1,};
Sin_TAB[]=
{0,0.025,0.049,0.074,0.098,0.123,0.147,0.172,0.196,0.22,0.244,0.268,0.291,0.315,0.338,0.361,0.384,0.407,0.429,0.451,0.473,0.495,0.516,0.537,0.557,0.578,0.598,0.617,0.636,0.655,0.674,0.692,0.709,0.726,0.743,0.759,0.775,0.791,0.805,0.82,0.834,0.847,0.86,0.872,0.884,0.895,0.906,0.916,0.926,0.935,0.943,0.951,0.958,0.965,0.971,0.977,0.982,0.986,0.99,0.993,0.996,0.998,0.999,1,1,1,0.998,0.997,0.995,0.992,0.988,0.984,0.979,0.974,0.968,0.962,0.955,0.947,0.939,0.93,0.921,0.911,0.901,0.89,0.878,0.866,0.853,0.84,0.827,0.813,0.798,0.783,0.767,0.751,0.735,0.718,0.701,0.683,0.665,0.646,0.627,0.608,0.588,0.568,0.547,0.526,0.505,0.484,0.462,0.44,0.418,0.395,0.373,0.35,0.327,0.303,0.28,0.256,0.232,0.208,0.184,0.159,0.135,0.111,0.086,0.062,0.037,0.012,-0.012,-0.037,-0.062,-0.086,-0.111,-0.135,-0.159,-0.184,-0.208,-0.232,-0.256,-0.28,-0.303,-0.327,-0.35,-0.373,-0.395,-0.418,-0.44,-0.462,-0.484,-0.505,-0.526,-0.547,-0.568,-0.588,-0.608,-0.627,-0.646,-0.665,-0.683,-0.701,-0.718,-0.735,-0.751,-0.767,-0.783,-0.798,-0.813,-0.827,-0.84,-0.853,-0.866,-0.878,-0.89,-0.901,-0.911,-0.921,-0.93,-0.939,-0.947,-0.955,-0.962,-0.968,-0.974,-0.979,-0.984,-0.988,-0.992,-0.995,-0.997,-0.998,-1,-1,-1,-0.999,-0.998,-0.996,-0.993,-0.99,-0.986,-0.982,-0.977,-0.971,-0.965,-0.958,-0.951,-0.943,-0.935,-0.926,-0.916,-0.906,-0.895,-0.884,-0.872,-0.86,-0.847,-0.834,-0.82,-0.805,-0.791,-0.775,-0.759,-0.743,-0.726,-0.709,-0.692,-0.674,-0.655,-0.636,-0.617,-0.598,-0.578,-0.557,-0.537,-0.516,-0.495,-0.473,-0.451,-0.429,-0.407,-0.384,-0.361,-0.338,-0.315,-0.291,-0.268,-0.244,-0.22,-0.196,-0.172,-0.147,-0.123,-0.098,-0.074,-0.049,-0.025,-0,};
void FFT_WF(float *Data_A,float *Data_B,int N)
{
int i,Temp;
for(i=0;i<N;i++)
{
Temp = uuTable;
Data_B[i] = Data_A[Temp];
}
for(i=0;i<N;i++)
{
Data_A[i] = Data_B[i];
}
}
void FFT(float *Data_R,float *Data_I,int N,int L)
{
int i,j,k,b,p;
float Temp_R,Temp_I,Temp;
float Temp_K[256];
FFT_WF(Data_R,Temp_K,N); //位反序
FFT_WF(Data_I,Temp_K,N); //位反序
for(i=0; i<L; i++)
{
b=1<<i;
for(j=0;j<b;j++)
{
p=1<<(7-i);
p = p*j;
for(k=j;k<N;k+=b*2)
{
Temp_R = Data_R[k]; //蝶形运算
Temp_I = Data_I[k];
Temp = Data_R[k+b];
Data_R[k]=Temp_R + (Data_R[k+b]*Cos_TAB[p]+ Data_I[k+b]*Sin_TAB[p]
);
Data_I[k]=Temp_I - (Data_R[k+b]*Sin_TAB[p]- Data_I[k+b]*Cos_TAB[p]
);
Data_R[k+b]=Temp_R - (Temp*Cos_TAB+ Data_I[k+b]*Sin_TAB
);
Data_I[k+b]=Temp_I + (Temp*Sin_TAB- Data_I[k+b]*Cos_TAB
);
}
}
}
}