1

我正在使用 CMSIS DSP FFT 函数将已知信号从时域转换为频域。有问题的信号是 1 KHz 正弦波,峰峰值幅度为 1V,直流偏移为 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 库以某种方式执行了缩放功能,我在代码执行中进行了检查,但无处可见/执行。欢迎任何调试想法。

4

1 回答 1

1

看起来您的输出没有被缩放。这很可能是出于性能原因,因为并非所有傅里叶变换的使用都需要缩放输出,并且预计 CMSIS 代码将在功率有限的嵌入式设备上执行。

CMSIS 库中Fast Real FFT实现(函数)之前的注释证实了这一点:arm_rfft_fast_f32()

正向和反向实数 FFT 函数应用标准 FFT 缩放;正向变换不缩放,逆变换不缩放 1/fftLen。

要解决此问题,请手动应用缩放系数。

于 2018-03-10T11:47:39.610 回答