初级会员

- 积分
- 100
- 金钱
- 100
- 注册时间
- 2012-10-30
- 在线时间
- 11 小时
|

楼主 |
发表于 2014-5-1 14:07:58
|
显示全部楼层
回复【6楼】lsj9383:
---------------------------------
感谢!
一、在matlab上没有问题,我所说的是用F4的DSP库的基4FFT的时候有衰减。
我换了个DSP上的基2FFT的程序,做64点的运算也是没有问题,
ST的库不应该有问题的吧,还是在用的时候有一些设置,我没有做到。
我的F4的工程设置在Target-->C/C++中define STM32F4XX,USE_STDPERIPH_DRIVER,__FPU_PRESENT,__FPU_USED,ARM_MATH_CM4,__CC_ARM
Target-->Target中选上Use FPU
FFT部分程序:
uint32_t ifftFlag = 0;
uint32_t doBitReverse = 1;
arm_status status;
arm_cfft_radix4_instance_f32 S;
int i;
float Fs=3200.0f;
for(i=0;i<64;i++)//取128点做FFT时,结果是每隔一个取一个值,其他值约为0,取64点时,数比较乱,过后我把数据发上来。
adcfft=1000.0f+100.0f*arm_sin_f32(PI*2.0f*i*50.0f/Fs)+ 10.0f * arm_cos_f32(PI*2.0f*i*100.0f/Fs) +1.0f*arm_sin_f32(PI*2.0f*i*150.0f/Fs);
__NOP();
status = ARM_MATH_SUCCESS;
status = arm_cfft_radix4_init_f32(&S,256,ifftFlag, doBitReverse);
arm_cfft_radix4_f32(&S,adcfft);
arm_cmplx_mag_f32(adcfft,testOutput,64);//复数求幅值
二、288点的无论是补0还是去几个点,在用F4的FFT时数据都比较乱,除了直流分量正确,高次的都不对,我再用DSP的程序试下。
三,感觉F4的库不该有问题,但又找不到哪里错了。 |
|