float sig1 = 500*sin(50*2*3.1415926*i*3200);//采样频率为3200,256点 分辨率为 3200/256=12.5hz
float sig2 = 250*sin(100*2*3.1415926*i*3200);
bufin[i] = sig1 +sig2 + 2048;
cr4_fft_256_stm32(bufout,bufin,256);
lX= (bufout[nfill]<<16)>>16; //简单修改了powermag
lY= (bufout[nfill] >> 16);
X= 64*((float)lX)/32768;
Y = 64*((float)lY)/32768;
Mag = sqrt(X*X+ Y*Y)/64;
GUI_DispFloat((u32)(Mag*65536),9); 显示
GUI_DispString("\n");
如上 分辨率为12.5hz 用了 50hz和250hz的信号源和直流分量,但是结果 直流分量计算为2044(应2048);50hz(nfill=4,12.5*4)时结果为261(应为500)250hz时为185346(应为200)并且凡是应为0的分量大部分都等于了185326,这个FFT算法是不是不对啊? |