打印
[STM32F4]

用stm32的DSP库做FFT,FFT后数据很大,给2V的幅值,最大有700多

[复制链接]
2683|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include "sys.h"
#include "arm_math.h"
#include "fft.h"


#define FFT_LENGTH                1024                 //FFT长度,默认是1024点FFT
float F=21000000/1024;
extern volatile uint16_t ADC1OscConver[1024];
float fft_inputbuf[FFT_LENGTH*2];        //FFT输入数组
float fft_outputbuf[FFT_LENGTH];        //FFT输出数组
float fft_outputbuf1[FFT_LENGTH];
float fft_outputbuf2[FFT_LENGTH];
uint32_t  testIndex = 0;
float32_t maxValue=0;
float m;
void FFT()
{
        int i=0;
        arm_cfft_radix4_instance_f32 S;
        arm_cfft_radix4_init_f32(&S,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT相关参数       
        for(i=0;i<1024;i++)
        {
                fft_inputbuf[2*i]=(float32_t)ADC1OscConver[i]; //实部
                fft_inputbuf[2*i+1]=0;        //虚部全部为0
                printf("fft_inputbuf[%d]:%f\r\n",i,fft_inputbuf[i]*(3.3/4096));
        }
       
  arm_cfft_radix4_f32(&S,fft_inputbuf);        //FFT计算(基4)
       
        arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);        //把运算结果复数求模得幅值
       
        arm_max_f32(fft_outputbuf,FFT_LENGTH,&maxValue,&testIndex);
       
           for(i=0;i<FFT_LENGTH;i++)
                        {
                                fft_outputbuf1[i]=fft_outputbuf[i]*(3.3/4096);
                                printf("fft_outputbuf[%d]:%f\r\n",i,fft_outputbuf1[i]);
                        }
                        m=maxValue*(3.3/4096);
                        printf("maxValue=%f\n",m);
                        printf("F=%f",F);
                        for(i=0;i<FFT_LENGTH;i++)
                        {
                                fft_outputbuf2[i]=(i-1)*F;
                                printf("fft_outputbuf2[%d]:%f\r\n",i,fft_outputbuf2[i]);
                        }
}




沙发
拉风的小牛皮|  楼主 | 2016-6-12 13:35 | 只看该作者
快来人呀,
fft_outputbuf[947]:2.428611
fft_outputbuf[948]:2.043701
fft_outputbuf[949]:2.111265
fft_outputbuf[950]:1.930142
fft_outputbuf[951]:2.009454
fft_outputbuf[952]:2.338196
fft_outputbuf[953]:2.178393
fft_outputbuf[954]:2.758806
fft_outputbuf[955]:1.883081
fft_outputbuf[956]:2.331573
fft_outputbuf[957]:2.260111
fft_outputbuf[958]:2.095789
fft_outputbuf[959]:2.012986
fft_outputbuf[960]:1.711585
fft_outputbuf[961]:1.593048
fft_outputbuf[962]:1.653706
fft_outputbuf[963]:1.748014
fft_outputbuf[964]:2.302300
fft_outputbuf[965]:1.722369
fft_outputbuf[966]:2.308960
fft_outputbuf[967]:2.171081
fft_outputbuf[968]:2.626053
fft_outputbuf[969]:2.358039
fft_outputbuf[970]:2.883570
fft_outputbuf[971]:2.914807
fft_outputbuf[972]:3.249004
fft_outputbuf[973]:2.752295
fft_outputbuf[974]:2.836629
fft_outputbuf[975]:2.930904
fft_outputbuf[976]:2.935601
fft_outputbuf[977]:2.931055
fft_outputbuf[978]:2.889981
fft_outputbuf[979]:3.245634
fft_outputbuf[980]:3.578965
fft_outputbuf[981]:3.199764
fft_outputbuf[982]:3.497734
fft_outputbuf[983]:3.541806
fft_outputbuf[984]:3.891565
fft_outputbuf[985]:3.864895
fft_outputbuf[986]:3.575801
fft_outputbuf[987]:3.334713
fft_outputbuf[988]:3.814780
fft_outputbuf[989]:4.451766
fft_outputbuf[990]:4.154812
fft_outputbuf[991]:4.065891
fft_outputbuf[992]:4.282477
fft_outputbuf[993]:4.139276
fft_outputbuf[994]:4.732401
fft_outputbuf[995]:5.087839
fft_outputbuf[996]:5.611954
fft_outputbuf[997]:5.977369
fft_outputbuf[998]:5.544620
fft_outputbuf[999]:5.867509
fft_outputbuf[1000]:6.022229
fft_outputbuf[1001]:6.567451
fft_outputbuf[1002]:7.014534
fft_outputbuf[1003]:7.009442
fft_outputbuf[1004]:7.918058
fft_outputbuf[1005]:9.182031
fft_outputbuf[1006]:8.689414
fft_outputbuf[1007]:9.116783
fft_outputbuf[1008]:9.313212
fft_outputbuf[1009]:10.408354
fft_outputbuf[1010]:11.661372
fft_outputbuf[1011]:11.228814
fft_outputbuf[1012]:12.905993
fft_outputbuf[1013]:15.175070
fft_outputbuf[1014]:14.529445
fft_outputbuf[1015]:20.094902
fft_outputbuf[1016]:20.407442
fft_outputbuf[1017]:27.387392
fft_outputbuf[1018]:27.427738
fft_outputbuf[1019]:30.025023
fft_outputbuf[1020]:34.550865
fft_outputbuf[1021]:49.631458
fft_outputbuf[1022]:61.703659
fft_outputbuf[1023]:101.352341
maxValue=911.585510  这是我串口打印的一部分数据,我给的是2V 的电压,ADC采样频率为21M,1024个点,为什么数据幅值会这么大

使用特权

评论回复
板凳
serialworld| | 2016-6-12 15:04 | 只看该作者
需要除以/1024

使用特权

评论回复
地板
稳稳の幸福| | 2016-6-12 22:35 | 只看该作者
DSP库没用过,听说是真强大

使用特权

评论回复
5
拉风的小牛皮|  楼主 | 2016-6-14 17:02 | 只看该作者

直流分量除以1024,交流凉是不是除以512

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:合肥杰发科技有限公司
简介:四维图新全资子公司 全球多地布局;专注于汽车电子芯片及相关系统的研发与设计 车规级芯片覆盖整车;客户遍及海内外 全球超过8000万辆车搭载杰发科技芯片。

1

主题

9

帖子

1

粉丝