0.前言

编码根据作用和场景不同分为信源编码,信道编码和线路编码。

  1. 信源编码:降低信源符号之间的相关性和冗余度,通过编码提高每个符号的信息量。具体说,就是针对信源输出符号序列的统计特性来寻找某种方法,把信源输出符号序列变换为最短的码字序列。比如各种压缩算法,音视频编码,Huffman编码、算术编码、L-Z编码

  1. 信道编码:增加信号间的冗余度,用冗余信息对抗信道中的各种干扰。比如奇偶校验,线性分组码、卷积码、级联码、Turbo码和LDPC码

  1. 线路编码:信号在实际物理信道上传输,需要根据信道特性和正确接收采样的需求做的一些编码。比如归零码,非归零码,曼彻斯特编码,各种phy(hdmi,serdes,csi/dsi,etherNet)的8B/10B, 4B/5B,64B/66B编码等

本篇主要介绍传输编码。

  1. 线路编码

(以下内容摘自https://dilidonglong.com/2020/08/12/%E7%BC%96%E7%A0%81/)

通信线路的编码就像商品的包装,商品包装的目的是使商品更适合运输,在运输过程中不受损,同样,线路编码的目的就是使编码后的二进制数据更适合线路传输。

物理层的编码可以分为两类。

一类是和物理介质相关,常用的光接口码型有NRZ、NRZI;电接口码型有HDB3、BnZS、CMI、Manchester、MLT-3。

另一类和物理介质无关,比如百兆以太网用的4B/5B编码,千兆以太网用的8B/10B编码,万兆以太网用的64B/66B编码。

1.1物理介质相关编码

1.1.1 NRZ码:

NRZ即Non-Return to Zero Code, 非归零码,光接口STM-NO、1000Base-SX、1000Base-LX采用此码型。NRZ是一种很简单的编码方式,用0电位和1电位分别二进制的“0”和“1”,编码后速率不变,有很明显的直流成份,不适合电接口传输。

NRZ的问题是,几个连续的1表示在一段时间内信号在链路上保持为高电平,类似地,几个连续0表示信号在一段时间内保持为低电平。一长串0和1导致两个基本问题。第一个问题是,它会导致基线漂移(baseline wander)状态。尤其是接收方保持一个它所看到的信号平均值,然后用这个平均值区分高、低电平。当收到的信号远低于这个平均值时,接收方就断定看到了0,同样,远高于这个平均值的信号被认为是1。当然,问题是太多连续的1或0会使这个平均值发生改变,使得检测信号中很难出现明显的变化。

第二个问题是,由高到低和由低到高的频繁转换必须使用时钟恢复(clock recovery)。直观地讲,时钟恢复问题就是:编码和解码过程都由一个时钟来驱动,每个时钟周期发送方发送1比特,接收方恢复1比特。为了使接收方能恢复发送方发送的比特,发送方和接收方的时钟必须精确同步。如果接收方时钟比发送方时钟稍快或稍慢,那么,接收方就不能正确地解码信号。可以采用在另一条线上发送时钟给接收方的方法,但这种方案不太可行,因为这使布线费用增加一倍,所以接收方改由收到的信号得到时钟,这就是时钟恢复过程。无论何时,只要信号有从1到0或从0到1的跳变,接收方就知道这是在时钟周期的边界上,它能够自己进行重新同步。然而,若长时间没有这样的跳变就会导致时钟漂移。所以,无论传送什么数据,时钟恢复都依赖于信号内有许多跳变。

下图以图解方式描述了一个特定的比特序列(图的上部)及其对应的NRZ编码信号(图的下部)。

1.1.2 NRZI码:

有一种方法可以解决上述问题,称为不归零反转(NonReturn to Zero Inverted,NRZI)。光接口100Base-FX使用此码型。编码不改变信号速率。发送方将当前信号的跳变编码为1,将当前信号的保持编码为0。这样就解决了连续1的问题,但是显然未解决连续0的问题。NRZI如下图所示。还有一种方法称为曼彻斯特编码(Manchester encoding),这种颇具独创性的方法通过传输NRZ编码数据与时钟的异或值使时钟与信号结合在一起。(把本地时钟看作一个从低到高变化的内部信号,一对低/高变化的电平看作一个时钟周期。)下图也给出了曼彻斯特编码。注意,曼彻斯特编码将0作为由低到高的跳变,1作为由高到低的跳变(定义也可以相反)。因为0和1都导致信号的跳变,所以接收方能有效地恢复时钟。(还有一种曼彻斯特编码的变种,称为差分曼彻斯特(differential Manchester)编码。其方法是若信号的前一半与前一比特信号的后一半信号相等则编码为1,若信号的前一半与前一比特信号的后一半信号相反则编码为0。)

曼彻斯特编码方案存在的问题是使链路上信号跳变的速率加倍,这意味着接收方有一半的时间在检测信号的每一个脉冲。信号变化的速率称为链路的波特率(baud rate)。在曼彻斯特编码中,比特率是波特率的一半,所以认为编码的效率仅为50%。记住,如果接收方保持比上图中的曼彻斯特编码要求的更快的波特率,那么在相同的时间段中,NRZ和NRZI能传输2倍的比特数。

NRZI编码规则:

1).如果下一个输入二进制位是“1”,则下一个编码后的电平是当前电平跳变后的电平;

