【瑞萨 RA6M4】快速傅里叶变换(FFT)测试(2)
【瑞萨 RA6M4】定时器实现SPWM(3)
【瑞萨 RA6M4】基于RS232 接口的 Modbus-RTU 从机实现 (4)
一、快速傅里叶变换
快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
例程以
y=16+10sin(100πt)+4sin(300πt)+6sin(700πt)
为测试序列,采样率为6400Hz,基波频率为工频50Hz,采样点数为128点,直流分量为16,基波分量为10,3次谐波分量为4,7次谐波分量为6,通过FFT输出各次谐波幅值并与序列谐波幅值对比。
快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
例程以
y=16+10sin(100πt)+4sin(300πt)+6sin(700πt)
为测试序列,采样率为6400Hz,基波频率为工频50Hz,采样点数为128点,直流分量为16,基波分量为10,3次谐波分量为4,7次谐波分量为6,通过FFT输出各次谐波幅值并与序列谐波幅值对比。
二、CMSIS-DSP
CMSIS-DSP库是Arm针对各种Arm Cortex-M处理器(例如Cortex-M4,Cortex-M7,Cortex-M33,Cortex-M35和Cortex-M55处理器)优化的丰富的DSP函数的集合。Arm Developer网站包含有关这些处理器的更多信息和支持资源。
CMSIS-DSP在行业中得到了广泛使用,并能够通过各种第三方工具优化C代码生成。
例程所使用的是DSP开发包中的TransformFunctions实数快速傅里叶变换。
测试程序:
串口输出值,包括直流分量到63次谐波幅值如图6所示:
图6 RA6M4单片机FFT输出结果
为了方便直观的查看数据,将单片机FFT变换结果通过串口输出,导入到MATLAB中进行绘图,并将结果与MTALAB变换结果进行对比,得到如下图7结果,可以看到标准的正弦波叠加直流分量后,值均大于0;标准的正弦波叠加3次和7次谐波后,波形发生畸变;对比RA6M4变换结果和MATLAB变换结果,对应频率处幅值一样,证明RA6M4的FFT结果正确。
需要特别注意的是:基于ARM CMSIS DSP FFT处理后,得到的各个频率幅值并不是原信号在该频率处的真实幅值,若要恢复原始信号的幅值,直流分量需要对应除以FFT长度,而其他频率则除以FFT长度的一半。如测试程序一样,FFT长度为128,则直流幅值除以128,其他频率幅值除以64.