本帖最后由 KC_CEC 于 2013-11-6 13:19 编辑
问题1、
描述:
通过分析arm_cmplx_mag_f32()这个函数可以看出,fft采样点数不一定是必须2的整数次方。那么现在我只需要采样250个点就能满足我的要求。
所以我定义一个输入缓存区f32_fftInBuffer[250],再定义一个输出缓存区f32_fftOutBuffer[250];整个过程是通过ADC采样将250点的电压给输入缓存区,然
后经过fft变化后提取里面的实数,经过2*R/N可以计算出对应频率点的幅度了。代码流程如下:
uint32_t fftSize=250;
for(i=0;i<250;i++)
{
f32_fftInBuffer=(float)ADC1Conver_Buffer*3.3f/4096;//电压进缓存
}
//cfft单元初始化
status = arm_cfft_radix4_init_f32(&S,fftSize,ifftFlag, doBitReverse);
//fft运算
arm_cfft_radix4_f32(&S, f32_fftInBuffer);
//提取实数
arm_cmplx_mag_f32(f32_fftInBuffer, f32_fftOutBuffer,fftSize);
for(i=0;i<250;i++,m++)
{
printf("lev==%f ,",f32_fftOutBuffer);//打印实数
if(i%5==0)printf("\r\n");
}
故障:单片机会卡死在fft运算函数出不来
问题2:
描述:
后来我将fft采样点改为256个点,改定义一个输入缓存区f32_fftInBuffer[256],再定义一个输出缓存区f32_fftOutBuffer[256];fftSize=256;这个时候是可
以正常运行,但是出来的数据就不正常了。我用串口打印了两次fft转换结果:
第一次转换结果:
根据第一个点计算:339.581696/256=1.326491V,与实际直流电压偏置接近
第二次转换结果:
大得吓死人!
|