做的是512点的 不是us级的么 怎么我测出来都快50ms了,频率和幅值算得还算正常,难道要用库,求使用库做FFT的例程
void test (void)
{
u16 i=0;
for(i=0;i<512;i++)
{
x11.real=(ADCDataTab[i+fft_j])*1.0;
x11.img=0;
x22.real=0;
x22.img=0;
}
FFT1();
}
int FFT1(void)
{
complex c;
x1=x11;
x2=x22;
//蝶形运算
for(kk=0;kk<power;kk++)
{
for(jj=0;jj<(1<<kk);jj++)
{
bfsize=1<<(power-kk);
for(ii=0;ii<bfsize/2;ii++)
{
pp=jj*bfsize;
x2[ii+pp].real=x1[ii+pp].real+x1[ii+pp+bfsize/2].real;
x2[ii+pp].img=x1[ii+pp].img+x1[ii+pp+bfsize/2].img;
c.real=x1[ii+pp].real-x1[ii+pp+bfsize/2].real;
c.img =x1[ii+pp].img-x1[ii+pp+bfsize/2].img;
x2[ii+pp+bfsize/2].real=c.real*W[ii*(1<<kk)].real-c.img*W[ii*(1<<kk)].img;
x2[ii+pp+bfsize/2].img =c.real*W[ii*(1<<kk)].img+c.img*W[ii*(1<<kk)].real;
}
}
x=x1;
x1=x2;
x2=x;
}
for(jj=0;jj<count;jj++)
{
pp=0;
for(ii=0;ii<power;ii++)
{
if (jj&(1<<ii)) pp+=1<<(power-ii-1);
}
x2[jj]=x1[pp];
}
for (ii=0;ii<256;ii++)
{
mag[ii]=sqrt(x2[ii].real*x2[ii].real+x2[ii].img*x2[ii].img);
//mag[ii+128]=atan2(x2[ii].real,x2[ii].img)*180/pi;
}
return ii;
}
|