High Density Bipolar of order 3 code,三阶高密度双极性码。
1、连0的个数不超过3时,规则与AMI相同,即0不变,1变为-1、+1交替;
2、若连0的个数超过3,则将每4个0看作一小节,定义为B00V,B可以是-1、0、+1,V可以是-1、+1;
3、B和V具体值满足以下条件:V和前面相邻非0符号极性相同;不看V时极性交替;V与V之间极性交替;
4、一般第一个B取0,第一个非0符取-1。
在V与V之间如果出现偶数个B时,应在后一个V字节补一个B',定义为B'00V,B'与前面相邻的B之间符号极性相反,这个字节的V和B'符号极性相同。[1]
由于V会破坏极性交替的规律、B有3种变化以满足规则,所以V称为破坏脉冲、B称为调节脉冲,B00V称为取代节、破坏节。
例如:
方向 | 旧 ← 新 | ||||||||||||||||
消息码 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
AMI | -1 | 0 | 0 | 0 | 0 | +1 | 0 | 0 | 0 | 0 | -1 | +1 | 0 | 0 | 0 | 0 | -1 |
HDB3 | -1 | 0 | 0 | 0 | -V | +1 | 0 | 0 | 0 | +V | -1 | +1 | -B | 0 | 0 | -V | +1 |
±1和±B、±V没有区别,这里只是说明它们是0变来的。
-B为补码,值为-1,此字节V符号跟随,为-V
由规则导出的一种编码方法,个人认为这是机器实现时最效率的思路之一:
1、源码是1时,暂时不变;
2、连0不超过3个时不变,有4个或以上连0时把每4个0换为取代节,即B00V;
3、确定B是0还是±1:第一个B一般取0,若两个取代节之间1的个数为偶,易推得后者的B一定是±1,此时B和1遵循的规则完全相同,可以直接记为1,即100V;为奇则一定是0,记为0,即000V。
4、统一确定极性:第一个非0符一般取-1,之后,根据前一个非0符极性,V取同,1取反;
手算的方法多种多样,理清规则,遵循“先满足V之间极性交替,然后确定B”的大方向,皆可迎刃而解。
常见的错误:经常出现 “第一步先转成AMI” 的表述,这无论对于手算还是编程,实际操作起来都是多余的步骤。如例子中的最后一位,HDB3码和AMI码相反,AMI码和HDB3码的极性没有必然关系,因此转成AMI既决定不了1码最终的极性,又不改变0,对HDB3编码过程没有任何帮助。HDB3是改进的AMI,提到它主要是追根溯源、做对比,起到帮助理解记忆的作用,并不是一定要在编码过程中用到它;
方向 | 旧 ← 新 | ||||||||||||||||
消息码 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
AMI | -1 | 0 | 0 | 0 | 0 | +1 | 0 | 0 | 0 | 0 | -1 | +1 | 0 | 0 | 0 | 0 | -1 |
HDB3 | -1 | 0 | 0 | 0 | -V | +1 | 0 | 0 | 0 | +V | -1 | +1 | -B | 0 | 0 | -V | +1 |
1、虽然编码很复杂,但解码规则很简单,就是把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1 就应该译成“10000”,否则不用改动;若2连 “0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.
2、再将所有的-1变换成+1后,就可以得到原消息码。
1、由HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
2、HDB3中连0串的数目至多为3个,易于提取定时信号。
3、编码规则复杂,但译码较简单。