我正在使用CMSIS DSP FFT功能将已知信号从时域转换到频域。所讨论的信号是1KHz的峰 - 峰幅度为1V的正弦波,其DC偏移为1.25V。我用16位ADC对10 KHz的输入信号进行采样,然后在浮点上对Cortex M4F MCU进行处理。
当我运行1024点FFT时,DC值在Bin-0处出现为~1.24。当我为2048点FFT运行相同的信号时,DC值约为2.5。所以我运行了512点FFT,值变为一半或~0.62。为了仔细检查我的信号,我在Matlab中做了同样的事情,无论我使用什么FFT点,Matlab都将Bin-0或DC显示为~1.25。
似乎来自ARM的CMSIS DSP库以某种方式执行了缩放功能,我在代码执行中检查了它,无处可见。欢迎任何调试的想法。
答案 0 :(得分:0)
看起来你的输出没有缩放。这很可能是出于性能原因而完成的,因为并非所有使用傅立叶变换都需要缩放输出,而CMSIS代码预计将在有限功率的嵌入式设备上执行。
CMSIS库中Fast Real FFT实现(User
函数)之前的注释证实了这一点:
正向和反向实数FFT函数应用标准FFT 缩放;在正向变换和1 / fftLen缩放上没有缩放 逆变换。
要解决此问题,请手动应用缩放系数。