stm32f407 dsp库做fft运算

2019-07-20 09:48发布

 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运算之间要隔一段时间????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。