我想了解对于精度很重要的 DSP 应用,使用定点 Q31 是否优于浮点(单精度)。更多细节,我目前正在使用 ARM Cortex-M7 微控制器,我需要使用 CMSIS 库以高精度执行 FFT。我知道 SP 有 24 位尾数,而 Q31 有 31 位,因此,Q31 的精度应该更好,但我到处读到,对于需要乘法等的算法,浮点表示应该是用过,不明白为什么。
提前致谢。
我想了解对于精度很重要的 DSP 应用,使用定点 Q31 是否优于浮点(单精度)。更多细节,我目前正在使用 ARM Cortex-M7 微控制器,我需要使用 CMSIS 库以高精度执行 FFT。我知道 SP 有 24 位尾数,而 Q31 有 31 位,因此,Q31 的精度应该更好,但我到处读到,对于需要乘法等的算法,浮点表示应该是用过,不明白为什么。
提前致谢。
从固定点获得最大值(即额外的 6 或 7 位尾数精度),以及避免大量可能的下溢和溢出问题,需要准确了解 CMSIS 算法中每个算术运算的边界(最小值和最大值)对于每组有效的输入数据。
在实践中,一个完整的错误分析被证明是困难的,并且需要将所有中间值重新调整到最佳范围所需的附加操作会大大降低性能,以至于只有更窄的一组案例似乎值得努力,而不是使用 IEEE 信号或double,M7 在硬件中支持,浮点指数范围隐藏了大量(但不是全部!!)中间结果数值缩放问题。
但是对于一些更简单的 DSP 算法,有时分析和修复缩放不是问题。如果不分解所需算法中每个算术运算的数值范围,很难分辨出哪个。有时需要完成使用整数运算所需的工作,因为可用的处理器不能很好地或根本不支持浮点运算。