当前位置:   article > 正文

STM32F103之FFT_stm32f103 fft

stm32f103 fft

网络上有很多关于FFT的资料,做一个总结。

1.STM32F103官方提供的FFT是一种基4的FFT,即能做的傅里叶点数必须是4的幂,也就是64,256,1024等,不支持128,512点的FFT;

从库的名字上就看的出支持的点数:cr4_fft_64_stm32,cr4_fft_256_stm32,cr4_fft_1024_stm32;

/* Radix-4 complex FFT for STM32, in assembly */

void cr4_fft_64_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);

void cr4_fft_256_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);

void cr4_fft_1024_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);

2.该库是一个16bit的定点FFT,根据手册说明,pssOUT和pssIN为32bit的整型数组,高16位是时域的实数,低16位的是时域的虚数,通常情况下,令虚数部分为0;

因此,ADC采样后的数据或者是其它的输入数据,需要做如下处理:

adc_value = (adc_value<<16);

adc_value = (adc_value<<16)&0xffff0000;

3.FFT的输出是一个复数,根据手册说明,高16位是频域的实数,低16位的是频域的虚数;计算每个频点的赋值如下:

for (i=0; i<FFT_SIZE/2;++i) {

real = pssOUT[i] >> 16;

img = pssOUT[i]&0xffff0000;

value[i] = sqrt(real *real +img*img); 

}

pssOUT是一组除了直流信号(pssOUT[0])关于内奎斯特频率(采样率的一半)点中心对称(共轭复数)的数据,因此上述计算只需要计算一半即可,为了计算精度,另外一半也可以参与计算。

假设采样率fs=16K,采样点256点,则频率分辨率为16000/256,即 0,62.5,125,187.5,250,......,8000, 7937.5,.......,250,187.5,125,62.5;其中62.5,125,187.5,250,......,8000,7937.5,.......,250,187.5,125,62.5关于8000中心对称;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/930547
推荐阅读
相关标签
  

闽ICP备14008679号