曼彻斯特编码(Manchester)是在通讯领域中一种常见的编码方式, 其优点是:编码简单,解码简单,抗干扰能力比较强, 在串行通讯领域, 无线遥控领域都有很多应用。 缺点是只有带宽 50% 左右的 编码效率。
相关的参考文章:
曼彻斯特编码帧(包)组成:
起始定界符+数据 + 终止定界符 (这里我们以mvb 协议为例,其他的通讯方式,根据不同协议会有所不同,但这三个基本要素都是有的)

在曼码的解码中,首先要找到起始定界符,之后对数据进行解码,最后找到终止定界符。 到此,整个曼码的解码结束。 如果没有找到起始定界符,则对帧中(包内)的任何波形进行解码,都是没有意义的。甚至都不能判断出当前的数据是0,还是1。
以mvb 协议为例,起始定界符由两种:主帧起始符,从帧起始符。


这里我们以mvb 协议中的的从帧起始定界符为例:
曼码的解码可以有很多种方式,没有一个强制的规定。 但原则是要正确的把数据解码出来即可。总体的原则是:
1)找到起始定界符,定界符的第一对bit(两个bit)中 一定有电平反转(边沿)根据这个边沿定位起始位开始,接下来就是解码出完整的定界符(mvb 协议是 起始位+8个BT )
2)解码数据段,将数据正确解码
3)找到终止定界符,完成整个数据包(帧)的解码
由于曼码的编码特点,线路上不会长期出现高电平或者低电平,这使得曼码的通讯抗干扰能力比较强,即使在长线传输中波形发生扭曲,变形,也可以通过边沿进行矫正,这也是曼码的优点。在一个包(帧)的数据段最多只会出现连续的两个0, 或者连续的两个1。(没有’NL‘ ’NH’)举例:

上图中,以0.5BT 的比特率动态采样,我们会得到: 2’b10, 2’b10, 2’b01, 2’b10, 2’b10, 2’b10, 2’b01, 2’b10 16个bit, 根据曼码协议得到的数据为 (第一个棕色信号为接收到的波形, 第二个棕色信号为数据采样(0.5BT) )
2‘b10 = 1
2’b10 = 1
2’b01 = 0
2’b10 = 1
2’b10 = 1
2’b10 = 1
2’b01 = 0
2’b10 = 1
data = 8’hdd;
因为上图为数据段,可以看到,波形中只会连续出现两个1,或者两个0。 不会出现连续3个,3个以上的0,或者是1。
波形解码
在起始定界符中也最多会出现3个0 或者三个1 (0.5BT为采样单元),数据段最多是2个,所以整个的解码方式都是以0.5BT 作为采样单元。
在对整个波形(帧)解码过程中:
1)首先找到边沿(上升沿,或者下降沿),定位
2)在边沿之后的0.25BT 位置左右做第一次采样,之后在1.25BT 位置做第二次采样,在2.25BT 位置做第三次采样,以此类推。 直到出现下一个边沿(上升沿,或者下降沿)为止。因为出现边沿,就重新定位。

这样phy层的解码就完成了。 举例: 一个8bit的数据会被0.5BT 采样下得到16个值;一个9bit的数据会被0.5BT采样下得到18个值。
之后我们会根据曼码的编码中的定义,一对一对的解码:
2‘b01 = 0
2’b10 = 1
2’b00 = ‘NL’ (数据段没有, 起始,终止段 有)
2’b11 = ‘NH’ (数据段没有, 起始,终止段 有)
接下来就可以对协议层解码了, 包括得到起始定界符,数据, 终止结束符等。
到此整个曼码的解码完成。