xxcwfkxg 发表于 2026-6-14 10:01:12

FFT、IFFT、RFFT、IRFFT通用库函数,提供FP32、Q31、Q15、Q10等四种精度

线性变换库 - 傅里叶变换、逆傅里叶变换、实傅里叶变换、逆实傅里叶变换



FP32 - 单精度浮点(float32),支持 0-1024点
Q31 - 高精度整型(int32),支持0-1024点
Q15 - 中精度整型(int16),支持0-256点
Q10 - 低精度整型(int16),支持0-256点

   (点数必须为2的幂次方)


精度计算指标:详见accuracy.csv
MSE - Mean Squared Error - 低于(e-4)
SNR - 信噪比 - 高于(60dB)


运算时间指标:详见timing.csv
该指标本人计算详细,以下只列出256点FFT(傅里叶变换)最快的
1)FP32(40M主频,108M供TFPU频率):15970us
2)Q31(40M主频 + MDU32):48780us
3)Q15(40M主频 + MDU32):11890us
4)Q10(40M主频 + MDU32):9180us
!!不得不吐槽,Q31慢主要是它计算需要int32*int32,然后C语言没有64位整型,需要用汇编优化,太难搞了!!
!!可以发现这个没有比梁工256点快,主要是为了通用即在 0~1024 | 0~256 点都可以算,那个只能算256,精度还感人!!


验证方法:
FP32、Q31都是用已知1024的数组计算出来和scipy内置的比较;
Q15、Q10都是用已知256的数组计算出来和scipy内置的比较;
其余点数没测过,大家可以试一试,有问题我可以改进,我一个人测太烦了;


使用说明:
阅读keil内的readme,大家可以用AI来阅读和操作;
整体步骤:初始化 -> 运算;
整型部分还有convert.h文件中的,浮点转整型与整型转浮点;
大家使用的时候,无需关心.c文件如何实现,看.h中函数用法就行;

算法说明:
有三个技术文档大家可以参考








狂热主宰 发表于 2026-6-14 11:03:17

实现优化快速傅里叶变换
需求场景还是多的

梁工 发表于 2026-6-14 17:40:28

我的FFT-256点的精度是对应12位的ADC的,为了快速,做了优化,计算时间大约4ms@80MHz。
我通常用FFT-256评估单片机算力。或者用8阶以上的数字滤波器来评估算力。
页: [1]
查看完整版本: FFT、IFFT、RFFT、IRFFT通用库函数,提供FP32、Q31、Q15、Q10等四种精度