MQ编码器

MQ编码器

 

MQ编码器来自于无乘法的Q编码器算法;而另一来自Q编码器的算法是QM,这两个编码器的区别有:

1. QMLPS区间在上,MPS区间在下,而MQ正好相反,LPS区间在下,而MPS区间在上。

2. QM编码器采用的是全进位模式,而MQ的是位填充模式。

如图:

 MQ编码器_第1张图片

上图中发现MQ编码器的MPSLPS的区间位:

MPS区间: QeA

LPS区间:0Qe

 

MQ编码器的规则:

1. 如果遇到一个MPS

a)         首先将A A-Qe;这个是MPS的区间大小

b)        如果A大于0x8000的时候,说明不需要重定标;需要将MPS的下界放到输出符号C中,即:C = C+A

c)        如果A小于0x8000,说明需要重定标;这个时候需要比较一下AQe的大小,如果AQe小还需要交换区间

d)        如果AQe小,首先需要将Qe的值给A,也就是A Qe;这个时候不需要输出区间边界,因为交换之后的MPS区间的下界实际上是原来LPS区间的下界,其是0

e)         如果AQe大,这个过程同b,需要将MPS的区间下界Qe输出到C

f)         对于小于0X8000的情况需要重定标,也就是逐次加倍增加AC,直到A0x8000大;如果中间的C发生溢出,需要输出C的高位到输出字节。

2. 如果是LPS,那么重定标是肯定的,在完成所有操作后进行

a)         如果AQe小;这个时候实际上A仍然是MPS的区间,单由于遇到了一个LPS,最终的A应该是LPS区间,大MPS的区间(现在的A)比LPS的区间(Qe)小,所以取两者小的那个,所以A已经是值了。这实际上是一次区间交换。而交换后的LPS区间下界是交换前的MPS区间下界,也就是Qe,因此将Qe输出到C。那么C = C + Qe

b)        如果AQe大,说明这是一个不需要交换的区间,但这个时候需要将LPS的区间给A,而且将LPS的区间下界输出到C;对于LPS的区间是Qe,因此A = Qe;而LPS的区间下界是0,所以C没有变化。

完成上面步骤以后需要进行 A C 的重定标,直到 A 0X80000 大为止。


对应QM编码器可以参见QM编码器


MQ编码器 代码下载。

你可能感兴趣的:(MQ编码器)