有谁知道如何计算从16位到8位的量化误差?
我查看了关于Quantization的维基百科文章,但它没有解释这一点。
任何人都可以解释它是如何完成的吗?
很多爱, 路易丝
更新:我的功能看起来像这样。
unsigned char quantize(double d, double max) {
return (unsigned char)((d / max) * 255.0);
}
答案 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