[信息]

【实战经验】STM32F30x 的ADC 采样的傅立叶变换

[复制链接]
3773|8
手机看帖
扫描二维码
随时随地手机跟帖
香水城|  楼主 | 2015-11-13 16:40 | 显示全部楼层 |阅读模式
本帖最后由 香水城 于 2017-8-16 14:58 编辑

STM32F30x 的ADC 采样的傅立叶变换

前言
本文目的是演示如何使用STM32F30x 内部的DSP 进行浮点快速傅立叶变换(FFT),为联系实际应用,使用ADC 对波形发
生器进行ADC 采样,然后对ADC 采样结果进行FFT, 与 Matlab 仿真结果进行比较察看最终结果的准确性。会使用到ARM
的DSP 库文件,以及STM32F30x 的浮点运算单元以及DSP 指令等。

模拟ADC采样数据实现FFT

使用Matlab生成AM调制波形

波形公式为:AM_50 = sin(2 )*(1+50%*sin(2 )), 其中fc 为载波频率,fm 为调制波频率,调制比50%。
为了使用ADC 采样,将波形进行偏移处理,叠加1.5V 电压,最终波形展开公式如下:
1.PNG

产生波形如下:

2.PNG

生成模拟ADC数据,使用STM32F30x进行FFT运算
生成数据存于AM_50_ADC_Data[]数组中,实数转换为复数,进行CFFT 的运算,调用arm_cfft_f32 库函数,1024 点FFT。
3.PNG
结果打印并且和Matlab计算结果进行比较
为方便显示只取整数部分比较:上图为Matlab 输出,下图为经过STM32F30x 计算后的结果

4.PNG

模拟数据进行快速傅立叶结论
从数据上看Matlab 仿真以及STM32F30x 的FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论
上直流分量,频率fc 处,以及频率fc-fm,fc+fm 处都会有波峰出现,实际看FFT 波形如下:

5.PNG

实际ADC采样并进行FFT操作
使用波形发生器产生50% 调幅波,载波10KHz,调制波1KHz,调制比50%,偏移1.5V

6.PNG
使用STM32F30x 进行ADC 采样,采样结果存于数组,数据导入到Matlab 显示波形如下:

7.PNG
根据ADC 采样数据进行FFT 变换,分析结果如下面所示:

8.PNG

结论:
由STM32F30x 的ADC 采样的波形可以完整进行快速傅立叶变换,变化结果符合理论变化预期。并且
利用STM32F30x 的FPU 以及DSP 模块方便快速进行变化,给实际应用带来很大便利性。

对应PDF与程序:STM32F30x 的ADC 采样的傅立叶变换
更多实战经验请看:【ST MCU实战经验汇总贴】


wxhwdh| | 2015-11-13 19:12 | 显示全部楼层
支持!!!!!!!!!!!!

使用特权

评论回复
foxglove| | 2015-11-13 20:15 | 显示全部楼层
STM32F30x的ADC采样的傅立叶变换.zip

使用特权

评论回复
airwill| | 2015-11-13 20:52 | 显示全部楼层
FFT 变换也是个复杂和高强度计算性能要求的算法. 通常都是浮点运算.
借助 arm_cfft_f32 库函数, 看来性能不错呀, 啥时候我也来测试一下性能

使用特权

评论回复
739141300| | 2015-11-14 10:52 | 显示全部楼层
精度如何

使用特权

评论回复
hwl1023| | 2015-11-14 16:56 | 显示全部楼层
好东西,感谢分享!

使用特权

评论回复
huangxz| | 2016-8-11 15:32 | 显示全部楼层
1024点FFT,速度有多快?采样完成到计算结果输出用多长时间?

使用特权

评论回复
wangguanfu| | 2016-8-15 08:30 | 显示全部楼层
这个有点意思

使用特权

评论回复
jasonnuc| | 2017-11-24 09:53 | 显示全部楼层
非常感谢、、因为采用ADC+DMA采样,每次回来有ADC转换为0的情况,且每一次循环,幅度都跳动很大,不知道什么原因。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17048

帖子

283

粉丝