定点和 ARM CMSIS-DSP FIR 滤波器

信息处理 过滤器 固定点 手臂
2022-02-06 11:43:04

我使用 Q1.15 定点值来表示 12 位有符号整数值。我想知道如果我使用小数部分的 11 MSB 或 LSB 来表示我的 11 幅度位是否重要?我唯一能想到的是在某些情况下使用 LSB 可能会减少溢出错误的机会,并且可能允许我使用更大的定点 FIR 系数。

但我使用的是 ARM CMSIS-DSP FIR 滤波函数,据我了解,Q15 函数集需要 Q15 系数、Q15 状态变量、Q15 结果,当然还有 Q15 输入数据。所以在这种情况下,我将无法提高 Q15 滤波器系数的精度。

那么有什么区别吗?

1个回答

我认为这两种方法都不会提高您的精度,尽管每种方法都有好处。

使用 1.15 的低 11 位将为您提供 24dB 的额外动态余量(显然要小心正确扩展符号)。或者,使用高 11 位可能会降低 1.15 * 1.15 乘法后量化误差的功率(例如)。

该设计是动态余量和动态范围的折衷方案,因此最佳路线可能取决于系数的大小。

以下示例显示了额外的净空是如何有用的:

假设您有一个具有 2 个系数的 FIR 滤波器(1.15 小数二进制),它们都是 0.8(出于某种原因)。如果连续两个样本的输入为 0.9,则输出为 (0.8 * 0.9) + (0.8 * 0.9) = 1.44。该值会导致溢出或硬削波,因为它不适合 1.15(小数)。为避免这种情况,您可以首先将输入向下移动 1 位,给自己 6dB 的动态余量。这会将总和更改为 (0.4 * 0.9) + (0.4 * 0.9) = 0.72,现在可以安全地放入 1.15 容器中。

在您使用所有 16 位的正常系统中,您将不得不担心(或只是记住!)您的信号幅度减半的事实。在您的情况下,您无需担心这一点,因为您的满量程信号开始时只有 12 位。