[牛人杂谈] 快速傅立叶变换

[复制链接]
1122|4
 楼主| zhuotuzi 发表于 2017-5-27 21:57 | 显示全部楼层 |阅读模式
数字处理上常用到FFT。
其实新唐的M451内置的DSP核心就是支持这种特殊运算的。
快速傅立叶变换(FFT, or Fast Fourier Transform)
人是活在时间的世界,所以一般我们在看事情的现象,多是在时间域(Time Domain)来观察。然
而有许多现象在时间域是观察不到的,必须透过特定的转换方法,才得以观察出有意义的数
据。数学家傅立叶推导出一个变换公式,将原本属于时间域的数据转换成频域
(Frequency
Domain),此一变换对于信号的观察与改良提供了极大的帮助。 信号在经过FFT转换后,我们可
以明显看出此信号的主要频率位置,以及与其他频率强度的相对关系。
快速傅立叶变换可以将时域中的信号分解成频域,如下图
3-6为一类方波f,其为许多弦波组合
而成,弦波组成其成分为图
3-7,再经傅立叶变换后可以得到组成这一类方波所有弦波的频率以
及强度如图
3-8,因此一个信号经过快速傅立叶变换后,可以很明显地了解其组成成分,并且根
据结果来做信号处理,如滤波等。
  

 楼主| zhuotuzi 发表于 2017-5-27 21:59 | 显示全部楼层
 楼主| zhuotuzi 发表于 2017-5-27 22:01 | 显示全部楼层
Cortex®-M4 DSP函数库有提供计算FFT功能,用户输入数据即可得到最大主频强度以及位置。在此提供范例程序给用户参考,所使用到方程式定义方式如下表3-40~表3-43。   QQ截图20170527215752.png
QQ截图20170527220043.png

QQ截图20170527220107.png
QQ截图20170527220119.png
 楼主| zhuotuzi 发表于 2017-5-27 22:36 | 显示全部楼层
新唐提供范例程序供用户参考

/* 宣告FFT结构变量 */
arm_cfft_radix4_instance_f32 S;
float32_t maxValue;

/* 初始化设定FFT/IFFT */
arm_cfft_radix4_init_f32(&S, fftSize, ifftFlag, doBitReverse);
/* 执行FFT运算,将结果回传到原输入数组中 */
arm_cfft_radix4_f32(&S, testInput_f32_10khz);
/* 取各计算结果数值的绝对值来得其各个频率强度 */
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
/* 取最大值为主频位置及数值 */
arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);

QQ截图20170527223641.png


 楼主| zhuotuzi 发表于 2017-5-27 22:38 | 显示全部楼层
范例程序中,有一信号如图3-9,经过快速傅立叶传换后,取得各频率的复数值,再对复数值取绝对值,即可得到各频率强度分布如图3-10。因此杂乱信号经过傅立叶变换后即可看出其频率强度分布,并找出此输入信号为10k赫兹带有噪声的信号。  

QQ截图20170527223737.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

3375

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部