2).如果下一个输入二进制位是“0”,则编码后的电平与当前保持一致。

NRZ和NRZI都是单极性码,即都只有正电平和零电平,没有负电平,所以NRZ和NRZI码中有很多直流成份,不适合电路传输,并且NRZ和NRZI编码本身不能保证信号中不包含长连“0”或长连“1”出现,不利于时钟恢复。

1.1.3 MLT-3码:

MLT-3即Multi-Level Transmit -3,多电平传输码,MLT-3码跟NRZI码有点类型,其特点都是逢“1”跳变,逢“0”保持不变,并且编码后不改变信号速率。如NRZI码不同的是,MLT-3是双极性码,有”-1”、“0”、“1”三种电平,编码后直流成份大大减少,可以进行电路传输,100Base-TX采用此码型。

MLT-3编码规则:

1).如果下一输入为“0”,则电平保持不变;

2).如果下一输入为“1”,则产生跳变,此时又分两种情况。

(a).如果前一输出是“+1”或“-1”,则下一输出为“0”;

(b).如果前一输出是“0”,其信号极性和最近一个非“0”相反。

1.2 物理介质无关编码

什么是4B/5B编码?

4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示:

为什么要进行4B/5B编码?

在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息。

Manchester(曼切斯特)编码可以保证线路中码流有充分的跳变,因为它是用电平从“-1”到“+1”的跳变来表示“1”,用电平从“+1”到“-1”的跳变来表示“0”,但是这种编码方式的效率太低,只有50%,相当于用线路的有效带宽来换取信号的跳变,十兆以太网就是使用Manchester编码,虽然线路的有效带宽只有10Mbps,但实际带宽却是20Mbps。

百兆以太网用的4B/5B编码与MLT-3编码组合方式,发送码流先进行4B/5B编码,再进行MLT-3编码,最后再上线路传输;千兆以太网用的是8B/10B编码与NRZ编码组合方式;万兆以太网用的是64B/66B编码;PCIE 3.0用的是128B/130B编码。

4B/5B编码规则有哪些?

4B/5B编码其实就是用5bit的二进制码来代表4bit二进制码。此编码的效率是80%,比Manchester码高。4B/5B编码的目的在前面已经说过了,就是让码流产生足够多的跳变。4位二进制共有16种组合,5位二进制共有32种组合,如何从32种组合种选取16种来使用呢?这里需要满足两个规则:

1). 每个5比特码组中不含多于3个“0”;

2). 或者5比特码组中包含不少于2个“1”;

此规则是怎么来的?这就要从MLT-3码的特点来解释了。MLT-3码的特点简单的说就是:逢“1”跳变,逢“0”不跳变。为了让4B/5B编码后的码流中有足够多的跳变就需要编码后的码流中有尽量多的“1”和尽量少的“0”。

这种编码的特点是将欲发送的数据流每4bit作为一个组,然后按照4B/5B编码规则将其转换成相应5bit码。5bit码共有32种组合,但只采用其中的16种对应4bit码的16种,其他的16种或者未用或者用作控制码,以表示帧的开始和结束、光纤线路的状态(静止、空闲、暂停)等。

三种应用实例是FDDI、100BASE-TX和100BASE-FX.

8B/10B编码与4B/5B的概念类似,例如在千兆以太网中就采用了8B/10B的编码方式。

在通信系统中,通信速度与线路传输中的调制速率,所谓调制速率是指单位时间内线路状态变化的数目,以波特(baud)为单位。如果采用曼彻斯特编码,在每个调制时间间隔内跳动两次,则数据传送速率是波特率的二分之一。在快速以太网中,数据传输速率为100Mbps,如果采用曼彻斯特编码,波特率将达200M波特,对传输介质和设备的技术要求都将提高,增大了传输成本。如果使用4B/5B编码,在传输速率为100Mbps的情况下,其调制速率为:100M÷(4/5)=125M(baud)。即波特率为125M baud,大大低于曼彻斯特编码时的200M baud,这样就在快速以太网中使用非屏蔽双绞线成为可能。

