Arm CMSIS-DSP 库的使用与 DTMF 解调示例
1. FIR 滤波器代码与性能
在数字信号处理中,有一段代码用于实现 FIR 滤波器的部分功能:
coeff = *(pb++);
/* Read x[n-numTaps-7] sample */
x3 = *(px++);
tapCnt–;
}
/* Advance the state pointer to process the next
* group of 4 samples */
pState = pState + 4;
/* Store the 4 results in the destination buffer. */
*pDst++ = acc0;
*pDst++ = acc1;
*pDst++ = acc2;
*pDst++ = acc3;
blkCnt–;
}
}
根据编译工具链和编译器的优化设置,浮点 FIR 滤波器的内循环执行总共 16 次乘法累加(MAC)操作,可能需要大约 43 个周期。CMSIS - DSP 库在此基础上更进一步,计算八个中间和,从而在内循环中实现了进一步的性能提升。
CMSIS - DSP 库中的 q15 FIR 滤波器函数采用了与上述浮点函数示例类似的内存优化方法。此外,q15 函数还利用了 Cortex - M33 处理器的双 16 位单指令多数据(SIMD)功能。提供了两个 q15 函数:
- arm_fir_q15() :使用 64 位中间累加器以及 SMLALD 和 SMLALDX 指令。
- arm_fir_
超级会员免费看
订阅专栏 解锁全文
4838

被折叠的 条评论
为什么被折叠?



