其他分享
首页 > 其他分享> > 网络与通信-HDB3码编码方法

网络与通信-HDB3码编码方法

作者:互联网

之前一直没搞明白HDB3的编码方法,在网上找了许多关于HDB3码的编码方法,但是经过验证都不正确。在此记录一下正确的编码方法。

 

HDB3编码方法:

step1:在所有出现4个0的位置的最后一个0的位置标记上‘V’

step2:默认第一个V为正(事实上为负也可以,这里为了方便说明默认为正),然后接下来让所有的V交替正负号

step3:对于每两个V之间的1来说,让第一个1的正负与起始的V正负号相反,之后的1和这个1正负号交替

step4:对于前面没有V的1来说,令它与后面的V正负号相同。对于所有V,检查其前面是否存在与其符号相同的1,如果没有则需要修改该V所对应的4个0的第一个0为B,正负号与该V相同

 

说了步骤估计还是云里雾里,直接来个例子:

 

example:

将100001101000000001100001转换为HDB3码

位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
源码 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1
step1         V               V       V           V  
step2         V+               V-       V+           V-  
step3         V+ 1- 1+   1-       V-       V+ 1- 1+       V- 1+
step4 1+       V+ 1- 1+   1-       V- B+     V+ 1- 1+ B-     V- 1+
最终输出 1+ 0 0 0 1+ 1- 1+ 0 1- 0 0 0 1- 1+ 0 0 1+ 1- 1+ 1- 0 0 1- 1+

下面结合这个例子解释一下上面的步骤:

第一步,标出来V,没什么好说的

第二步,给标出来的V赋一个正负号,要交替的,比如+-+-...或是-+-+...,这里是+-+-+-...这样的

第三步,比方说第6位的1,想要判断他的正负号,只需要看他前面的V的正负号并与之相反就行了,后面的1正负号就和他来回相反就行,直到遇见下一个V。因此6-12位的1判断流程就是首先判断出第6位的1是负号,然后第7位与之相反是正号,第9位与第7位相反是负号。第18位的1就要看它前面的第17位的V的正负,判断流程同上

第四步,HDB3需要满足V前面的1符号需要与自身相同。因此对于开始的1(例子中就是第一位的1)需要与它后面的V符号相同,也就是正号。然后对于每个V逐个排查前面的1符号与自己是否相同。在本例中,发现第17位的V在它前面的不是与它符号相同的1,所以就在这个V对应的4个0的第一个0的位置(也就是第14位)标上B,并且让这个B的符号与V相同。对于第23位的V也是一样的道理。

确定了所有的正负号,只需要按照正负号输出0, 1, -1就行了。

 

标签:编码方法,相同,符号,前面,通信,HDB3,正负号
来源: https://www.cnblogs.com/player-unknow/p/16353932.html