1、常见的几种基础编码方式
1.1 常用编码方式有4种
一:归零编码
二:非归零吗(NRZ)
三:曼切斯特编码
四:差分曼切斯特编码
1.2 图示和简述原理
不归零编码:
一般 高电平代表1,低电平代表0;此类编码实现最为简单,硬件成本最低。
归零编码:
有三种状态,正脉冲+负脉冲+空闲状态。每一个码元中间都是跳变,一个码元可以分为3个部分,跳变部分,处于码元中间,两侧都需要回到“空闲状态”
曼切斯特编码:
每一个位时间内,都会在中心处产生跳变 高->低跳变代表1,低->高跳变代表0.
注意:曼切斯特编码仔细看看还是有比较特别的地方的,1->1.0->0的跳变,以及1—>0,0->1的跳变。比较一下他们的跳方式。它和RZ编码,形式上的最大区别,RZ编码,存在一个脉冲跳变(也就是存在一个上升沿+下降沿+(维持一段时间的高电平和低电平)),而曼切斯特编码则是从中间出,高电平到低电平代表1,低电平到高电平表示0。
也有一种方法判断,就是将一个码元分为前后两部分,前部分是高电平就=1,前半部分是低电平就表示0
差分曼切斯特编码:
继承了曼切斯特编码中心处,必有跳变的性质,在每一码元的开始出,有跳变的代表0,每一位开始处没有跳变的代表1(这一点和RZ-I和NRZ-I的编码方式正好是相反的,这两种是1,在码元处有跳变,0则没有跳变)。这里有一个问题就是如果第一位数值到底是编码为1,还是编码为0。(目前应该是采用差分曼切斯特编码有其办法避免我这种疑问),如果各位同仁知道请不吝赐教。大家比较1->1,0->0,1->0,0->1。不同的编码方式】
1.3 概念的理解
以上几种编码方式,只是规定了编码的方式,并没有规定具体的电压标准,具体的标准还要在具体的通讯协议,如TTL,CAN协议,以太网协议中才会规定具体的电压水平。
举一个例子:比如写论文,编码只是规定了格式,但是具体使用什么字体,字体大小、颜色都是具体不同文章,具体规定。
2、具体的技术细节
2.1 NRZ编码
可分为 NRZ-L(Non-Return-to-Zero-Level,非归零电平)和 NRZ-I(Non-Return-to-Zero-Invert,非归零反相)两种主要类型,以下为你详细介绍:
2.1.1 NRZ-L(非归零电平)
- 编码规则:使用不同的电平值来直接表示二进制数据中的 0 和 1。通常情况下,高电平表示二进制的 1,低电平表示二进制的 0。在整个码元周期内,信号电平保持不变,不会回到零电平。
- 优点:实现简单,易于理解和实现,硬件成本较低。
- 缺点:存在直流分量,不适合通过变压器等交流耦合设备进行传输;当出现连续的 0 或 1 时,接收端难以提取同步时钟信号,容易导致同步丢失。
- 应用场景:常用于短距离、低速率的通信系统,如计算机内部的数据传输,像早期的计算机总线数据传输就可能采用 NRZ-L 编码。
2.1.2 NRZ-I(非归零反相)
- 编码规则:根据信号电平的变化来表示二进制数据。如果当前位为 1,则信号电平相对于前一位发生翻转;如果当前位为 0,则信号电平保持不变。
- 优点:相较于 NRZ-L,它在一定程度上减少了连续相同电平的出现,使得接收端更容易提取时钟信号,提高了同步性能。1越多,接收端就更容易提取同步信号。
- 缺点:仍然存在直流分量问题;当出现连续的 0 时,信号电平保持不变,可能会导致接收端的同步困难。
- 应用场景:在一些对同步要求较高的通信系统中应用,例如 USB(Universal Serial Bus,通用串行总线)1.1 和 2.0 标准中就采用了 NRZ-I 编码方式来传输数据。
2.1.3 NRZ-I(非归零反相)编码的“指定初始电平”和“前导码”
- 指定初始电平:通信双方预先约定一个初始电平状态,比如约定初始电平为低电平(逻辑 0)或者高电平(逻辑 1)。这是一种常见的做法,因为在通信开始前,发送方和接收方需要进行一些初始化操作,其中就可以包含对初始电平的约定。
- 使用前导码:在正式数据传输之前,先发送一段特定的前导码序列。这个前导码序列用于同步和建立初始电平状态。接收方通过检测前导码来确定初始电平,然后再开始对后续的数据进行解码。
2.1.4 NRZ中“电平”和“总线电压”不是同一回事
- 定义:
- 低电平 → 二进制 0
- 高电平 → 二进制 1
这个定义是“一定的”和“确定的”
但是,比较违反常识的是“低电平”和“低电压”并不是一回事。
-
- 低电平通常为 0V(如 TTL 电平标准),但实际应用中可能因协议不同而变化。例如:
- RS-232 标准中,低电平(0)对应 + 5V 至 + 12V,高电平(1)对应 - 5V 至 - 12V。
- CAN 总线中,低电平(0)通过差分电压表示(如 CAN_H=3.5V,CAN_L=1.5V,差分电压 2V)。
- 低电平通常为 0V(如 TTL 电平标准),但实际应用中可能因协议不同而变化。例如:
- 电平绝对值直接代表数据,但低电平不一定是 0V,需根据协议确定。
- 同理高电平也是,高电平不一定是代表高电压
2.1.5 基于NRZ的其他编码技术-差分电压编码
这一段是一个延伸,以CAN协议中的编码-差分电压编码举例。
CAN总线中,存在一条CAN_H和一条CAN_L,两条线都是基于NRZ编码技术,独立编码的。两条线上规定当电压>2V时,编码=1,低于2V,编码为0。
但是最终编码到底是1还是0,取决于:
最终编码 = CAN_H编码 & CAN_L编码。
当CAN_H&CAN_l 电压都是=2.5V左右时,最终编码 = 1 &1 =1
当CAN_H电压升高=3.5V时,CAN_L下降为1.5V时,最终编码 = 1&0 =0 ;
2.2 RZ编码
2.2.1. 归零编码(RZ)的基本原理
- 编码规则:
- 二进制 1:在码元周期的中间存在一个正向脉冲。
- 二进制 0:在码元周期中间存在一个负脉冲。
- 信号波形:
每个码元中间有一个电平跳变,确保信号在每个周期结束时回到零。
2.2.2. 归零编码的变种
根据电平映射规则,归零编码可分为两种主要类型:
(1) RZ-L(归零电平编码)
- 直接映射:
- 高电平(如 3.3V)→ 二进制 1
- 零电平(0V)→ 二进制 0
- 特点:
信号在每个码元周期内必须回到零,消除了直流分量。
(2) RZ-I(归零差分编码)
- 差分映射:
- 电平翻转 → 二进制 1
- 电平不变 → 二进制 0
- 特点:
通过电平变化隐含数据,同时在每个码元周期内归零。
- 编码规则:
- 二进制 1:在码元周期的前半段保持高电平,后半段回到零电平。
- 二进制 0:在码元周期内始终保持低电平(或零电平)。
- 编码规则图示:
即与1编码的元素,它中间的电平与上个电平的电平的脉冲方向,相反!!!
看图找出RZ-I的编码规律,首先我们将一个码元分割为3个小部分,如下图
依次编号 “1-1-1” 就是指图中第一个码元,数据为1,分割部分的第1部分。
比较如下部分:
1-1-2与2-0-1;
2-0-2与3-1-1
3-1-2与4-1-1
我们发现规律了,每一个码元,其第一部分总和上个码元的第二部分一样。
再比较以下部分:
1-1-2与2-0-2
2-0-2与3-1-2
发现,0与前一个码元的第二部分保持一致。
1与上个码元的第二部分保持反方向的脉冲。
小结 RZ编码方式和NRZ编码方式的差异
对比项目 | NRZ - L | NRZ - I | RZ - L | RZ - I |
---|---|---|---|---|
物理层差异 | 用固定高、低电平分别代表二进制 1 和 0,在整个码元周期内电平保持不变,无电平跳变规律用于同步 | 电平变化代表二进制 1,电平不变代表二进制 0,无归零操作,依赖电平变化实现差分编码 | 高电平代表二进制 1,低电平代表二进制 0,但在每个码元周期内信号会回到零电平 | 数据 “1” 时电平相对于前一码元跳变并在周期后半段归零,数据 “0” 时电平不变且后半段归零,通过差分跳变和归零编码 |
对带宽的要求 | 低,信号变化频率低,只需在数据改变时变化电平,占用带宽窄 | 低,类似 NRZ - L,在整个码元周期内电平相对稳定,变化频率不高,带宽需求小 | 高,每个码元周期有两次电平转换(数据变化和归零),信号变化频率高,需更宽带宽 | 高,每个码元有跳变和归零两次电平变化,信号频率高,带宽需求大 |
同步能力 | 弱,连续相同数据时电平无变化,接收端难提取时钟信号,需额外同步机制 | 较好,“1” 时电平翻转可为接收端提供时钟信息,但连续 “0” 时同步困难 | 强,每个码元结束归零为接收端提供明确码元边界,易提取时钟信号实现同步 | 强,归零和跳变都为接收端提供同步信息,能有效恢复时钟信号 |
硬件实现成本 | 低,编码规则简单,直接映射电平与数据,无需复杂电路和控制逻辑,硬件成本低 | 低,虽基于电平变化编码,但编解码电路实现难度不大,硬件成本相对较低 | 高,需额外电路实现归零操作,增加硬件设计复杂度和成本 | 高,要处理差分跳变和归零操作,硬件电路更复杂,成本更高 |
软件开发难度 | 低,逻辑简单,直接将数据转换为电平信号,软件实现容易 | 低,电平变化逻辑不复杂,软件实现难度不大 | 中,需考虑归零操作的时机和控制,软件实现稍复杂 | 中,要处理差分跳变和归零,软件逻辑相对复杂 |
协议复杂度 | 低,协议简单,只需定义电平与数据的映射关系 | 低,协议基于电平变化,规则不复杂 | 中,要规定归零方式和时间,协议复杂度增加 | 中,涉及差分跳变和归零规则,协议相对复杂 |
应用场景 | 计算机内部短距离、低速率通信,如早期计算机总线数据传输 | USB 1.1 和 2.0 等对同步有一定要求的短距离通信系统 | 早期数字通信系统、对同步要求高的工业控制和测量仪器领域 | 对同步要求极高、噪声环境复杂的工业控制网络,如 PROFIBUS |
直流分量 | 有,长时间固定电平产生直流分量,可能导致基线漂移 | 有,电平长时间不变会产生直流分量 | 无,每个码元周期归零,无直流分量积累 | 无,每个码元结束归零,避免直流分量问题 |
抗干扰能力 | 弱,依赖绝对电平,受噪声影响大 | 较好,基于电平变化编码,对绝对电平不敏感,抗干扰能力较强 | 较好,归零操作使信号变化明显,减少噪声影响 | 好,差分跳变和归零结合,抗干扰能力强 |
2.3 曼切斯特编码
先看上图中“曼切斯特编码”,观察如下选项
(1)1 跳变 0:
(2)0跳变为0
(3)0跳变为1
(4)1跳变为1 和
2.3.1 编码规则补充
开头总结了,观察曼切斯特编码“将一个码元分割成两部分,左边部分是高电平就是1,低电平就是0”
观察后发现,编码1,总在中间存在一个“下降沿”。编码0,中间一定存在一个“上升沿”。
按照上述两个规则,你可以手画出所有基于曼切斯特编码的电平示意图。
2.3.2 曼切斯特编码的同步优势
第一段中的截图中,可以看出,无论哪一种变化,在两个码元之间,总线电平至少跳变一次,最多跳变4次。
2.4 差分曼切斯特编码
2.4.1 编码规则
(规则1)在每一码元的开始出,有跳变的代表0,每一位开始处没有跳变的代表1
(规则2)在码元中间位置处,必定存在一个跳变
3、实际应用
理解编码的基础逻辑之后。我们结合不同的编码方式与不同的总线,谈谈不同协议的帧结构采用不同编码方式,对帧结构的影响。
CAN协议编码方式是NRZ,不归零编码方式,CAN采用的差分线与形式,有两条CAN_H与CAN_L。可以这么理解CAN_H采用NRZ编码,高电平代表1,低电平代表0。CAN_L也是同样逻辑。
总线逻辑=CAN_H&CAN_L。
大家明白了吧,当CAN-H电压被拉高,CAN_L电压被拉低。CAN_lCAN_H =1高电平。CAN-L=0。相与后的到的值为0。当CAN_H与CAN_L重叠时,CAN_H=1,CAN_L=1。所以总线逻辑也为1。
采用NRZ编码还有一个问题,就是总线电平只有两种状态,高电平和低电平。但是通讯中却有三种状态,逻辑0,逻辑1,和总线空闲状态。NRZ编码方式导致了必然有两种编码逻辑共享一种电平。比如逻辑0和总线空闲共享低电平。这将导致如果不采用特别的机制,总线上将无法分别逻辑0和总线空闲
归零码,曼切斯特编码和差分曼切斯特编码肯定不会存在这样的问题