线路编码(NRZ,NRZI,8B/10B,Manchester等)相关推荐

  1. 通讯线路物理层编码类型总结(NRZ,MLT-3,4B/5B,8B/10B,64B/66B...)

    通信线路的编码就像商品的包装,商品包装的目的是使商品更适合运输,在运输过程中不受损,同样,线路编码的目的就是使编码后的二进制数据更适合线路传输. 物理层的编码可以分为两类. 一类是和物理介质相关,常用 ...

  2. 高速信号编码之8B/10B

    1. 线路编码技术 在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛.针对这种情况,可以通过CTLE和FFE( ...

  3. 高速收发器之8B/10B编码

    前面文章说过,在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛.针对这种情况,前面有讲过可以通过CTLE和FF ...

  4. 线路/信道编码技术(1)——8B/10B编码

    1. 线路编码技术 线路编码机制将输入原始数据转变为接收器可接收的数据格式,同时保证数据流中有足够的时钟信息提供给接收端的时钟恢复电路.线路编码技术提供了一种将数据对齐到字节/字的方法,可以保持良好的 ...

  5. 剖析8B/10B的实现机制

    目录 第一章         内容梗概. 第二章         8B/10B编码是什么 第三章         8B/10B编码的作用 第四章         8B/10B编码的实现机制. 第五章  ...

  6. 【转载】8B/10B Encode/Decode详解

    1.编码技术基础理论 在高速的串行数据传输中,传送的数据被编码成自同步的数据流,就是将数据和时钟组合成单一的信号进行传送,使得接收方能容易准确地将数据和时钟分离,而且要达到令人满意的误码率,其关键技术 ...

  7. 8B / 10B Encode/Decode详解

    转载 http://blog.chinaaet.com/justlxy/p/5100052814 8B / 10B Encode/Decode详解 1.编码技术基础理论 在高速的串行数据传输中,传送的 ...

  8. TX的8B/10B编码功能

    Transmitter功能介绍 每个收发器(Transceiver)包括一个独立的发射器(Transmitter),它由PCS和PMA组成.下图显示了发射器(Transmitter)的功能块.并行数据 ...

  9. 高速串行总线系列(1)8B/10B编码技术

    目录 8B/10B编码 5B/6B 编码表 3B/4B 编码表 控制字符编码表 8B/10B编码的利用率 参考文献 8B/10B编码 为什么要使用8B/10B编码? 8b/10b编码的特性之一是保证D ...

最新文章

  1. npm install是什么命令_了解npm
  2. oracle正确维护归档,转载:ORACLE正确删除归档日志的方法
  3. 笔记本电脑锁_2020年双11有哪些值得选购的笔记本电脑?(全能本/便携高性能笔记本电脑/设计本)...
  4. Google推出了Python最牛逼的编辑器,你知道吗?
  5. Eclipse中JDK从1.8换到1.7程序运行报错解决
  6. Job for slapd.service failed because the control process exited with error code. See systemctl stat
  7. spring相互依赖怎么解决_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解...
  8. 中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
  9. php算法求出一个数可以被分解成多少个_小学数学1—6年级必考的34个数学重难点公式,赶紧给孩子收藏!...
  10. eclipse svn插件安装_eclipse 2020-03 (4.15.0) SVN 插件在线安装教程
  11. 麻省理工计算机相关网络课程,麻省理工MIT计算机课程表
  12. linux桌面壁纸目录,[多图]回顾每一款默认Ubuntu壁纸
  13. 专家议微软黑屏:目的正当 手段未必正当
  14. 你的快递“动”了吗,快递受阻,缺的不止快递小哥
  15. Windows10 彻底关闭系统更新(2022.12.26更新)
  16. iterator 的遍历 循环输出数字,页码
  17. 三、支持GPT硬盘格式启动的U盘PE
  18. 关于用户输入密码的程序
  19. linux学习笔记:四、Linux系统目录结构简述,一级目录
  20. element 解决 Error: target is not existed: .page-component__scroll .el-scrollbar__wrap

热门文章

  1. 一次就让你学懂java运算符
  2. Python基础——数据类型—元组
  3. 前端访问nginx发布的视频文件,实现在线播放
  4. scanf()函数的用法
  5. IKAnalyzer 分词工具的使用与问题
  6. 重复代码 Duplicated Code
  7. 唠一唠 消息可靠性保障消息幂等性处理 (RabbitMQ实际应用问题)
  8. 《牧羊少年奇幻之旅》读后感
  9. 微机原理七种寻址方式
  10. 两个电脑主机共用一个显示器