为什么使用q15而不是标准int16进行嵌入式

时间:2018-01-26 19:34:48

标签: c embedded signal-processing

我正在研究ARM CMSIS DSP库,并想知道在q15 1to-1范围内运行是否比在标准int16范围32kto-32k中有明显优势。

3 个答案:

答案 0 :(得分:3)

1 * 1 = 1。

32k * 32k> 32K。

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

答案 1 :(得分:2)

你问,

  

我正在查看ARM CMSIS DSP库并想知道是否有   有利于在q15 1到1范围内操作而不是留在   标准的int16范围是32kto-32k。

由于CMSIS DSP似乎不提供仅在Q15数据或int16_t数据上运行的功能变体,我将带您了解API的设计原因。 ,尤其是处理速度是否是一个因素。

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

答案 2 :(得分:0)

对于蹩脚的介绍感到抱歉,但您的回答取决于数据。如果您使用的是规范化数据(跨越[-1.0,1.0]),请务必使用q15库。在引擎盖下,q15xq15和int16xint16都将执行16位乘16的乘法,从而产生32位值。 如果使用缩放整数(q15),结果将位于32位结果的高16位。如果您正在使用整数并且生成的容器只有16位,则必须担心检测溢出。 如果你进行并排测试,我希望库性能类似,主要关注的是溢出检测 如果这是用于矢量或信号处理操作而您无法使用32位值,请使用固定点(q15)。我参与了一些项目,人们尝试使用16位整数来实现Q15,并且他们不断引入意想不到的数学错误。