如何计算从16位到8位的量化误差?

时间:2010-01-01 18:21:41

标签: c++ c math

有谁知道如何计算从16位到8位的量化误差?

我查看了关于Quantization的维基百科文章,但它没有解释这一点。

任何人都可以解释它是如何完成的吗?

很多爱, 路易丝

更新:我的功能看起来像这样。

unsigned char quantize(double d, double max) {
  return (unsigned char)((d / max) * 255.0);
}

4 个答案:

答案 0 :(得分:2)

我认为您需要将16位值和8位值都转换为它们各自所代表的模拟值,然后区分它们。为了坚持维基百科条目,这里有one来讨论它。

答案 1 :(得分:1)

通常,误差是重构的量化信号和原始信号之间的差异。

假设你的原始系列是Xi,你通过q整数除法进行量化 - 得到一系列整数值int(Xi / q)。您的错误项是e = Xi - q * int(Xi / q)。

例如:样本值60000除以256,在去量化后得到234. 234 * 256 = 59904。量化误差为60000-59904 = 96。

答案 2 :(得分:1)

有趣的是,如果将最后8位视为有符号字符,则会为您提供正确的量化误差。

char absolute_quatization_error(short measurement) //lets consider that short is 16bits
{
   return (measurement & 0xFF);
}

好的上层功能很棘手你应该使用类似的东西。

short absolute_quatization_error(short measurement) //lets consider that short is 16bits
{
    short r;
    r=measurement & 0xFF;
    if (r>0x7F)
        return (0xFF-r);
    else
        return r;
}

如果你需要相对错误,你应该使用。

float relative_quatization_error(short measurement)
{
     return 1.0*absolute_quatization_error(measurement)/((float)measurement); //i did not check if this correctly converts to float.
}

答案 3 :(得分:1)

维基百科的文章中有,表示为信噪比。但我想真正的问题是,你想以什么单位结果?作为信噪比,它是20 log(2 ^ 8)= 55 dB

您可能需要阅读此内容:http://en.wikipedia.org/wiki/Decibel