曼彻斯特编码是非常常见的编码,网线就是采用这种编码。课本上说的“含有丰富的时钟信息”。
编码的步骤,是用01表示0,用10表示1。正是因为用跳变沿表示电平,使得它的频率是信号的两倍。
以下是编码的程序:
仿真的波形:
从波形可以看出,曼码可以避免连0或者连1。
这里有问题,我默认了时钟信号的频率是曼码频率的两倍,因为我必须利用时钟沿编码。不太清楚实际情况是什么样的,因为网上都是时钟信号频率等于编码频率,很奇怪。
下面介绍译码。译码的难度不是01以为0,10译为1,而是确定是吗时候开始译码。参考了一些书,他们是从检测到00或11后开始译码,因为00后一定是1,11后一定是0,所以就可以确认开始,然后两个为一组译码。
代码如下:
仿真结果:
由图中可以看出,译码从检测到11开始,因为11后面跟着0,所以译01,按顺序来是10,所以输出1,后面每隔两个码译一次,因为不能和前一个码混在一起。这样如果传输过程没有误码,后面再也不会出现翻译00或11的情况。在这里我故意弄出了个11,让fail错误信号置了1。