目录

写在前面的话

1 what?什么是曼彻斯特编码

 2 how?怎么使用曼彻斯特编码

2.1 曼彻斯特的编码:

2.2 曼彻斯特的译码:

3 why?为什么推荐曼彻斯特编码?这种编码方式的优缺点


写在前面的话

        数据传输之前为什么将数据进行编码?

        这是个好问题!!

        一句话:令传输系统具备一定的纠错能力和抗干扰能力,可最大程度避免码流传输的误码率!

1 what?什么是曼彻斯特编码

        曼彻斯特编码也称为相位编码,是一种同步时钟编码技术。通过电平的高低转换来表示“0”或“1”,每一位的中间有一个跳变的动作,这个动作既作时钟信号,又作数据信号,但因为每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2,其编码效率为50%。常用于局域网传输!

        表示方法:

                第一种G. E. Thomas, Andrew S. Tanenbaum1949年提出的:

                        位中间电平 从低到高 跳变表示"0"。

                        位中间电平 从高到低 跳变表示"1";

                第二种IEEE 802.4(令牌总线)和低速版的IEEE 802.3(以太网)中规定:

                        位中间电平 从低到高 跳变表示"1"。

                        位中间电平 从高到低 跳变表示"0";

曼彻斯特编码Java 曼彻斯特编码详解_java

        对于以上的约定,具体该如何使用,需要根据实际的应用场景进行区分。那么有没有一种编码方式能够避免以上两种约定方式可能带来的歧义呢?当然有了,差分曼彻斯特编码。为了不让混淆,将单独用一篇文章进行描述!最好先认真读完本文之后,大家再去了解差分曼彻斯特!

 2 how?怎么使用曼彻斯特编码

在实际应用中,若无特殊说明,曼彻斯特码的编码规则均采用第二种约定。

2.1 曼彻斯特的编码:

        曼彻斯特码是用“01”和“10”来表示普通二进制数据中的“1””和“0”的,因此在实际电路设计中,我们可以用采一个2选1数字选择器来完成此项功能。

曼彻斯特编码Java 曼彻斯特编码详解_曼彻斯特编码Java_02

2.2 曼彻斯特的译码:

        (这部分内容也常用用到其他编码方式的译码逻辑中,比如汽车电子钟的轮速AK传输协议,其中的数据信息部分也就是用了曼彻斯特编码的方式,对于其译码逻辑,同样适用)

        曼彻斯特译码电路设计的目的,是如何准确地从曼彻斯特码的码流中提取出“10”和“01”信号,并将其转换成普通二进制编码中的“0”和“1”。

        例如对于曼彻斯特码“01010101”,如果从第一位开始解码,得到的二进制编码就是“1111”,而若从第二位开始解码,得到的二进制编码就是“000”和头尾两个曼彻斯特码。

        由此可见,如果曼彻斯特码数据流中只有“1”或“0”是不能得到正确的译码结果的,如果曼彻斯特编码数据流中出现“00”,则“00”前后的码元必定是“1”;如果曼彻斯特编码数据流中出现“11”,则“00”前后的码元必定是“0”,因此,我们可以将“00”与“11”作为曼彻斯特码译码的标志位。

        在实际设计电路中,可以采用一个缓存器,保存上一个时钟采集到的信号和当前时钟采集到的信号,当缓存器的内容是“01”时,输出“1”;当缓存器的内容是“10”时,输出“0”;当缓存器的内容是“00”或“11”时,输出维持不变。

曼彻斯特编码Java 曼彻斯特编码详解_曼彻斯特编码Java_03

3 why?为什么推荐曼彻斯特编码?这种编码方式的优缺点

        这个问题,属于一个开放的问题,优缺点嘛,都是需要有参考对比的。博主列举出的内容不全,大家在使用的过程中,也可以将使用的痛点和便捷点都一起聊聊!

        优点:

        1 跳变电平传输同步时钟信息,无需单独时钟同步信号,不含直流分量,具有很好的抗干扰能力,更适合于信道传输。

        缺点:

        1 编码效率较低,数据传输率只有信号速率的 1/2。