4b5b与8b10b为何归类为线路码?与汉明码有何本质区别
先明确分类的核心判断标准
别拿“复杂度高低”当划分编码类别的依据,编码是按设计目标、应用场景分类的,从来不是按实现复杂度分。
为什么4b5b、8b10b属于线路码
线路码的核心定位,是把原始二进制比特流转换成适配物理信道传输特性的符号序列,所有编码规则都围绕物理层传输的实际要求设计:
- 保证足够的信号电平跳变密度,让接收端能从信号里提取同步时钟,不会因为长时间连续0/连续1导致时钟失锁、采样错位
- 控制传输序列的直流分量,避免直流漂移导致接收端的电平判决阈值偏移,出现大面积误码
- 控制信号的最高带宽,匹配信道的通带范围,减少码间串扰
4b5b、8b10b的设计完全贴合上面的目标:4b5b把每4位原始数据映射为5位传输码,从编码规则上就卡死了所有有效码组的连续0/1长度不超过3位,自带足够跳变供时钟同步;8b10b通过运行不一致(RD)校验机制动态选择码组,保证任意一段传输序列的0、1数量基本相等,实现完美的直流平衡。它们加的冗余位全是为了优化传输物理特性,从设计之初就没把纠错当核心目标,自然归到线路码范畴。
和汉明码的本质区别
两者根本不是同一个层级、同一个设计目标的编码,核心差异有三点:
- 设计目标完全不同
线路码解决的是比特怎么在物理介质上送出去,让接收端能准确采样到每一个比特的电平值的问题,属于物理层传输适配范畴;汉明码是信道纠错码,解决的是比特在传输中被噪声干扰翻转后,怎么靠冗余信息把错的比特找出来修正的问题,属于差错控制范畴。 - 冗余位的作用完全不同
线路码添加的冗余(比如4b5b每4位多出来的1位、8b10b每8位多出来的2位),只用来调整传输序列的跳变密度、直流平衡等物理特性,不承载独立的校验逻辑,接收端只需要对照固定映射表就能还原原始数据,不会用这些冗余位做纠错计算;汉明码添加的冗余位是专门计算生成的校验位,和原始数据位做了异或校验绑定,接收端必须通过这些校验位计算校正子,定位错误比特位置才能完成纠错。 - 工作的协议层级不同
线路码工作在物理层最末端,编码输出的是直接送到线路驱动器、光模块的物理符号序列;汉明码一般工作在数据链路层及以上,处理的是已经被物理层采样、还原出来的离散比特块,完全不关心物理链路上的信号波形、时钟同步这类底层问题。
补充个容易混淆的点:线路码本身就分两类,一类是不带冗余的,比如曼彻斯特编码、NRZI,靠电平跳变规则实现传输适配;另一类就是块型线路码,也就是4b5b、8b10b、64b66b这类,靠少量冗余做固定块映射,换更高的传输效率和更好的传输特性,别觉得“加了冗余映射就不算线路码”。
内容的提问来源于stack exchange,提问作者user7586189
相关产品推荐
相关产品推荐

