NRZ与NRZI编码

NRZ与NRZI编码解释

RZ 编码(Return-to-zero Code),即归零编码。

在 RZ 编码中,正电平代表逻辑 1,负电平代表逻辑 0,并且,每传输完一位数据,信号返回到零电平,也就是说,信号线上会出现 3 种电平:正电平、负电平、零电平:

详解NRZI编码 - 静水流深 - 静水流深的博客

从图上就可以看出来,因为每位传输之后都要归零,所以接受者只要在信号归零后采样即可,这样就不在需要单独的时钟信号。实际上, RZ 编码就是相当于把时钟信号用归零编码在了数据之内。这样的信号也叫做自同步(self-clocking)信号。

这样虽然省了时钟数据线,但是还是有缺点的,因为在 RZ 编码中,大部分的数据带宽,都用来传输“归零”而浪费掉了。

那么,我们去掉这个归零步骤,NRZ 编码(Non-return-to-zero Code)就出现了,和 RZ 的区别就是 NRZ 是不需要归零的:

详解NRZI编码 - 静水流深 - 静水流深的博客

这样,浪费的带宽又回来了,不过又丧失宝贵的自同步特性了,貌似我们又回到了原点,其实这个问题也是可以解决的,不过待会儿再讲,先看看什么是 NRZI:

NRZI 编码(Non-Return-to-Zero Inverted Code)和 NRZ 的区别就是 NRZI 用信号的翻转代表一个逻辑,信号保持不变代表另外一个逻辑。

USB 传输的编码就是 NRZI 格式,在 USB 中,电平翻转代表逻辑 0,电平不变代表逻辑1:

详解NRZI编码 - 静水流深 - 静水流深的博客

翻转的信号本身可以作为一种通知机制,而且可以看到,即使把 NRZI 的波形完全翻转,所代表的数据序列还是一样的,对于像 USB 这种通过差分线来传输的信号尤其方便~

现在再回到那个同步问题:

确,NRZ 和 NRZI 都没有自同步特性,但是可以用一些特殊的技巧解决。比如,先发送一个同步头,内容是 0101010 的方波,让接受者通过这个同步头计算出发送者的频率,然后再用这个频率来采样之后的数据信号,就可以了。

在 USB 中,每个 USB 数据包,最开始都有个同步域(SYNC),这个域固定为 0000 0001,这个域通过 NRZI 编码之后,就是一串方波(复习下前面:NRZI 遇 0 翻转遇 1 不变),接受者可以用这个 SYNC 域来同步之后的数据信号。

   此外,因为在 USB 的 NRZI 编码下,逻辑 0 会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确。

但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑 1,经过 USB 的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个 1了。

USB 对这个问题的解决办法,就是强制插 0,也就是传说中的 bit-stuffing,如果要传输的数据中有 7 个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除 6 个连续 1 之后的 0,就可以恢复原始的数据了。

 

既然说编码,那就顺便把另一种极常用的编码也说一下把:曼彻斯特编码

曼彻斯特( Manchester )码是一种双相码。用高电平到低电平的转换边表示 0 ,而用低电平到高高电平的转换边表示 1 。

