llljh 发表于 2022-1-2 09:27

STM32F0 FFT

我这样计算出来的值是不是对的?为什么每个频率上都有值啊?

llljh 发表于 2022-1-2 09:31


zhenykun 发表于 2022-1-2 09:38


楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

llljh 发表于 2022-1-2 09:40

程序是这样子:
用ADC采集值填入fft输入buff
void ADC_proc(void)
{
    uint16_t ai,cnt;
      
    if(adc_conv_done)
    {
       adc_conv_done = 0;


            for(ai=0;ai<NPT;ai++)
                {
                      lbufin = (float)(adc_buf-2048);
                        lbufin = (float)0;
                }
          FFT_proc();      
         HAL_ADC_Start_DMA(&hadc,(uint32_t*)adc_buf,sizeof(adc_buf)/2);
    }
}



FFT处理



floatlbufin;                                                         /* Complex input vector */
floatlbufout;                                                          /* Complex output vector */
floatlbufmag;                                                                  /* Magnitude vector */
uint16_t fftSize = 64;


uint8_t ifftFlag = 0;
uint8_t doBitReverse = 1;
uint16_t audio_mag;
externuint8_taudio_intf_flag;
//uint32_t refIndex = 213,
uint32_t testIndex = 0;
__IO uint8_tnew_mag_flag;


void FFT_proc()
{                     
    arm_cfft_f32(&arm_cfft_sR_f32_len64, lbufin, ifftFlag, doBitReverse);
      arm_cmplx_mag_f32(lbufin,lbufout,fftSize);
    arm_max_f32(lbufout, NPT, &lbufmag, &testIndex);
}

stly 发表于 2022-1-2 09:42

给的是什么信号做 FFT, 不会是白噪声?

llljh 发表于 2022-1-2 09:45


llljh 发表于 2022-1-2 09:49

用跳线直接从C11接到R14,然后采集AD值,然后FFT

jlyuan 发表于 2022-1-2 09:51

lbufin = (float)(adc_buf-2048);
是不是这里数据范围不对,要正负数的。。。

llljh 发表于 2022-1-2 09:53

for(ai=0;ai<NPT;ai++)
         {
            lbufin = (float)(((short int)adc_buf-2048)/32);
                  lbufin = (float)0;
         }

这里调整过来还是那样子

supernan 发表于 2022-1-2 09:56

如果你的ADC是12位的,按下面试一下。还有你要确定ADC采样数据达到的指定的NPT个数.
if(adc_buf > 2048)
    lbufin = (float)((int)adc_buf-2048);//实部
else
    lbufin = (float)(2048-(int)adc_buf);//实部
lbufin = (float)0;//虚部

llljh 发表于 2022-1-2 09:58


llljh 发表于 2022-1-2 10:01


llljh 发表于 2022-1-2 10:06

NPT = 64 长度符合要求
按照官方提供的例程的数据运行自己写的程序和按官方的例程运行结果是一样的。按照你所写的将运行结果在除以32,可以把幅值限定在一个小值(最后一张图)

jiahy 发表于 2022-1-2 10:08

是不是STM32F0的FFT结果本身就是这样呢?

huangchui 发表于 2022-1-2 10:11

是不是STM32F0的FFT结果本身就是这样呢?

llljh 发表于 2022-1-2 10:13


dingy 发表于 2022-1-2 10:14

你找个固定频率信号测试一下FFT的结果频率点在不在啊

llljh 发表于 2022-1-2 10:17

试一下吧

llljh 发表于 2022-1-2 10:19

用固定点试了一下,需要除以32才是对的。应该是采集电路噪音有干扰。结案,谢谢!!

chuxh 发表于 2022-1-2 10:21

上面写错了,没有正负值了,不能那样写。还有除以32是哪来的,应该是不用除的。。。

lbufin = adc_buf;//实部
bufin-= 2048.0;
lbufin = 0.0;//虚部
页: [1] 2
查看完整版本: STM32F0 FFT