arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);
while(1)
{
if(fill_fft_buf() == 1) // 等待采样完成,采样时间51ms
{
arm_cfft_radix4_f32(&scfft, fft_inputbuf); //fft运算
arm_cmplx_mag_f32(fft_inputbuf, fft_outputbuf, FFT_LENGTH); //求模
DrawAmplitudefrequencyCurve(); // 绘制频谱
delay_ms(47); //延时!!!
}
}
unsigned short DrawAmplitudefrequencyCurve(void)
{
u16 i = 2;
u16 MaxPosition;
double lf_MaxVolt;
u16 PiontX;
u16 PiontY = 300;
u16 dif = 0;
LCD_Clear(WHITE);
for(i = 2; i < FFT_LENGTH_DIV2;)
{
if(fft_outputbuf
> lf_MaxVolt)
{
lf_MaxVolt = fft_outputbuf;
MaxPosition = i;
}
dif = fft_outputbuf / 5;
if(dif >= 200)
{
dif = 200;
}
 iontX = 220 - dif;
LCD_Line(220, PiontY, PiontX, PiontY, RED);
 iontY -= 1;
i += 2;
}
LCD_Num(2, 2, MaxPosition*20, 5, RED);
return MaxPosition;
}
20KHz采样率,用dsp库做1024点的fft运算,然后在液晶上面简单绘制频谱。主循环中加上延时绘制的频谱是对的,不加延时绘制的频谱不对,fft算出来的数据是错误的,这是怎么回事呢? 难道两次fft运算之间要隔一段时间????
一周热门 更多>