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

dsPIC33EP128GP502运行FFT检测输入主频始终输出0问题求助

问题排查点(按出现概率从高到低排序)

  • 未跳过直流分量所在的0号FFT bin
    你当前调用VectorMax时直接从下标0开始搜索最大值,0号bin对应直流分量,只要输入信号存在直流偏移(单端ADC输入场景下几乎必然存在),直流分量的幅值会远大于交流信号幅值,peakFrequencyBin永远返回0,最终计算得到的peakFrequency自然始终为0。
    修正方法:将VectorMax的搜索起始地址改为&sigCmpx[1].real,搜索长度改为FFT_BLOCK_LENGTH/2 - 1,频率计算时记得将返回的peakFrequencyBin加1再乘以频率分辨率。
  • FFT定点运算缩放导致交流分量幅值被淹没
    dsPIC的DSP库FFTComplexIP为了防止定点溢出,每级蝶形运算会自动右移1位做缩放,10级FFT(2^10)会整体缩放1/1024。如果你的输入交流信号幅值较小,经过缩放+平方运算后,交流bin的幅值可能低于识别阈值,或者仍然远小于直流bin。
    修正方法:输入信号增加前级运放放大幅值,或者在平方运算后对幅值做左移补偿缩放比例(注意防止溢出)。
  • ADC采样数据未隔直
    你当前直接将ADC采样值送入FFT,没有做直流分量消除处理。可以在采样后对所有采样点求平均值,再将每个采样点减去平均值,消除直流偏移后再做FFT运算。
  • ADC输入信号电平不匹配
    你配置ADC输出为有符号小数,说明你使用的是差分输入模式或者单端输入加直流偏置。如果你输入的单音信号是双极性的,没有做电平抬升适配单端ADC的输入范围,会导致负半周被削波,有效交流分量幅值极低,无法被识别。
  • 旋转因子初始化参数错误
    检查TwidFactorInit第三个参数,dsPIC DSP库中该参数为0时生成正变换(FFT)所需的旋转因子,为1时生成逆变换(IFFT)所需的旋转因子,你当前配置为0是正确的,但如果你的DSP库版本不同可能定义相反,可以核对头文件中的函数说明。
  • 采样时序偏差
    你当前的采样逻辑是等待TMR1中断后再软件触发ADC转换,会引入中断响应延迟和软件触发的额外开销,实际采样率会低于预期的192042Hz,虽然不会导致输出始终为0,但会影响频率测量精度。建议修改为TMR1硬件直接触发ADC采样,不需要经过中断中转。

内容的提问来源于stack exchange,提问作者Henrik-Wo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:05