STM32F405的FFT,衰减很严重,怎么解决?

2019-07-21 02:37发布

用STM32F405的DSP库做64点FFT,衰减很大, 是我用错了么,有用过的老师么,指导一下。
另这个信号怎么用F4的FFT,插值的话,误差很大。

#define Fs 14400.0f
#define PI2 PI*2.0f

for(i=0;i<288;i++)
     adcfft=1000.0f+100.0f*arm_sin_f32(PI2*i*50.0f/Fs)+ 10.0f * arm_cos_f32(PI2*i*100.0f/Fs) + 1.0f*arm_sin_f32(PI2*i*150.0f/Fs);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
liujinyi016
1楼-- · 2019-07-21 23:11
一、程序
    #define FFS 3200.0f
    for(i=0;i<128;i++)
        adcfft=1000.0f+100.0f*arm_sin_f32(PI2*i*50.0f/FFS)+ 10.0f * arm_cos_f32(PI2*i*100.0f/FFS) + 1.0f*arm_sin_f32(PI2*i*150.0f/FFS);
    __NOP();

    __nop();

      status = ARM_MATH_SUCCESS;
      status = arm_cfft_radix4_init_f32(&S,64,ifftFlag, doBitReverse);
      arm_cfft_radix4_f32(&S,adcfft);
    __nop();
      arm_cmplx_mag_f32(adcfft,testOutput,64);
    __nop();
二、用128点做64FFT结果



三,用128点做64FFT幅值
直流分量: 90509.67/1.414/64=1000.15 
基波分量:4297.978/1.414/32=94.980   ........


liujinyi016
2楼-- · 2019-07-22 01:45
四,64点做64点FFT,结果看上去很乱

lsj9383
3楼-- · 2019-07-22 02:34
 精彩回答 2  元偷偷看……
tangqilin
4楼-- · 2019-07-22 05:14
有可能是这样  m4的fft库因为用的是基4,只能做16 64 256 1048点的fft,如果你用的是arm_cfft_radix4_f32复数求的话,要把16点或者64点或者256点或1024点 扩展两倍 就是32点 128点 256点 2048点的数组作为输入,偶数项是你的采样值,奇数项填0。你128点做的了,64点混乱,我觉得是128点的时候按照64点去做fft了。
涛涛
5楼-- · 2019-07-22 07:29
我现在用fft 通过stm32 F103 AD 采集出来了,送到FFT运算,输入分别是 市电三相 电压和三相电流,经过FFT 计算出各相的 电压 电流,基波 和各次谐波。实部 和虚部,。怎么计算电压,电流 的 有功功率 和无功功率 ,和功率因数怎么算啊。能给个例程吗
zzj
6楼-- · 2019-07-22 09:41
 精彩回答 2  元偷偷看……

一周热门 更多>