打印
[牛人杂谈]

快速傅立叶变换

[复制链接]
882|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
数字处理上常用到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。  




使用特权

评论回复
地板
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);




使用特权

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


使用特权

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

本版积分规则

197

主题

3263

帖子

7

粉丝