【发布时间】:2013-06-07 01:04:11
【问题描述】:
我有一个介于 -32768 和 32767 之间的 16 位样本。 为了节省空间,我想将其转换为 8 位样本,因此我将样本除以 256,然后加上 128。
-32768 / 256 = -128 + 128 = 0
32767 / 256 = 127.99 + 128 = 255.99
现在,0 将完全适合一个字节,但 255.99 必须向下舍入为 255,导致精度下降,因为在转换回来时,我将得到 32512 而不是 32767。
如何在不丢失原始最小值/最大值的情况下做到这一点?我知道我犯了一个非常明显的思想错误,但我不知道错误在哪里。
是的,当然,我完全知道除法会丢失精度,并且无法从 8 位样本中推断出原始值,但我只是想知道为什么我没有得到原始最大值。
【问题讨论】:
-
您没有回答自己的问题吗?当您需要 0..256 时,您必须向下舍入以适应 0..255 范围。如果您可以进行浮点运算,请除以 257,以便 0..255 捕获范围。
-
按定义下采样会降低精度。想象一下,您将照片缩小 8 倍。您不能指望通过将缩小的 1 放大 8 倍来恢复原始照片。你只能在好莱坞电影中做到这一点。
-
@paddy 我知道这一切,我只是觉得这很奇怪,我无法在原始最小值/最大值之间进行缩放。好像我在某个地方离了 1 点。
-
@Joshua 这完全正常,因为您丢失了有关原始值的信息。请参阅我的回答,了解如何实现您的要求,以及为什么这不一定是一件好事。
标签: math division short integer-division