【问题标题】:why use q15 over standard int16 for embedded为什么使用 q15 而不是标准 int16 进行嵌入式
【发布时间】:2018-01-26 19:34:48
【问题描述】:

我正在查看 ARM CMSIS DSP 库,想知道在 q15 1to-1 范围内运行与保持在标准 int16 范围 32kto-32k 范围内运行相比,在速度方面是否有优势。

【问题讨论】:

  • Q15 是表示实数的定点格式。 int16_t 是整数格式。所以你有点把苹果比作橘子……
  • @EugeneSh.: int16_t 是表示实数的定点格式。
  • @EricPostpischil 好的,好的,我明白了...
  • @EricPostpischil by "real numbers" Eugene 指的是 Reals。 int16_t 不能表示实数(整数除外)。
  • @rlbond,Eugene 和 Eric 都非常了解这一点。关键是这两种数据格式的不同之处仅在于对相同数据表示的解释——就像它们的单位一样。是的,Q15 可以表示一些非整数有理数,但它只能表示三个整数,并且根本没有绝对值大于 1 的数字。它并没有特别好(或坏)声称是“实数”数字格式比int16_t 不。

标签: c embedded signal-processing


【解决方案1】:

1 * 1 = 1。

32k * 32k > 32k。

Q15 乘法的结果保证适合 Q15。这使得它在数字数组必须快速相乘和求和的 DSP 中非常方便。

【讨论】:

    【解决方案2】:

    你问,

    我正在查看 ARM CMSIS DSP 库,想知道是否有 在 q15 1 比 1 范围内运行与保持在 标准 int16 范围 32kto-32k。

    由于 CMSIS DSP 似乎不提供仅在处理 Q15 数据或 int16_t 数据方面不同的函数变体,因此我带您询问为什么 API 是这样设计的,特别是关于处理速度是否是一个因素。

    当然,处理速度是提供对定点数据和对浮点数据进行操作的变体的一个因素,但没有理由认为使用Q15 数据的计算会比计算更快int16_t 数据。我倾向于认为Q15 的优势在于 -1 ... 1 感知范围简化了缩放逻辑。此外,-1 ... 1 或其正半数是许多重要函数的自然范围,例如正弦、余弦和高斯。

    【讨论】:

      【解决方案3】:

      抱歉,介绍很蹩脚,但您的答案取决于数据。如果您使用的是标准化数据(从 [-1.0,1.0] 开始),请务必坚持使用 q15 库。在后台,q15xq15 和 int16xint16 都将执行 16 位乘以 16 的乘法运算,得到 32 位的值。 如果您使用缩放整数(q15),则结果将位于 32 位结果的高 16 位中。如果您正在处理整数并且生成的容器只有 16 位,则您必须担心检测溢出。 如果您进行并排测试,我希望库性能会相似,主要关注的是溢出检测。
      如果这是用于矢量或信号处理操作并且您不能使用 32 位值,请使用固定点(q15)。我参与过一些项目,人们尝试使用 16 位整数实现 Q15,但他们不断引入意外的数学错误。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多