在我的mbed LPC1768上,在一个pin上有一个ADC,当polled返回一个标准化为0-1之间的浮点值的16位短数字。Document here.
因为它把它转换成一个浮点数,这意味着它有32位吗?因为我有一个到小数点后六位的数字。Data Types here
我正在运行自相关,我想减少完成分析所需的时间。
浮点数的长度是32位,如果是,那么将两个32位浮点数相乘要比将两个16位短值(非部分)数相乘要长得多,这是正确的吗?
我正在和C一起编程mbed。
干杯。
最佳答案
我应该能够相当准确地评论这件事。我曾经做过数字信号处理器的处理工作,在那里我们会“积分”代码,这实际上意味着我们会采取一个信号/音频/视频算法,并取代所有的浮点逻辑与定点算法(即:Q_mn notation, etc)。
在大多数现代系统中,与浮点运算相比,使用整数运算通常会获得更好的性能,但代价是必须编写更复杂的代码。
您使用的芯片(Cortex M3)没有a dedicated hardware-based FPU:它只模拟浮点运算,因此浮点运算将非常昂贵(需要很多时间)。
在您的例子中,您可以通过read_u16()
读取16位值,并将该值右移4次,就完成了。如果您使用的是音频数据,您可以考虑looking into companding algorithms (a-law, u-law),这将提供更好的主观性能,而不是简单地切断4LSBs以从16位数字中获取12位数字。
Yes, a float on that system is 32bit,并且可能在IEEE754 format中表示。将一对32位值与一对16位值相乘很可能需要相同的时间,这取决于正在使用的芯片以及FPU和ALU的存在。在你的芯片上,乘两个浮点数在时间上会非常昂贵。另外,如果您将两个32位整数相乘,它们可能会溢出,因此如果您不想实现定点算法,那么使用浮点逻辑有一个潜在的原因。