You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32中CMSIS DSP库与MATLAB的FFT计算结果不一致求助

STM32 CMSIS DSP与MATLAB FFT结果差异排查

以下是针对两者结果差异的核心排查方向:

  • 零填充与输入一致性验证
    STM32代码中通过arm_fill_f32对tempBuff_1从FrameLen位置补零至256长度,需确认:

    • 原始输入信号是否完整存入tempBuff_1的前FrameLen个元素,无截断、偏移或采样值误差;
    • MATLAB的Input变量与STM32的输入信号完全一致,包括采样点数值、顺序和长度。
  • 复数格式转换正确性检查
    PreFFTProcess负责将实信号转为CMSIS DSP要求的实部、虚部交错存储格式,需重点验证:

    • 转换后tempBuff_2中所有虚部值是否均初始为0(原始信号为实信号,FFT输入虚部必须全0);
    • 转换后的数组长度是否符合要求:256点FFT需要存储256个复数,对应数组长度为2*256=512个float元素,若长度不足或转换逻辑错误(如仅处理前FrameLen个点的虚部),会直接导致FFT结果偏差。
  • FFT配置与归一化差异

    • 确认fftInstance已通过arm_cfft_init_f32(&fftInstance, 256)正确初始化,FFT长度设为256;
    • CMSIS的arm_cfft_f32与MATLAB的fft默认均不做归一化,但需注意实信号FFT的对称性:MATLAB的abs(fft(...))结果中,除直流和Nyquist分量外,其余分量幅值对应实际幅值的2倍(因共轭对称),而arm_cmplx_mag_f32计算的是每个复数的模,需对比两者的幅值缩放比例是否一致。
  • 数据精度与量化误差

    • 检查STM32端ADC采样信号转float32的过程是否存在溢出或精度损失;
    • 对比STM32与MATLAB的输入信号浮点值,确认无因数据类型转换导致的偏差。

结果对比图

MATLAB vs STM32 FFT Result1
MATLAB vs STM32 FFT Result2

内容的提问来源于stack exchange,提问作者user19402326

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:30:33