CMSIS FIR抽取器系数配置异常导致输出结果错误问题咨询
系数逻辑是否正确
如果你的需求是无抗混叠滤波、仅做间隔取点的简单抽取,核心逻辑是成立的,但存在两个前提:
- 你的ADC输入信号本身没有超过1000Hz(抽取后采样率的1/2)的频率分量,否则会出现混叠失真
- 你当前的系数反转配置和取点预期是不匹配的:你预期取每4个点的第1个,那时间反转后的存储系数应该是
{1,0,0,0},而不是你现在用的{0,0,0,1},后者会取每4个点的最后1个,如果你对输入样本的时序对齐要求高,这个也会导致结果不符合预期。
输出错误的常见配置问题
你出现异常输出大概率是以下几个配置疏漏导致的:
- 未初始化状态缓存:CMSIS FIR类函数要求提前申请足够长度的状态数组,且在调用处理函数前调用对应的初始化函数(如
arm_fir_decimate_init_f32)完成状态清零。如果没有初始化,状态数组残留的随机值会直接导致输出异常。状态数组的最小长度要求为滤波器系数长度 + 单次输入样本数 - 1,按你的配置需要至少35个对应精度的元素空间。 - 初始化参数不匹配:检查初始化函数传入的参数是否完全符合你的配置:
- 抽取因子是否设为4
- 滤波器系数长度是否设为4
- 系数指针、状态缓存指针是否指向正确的内存地址
- 输入样本不连续:确认你每次传入处理的32个ADC样本是连续采集的,没有丢点、错位的情况。
参考学习资料
- CMSIS DSP库官方模块说明文档
- 《多速率数字信号处理》(Crochiere, R.E. 著)
- DSPGuru 多速率信号处理FAQ
内容的提问来源于stack exchange,提问作者Android_dev
相关产品推荐
相关产品推荐

