STM32F4 DSP库学习笔记5-复数FFT的实现方法STM32F4 DSP库学习笔记5-复数FFT的实现方法
我们会用了ST官方的汇编FFT库,那些库函数在没有带FPU浮点运算的32芯片上也可以用的不错。然后今天我们就用一下F4的DSP库。在该目录下包含了图中所示的源文件
复数FFT函数支持三种数据类型,分别是浮点,Q31和Q15,待会就拿浮点数来做例子。
先介绍下函数:
void arm_cfft_f32(
const arm_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bi...
STM32F4 DSP库学习笔记5-复数FFT的实现方法
我们会用了ST官方的汇编FFT库,那些库函数在没有带FPU浮点运算的32芯片上也可以用的不错。然后今天我们就用一下F4的DSP库。在该目录下包含了图中所示的源文件
复数FFT函数支持三种数据类型,分别是浮点,Q31和Q15,待会就拿浮点数来做例子。
先介绍下函数:
void arm_cfft_f32(
const arm_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
arm_cfft_instance_f32 * S是一个结构体指针这个结构体包含FFT运算的旋转因子和位反转表,就相当于一个常量,我们不用去管它。
float32_t * p1,是输入复数数组的地址,长度应该是运算点数的两倍,注意的是输入和输出共用一块缓存
uint8_t ifftFlag,是运算的正反标志ifftFlag=1是反变换。ifftFlag=0是正变换
uint8_t bitReverseFlag,是flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit
好,然后就只要这一句话就可以计算复数的FFT正变换
arm_cfft_f32(&arm_cfft_sR_f32_len1024,testInput,0, 1);
计算出结果后,用下面语句就可以求出幅值了;
arm_cmplx_mag_f32(testInput, testOutput, 1024);
关于arm_cmplx_mag_f32(testInput, testOutput, 1024),它的原型是:
void arm_cmplx_mag_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t numSamples);
这个函数是求复数的模值
float32_t * pSrc,是输入数组地址
float32_t * pDst,是输出数组地址
uint32_t numSamples是运算点数
当然上面语句中testInput数组的长度是testOutput数组的两倍。因为testInput输入的是复数。
可以用下面的for语句把数据赋值给testInput[2048]
for(i=0; i<1024; i++)
{
testInput[i*2+1] = 0;
testInput[i*2] = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;
}实部为正弦函数数据,虚部为0;
在串口上打印出结果。
导入到MATLAB中,把数组重命名成data
运行下面语句
>> fs=1000;
>> N=1024;
>> n=0:1:N-1;
>> f=fs*n/N;
>> plot(f,data)
显示如下:【STM32F4运算结果】
可见复数FFT效果非常不粗。
下面再用MATLAB模拟一下。
运行如下程序:
>> fs=1000;
>> N=1024;
>> n=0:1:N-1;
>> f=fs*n/N;
>> t=0:1/fs:1-1/fs;
>> x=1.2*sin(2*pi*100*t)+1;
>> y=fft(x,1024);
>> plot(f,abs(y))
【MATLAB运算结果】
可见stm32f4的复数fft运算结果也是正确的,但是我现在也发现了一个问题就是fft变换后第一个模值会很大。
本文档为【STM32F4 DSP库学习笔记5-复数FFT的实现方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。