将32位数转换为16位或更少

时间:2016-04-16 13:08:55

标签: c optimization floating-point short mbed

在我的mbed LPC1768上,我在一个引脚上有一个ADC,当轮询时返回一个16位短数,归一化为0-1之间的浮点值。 Document here.

因为它将它转换为浮点数是否意味着它的32位?因为我的数字是一个小数到六位小数。 Data Types here

我正在运行Autocorrelation,我希望减少完成分析所需的时间。 浮点数是32位长也是正确的,如果是这样,那么将两个32位浮点数乘以两个16位短值(非解除数)的数字相比需要更长的时间吗? / p>

我正在与C合作对mbed进行编程。

干杯。

2 个答案:

答案 0 :(得分:2)

我应该能够非常准确地对此发表评论。我曾经做过DSP处理工作,我们会把它们整合在一起。#34; integerize"代码,这实际上意味着我们采用信号/音频/视频算法,并用定点算术替换所有浮点逻辑(即:Q_mn notation, etc)。

在大多数现代系统中,与浮点运算相比,使用整数运算通常会获得更好的性能,代价是您必须编写更复杂的代码。

您正在使用的芯片(Cortex M3)没有a dedicated hardware-based FPU:它只模拟浮点运算,因此浮点运算将会很昂贵(需要花费很多时间)。

在您的情况下,您可以通过read_u16()读取16位值,并将值右移4次,然后您就完成了。如果你正在使用音频数据,你可以考虑使用looking into companding algorithms (a-law, u-law),这样可以提供更好的主观性能而不是简单地切断4 LSBs从16位获得12位数字号。

Yes, a float on that system is 32bit,可能代表IEEE754 format。将一对32位值与一对16位值相乘可能需要相同的时间,具体取决于使用的芯片以及FPU和ALU的存在。在你的芯片上,乘以两个花车在时间上会非常昂贵。此外,如果将两个32位整数相乘,它们可能会溢出,因此如果您不想实现定点算法,则有一个潜在的理由可以使用浮点逻辑。

答案 1 :(得分:1)

如果处理器中不存在特殊硬件(浮点单元),则假设将两个32位浮点数相乘所需的时间超过两个16位短值则是正确的。