<think>好的,我需要回答用户关于不同数字信号编码方式的问题,包括NRZNRZI、曼彻斯特和差分曼彻斯特编码的工作原理及波形表示,还要提供起始电平和示例图解。首先,我需要回忆这些编码方式的基本定义和特点。 根据引用内容,NRZ是不归零编码,高电平为1,低电平为0,每个周期不归零,带宽利用率高但同步能力差。RZ是归零编码,每个数据位后归零,但用户问题中没有提到RZ,不过可能需要对比。NRZI是反向不归零编码,信号翻转表示0,不变表示1,USB2.0使用这种编码。曼彻斯特编码在中间跳变,低到高是0,高到低是1;而差分曼彻斯特则在起始跳变表示0,中间跳变仅用于同步。 接下来需要整理每个编码的工作原理、波形特征、起始电平和示例。用户可能需要每个编码的详细说明,可能还需要图解,但这里无法直接画图,可以用文字描述波形,比如用类似“高电平持续整个周期”这样的描述。 注意用户要求行内数学公式用$...$,但这里可能不太需要数学公式,更多的是信号描述,比如电压变化。不过如果有涉及数学的地方要正确使用LaTeX。例如,积分或其他数学表达式可能需要,但这里可能较少。 需要确保引用正确,比如关于曼彻斯特编码的跳变方向,引用[2]提到低到高是0,高到低是1。而差分曼彻斯特则在每个位开始时跳变表示0,否则保持,中间始终跳变用于同步,引用[3]提到曼彻斯特的跳变方向决定数据,差分曼彻斯特可能需要参考引用[2]和[3]。 要检查每个编码的起始电平是否有特定要求,比如NRZNRZI的起始电平是否影响解码,是否需要说明起始电平的默认状态。例如,NRZI可能需要知道前一个状态来确定当前是0还是1,所以起始电平可能设定为高或低,但通常可能默认高电平。 对于示例部分,可以用文本图形,比如用“高电平___”或“低___”表示,或者用类似“↑↓”表示跳变。例如,曼彻斯特编码的位中间跳变,可以用“位开始到中间低到高,然后高到低”这样的描述。 最后生成相关问题,需要围绕这些编码方式的比较、应用、优缺点等提问。例如,应用场景,同步机制,带宽需求等。 现在组织内容,确保每个编码方式分点说明,包括原理、波形、起始电平、示例,并正确引用来源。可能需要注意引用标记的位置,比如在描述曼彻斯特编码时引用[2]和[3],NRZI引用[3]等。 检查是否有遗漏的信息,比如差分曼彻斯特的详细工作原理,是否每个位开始时的跳变规则,以及中间的同步跳变。根据引用[2],差分曼彻斯特用电压跳变的不同区分1和0,可能具体是起始跳变表示0,而中间的跳变用于同步,无论数据如何都需要跳变。需要确认这些细节是否正确,可能需要结合多个引用内容。 最后确保回答结构清晰,每个编码方式单独列出,使用标题,然后相关问题部分提出相关问题。</think>### 不同数字信号编码方式解析 #### 1. **NRZ(不归零编码)** - **工作原理**:用恒定电平表示数据,高电平为1,低电平为0,每个周期结束后不归零[^3]。 - **波形特征**:电平持续整个周期,无跳变。 - **起始电平**:通常默认高或低,需约定初始状态。 - **示例**: 数据`10110`的NRZ波形: ``` 高电平______ 低__ 高______ 高______ 低__ ``` #### 2. **NRZI(反向不归零编码)** - **工作原理**:电平翻转表示0,保持表示1。例如,前一个电平为高,0会使它变为低,1则保持高[^3]。 - **波形特征**:仅在传输0时跳变,1时维持。 - **起始电平**:需预设初始电平(如高电平)。 - **示例**: 数据`01011`的NRZI波形(起始高): ``` 高↓低______↑高______ 高______ 高______ ``` #### 3. **曼彻斯特编码** - **工作原理**:**位中间跳变**,低→高表示0,高→低表示1[^2]。 - **波形特征**:每个位中间强制跳变,兼具时钟同步功能。 - **起始电平**:无特定要求,由跳变方向定义数据。 - **示例**: 数据`0110`的曼彻斯特波形: ``` 低↑高↓低______↑高↓低______ ``` #### 4. **差分曼彻斯特编码** - **工作原理**:**位起始跳变表示0**,无跳变表示1;位中间始终跳变以同步。 - **波形特征**:位起始可能跳变,中间必跳变。 - **起始电平**:需预设初始电平,后续电平根据规则变化。 - **示例**: 数据`0011`的差分曼彻斯特波形(起始高): ``` 高↓低↑高______↑低↓高______↑低↑高 ``` --- ### 对比总结 | 编码方式 | 同步能力 | 带宽需求 | 直流分量 | 复杂度 | |------------------|----------|----------|----------|--------------| | NRZ | 差 | 低 | 高 | 低 | | NRZI | 中 | 中 | 中 | 中 | | 曼彻斯特 | 好 | 高 | 低 | 高 | | 差分曼彻斯特 | 好 | 高 | 低 | 最高 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值