NRZ、NRZI编码

RZ 编码(Return-to-zero Code):归零编码

在 RZ 编码中,正电平代表逻辑 1,负电平代表逻辑 0,每传输完一位数据,信号返回到零电平。

信号线上会出现 3 种电平正电平负电平零电平

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

在 RZ 编码中,大部分的数据带宽,都用来传输“归零”而浪费

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

如图所示,浪费的带宽又回来了,不过又丧失了自同步特性。

 NRZI:

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

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

翻转的信号本身可以作为一种通知机制,可以看到,即使把 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,就可以恢复原始的数据了。

### NRZ编码的定义 NRZ(Non-Return-to-Zero)编码是一种简单的数字信号编码方式,其中高电平通常用来表示二进制值“1”,低电平用于表示二进制值“0”[^2]。这种编码方法的特点在于它不会返回到零电平状态,因此被称为“非归零”。 --- ### NRZ编码的实现 在NRZ编码中,每一位数据都由固定的持续时间表示,在这段时间内,信号保持恒定的电平。具体来说: - 当输入数据为“1”时,输出信号维持在一个固定高的电压水平。 - 当输入数据为“0”时,输出信号维持在一个固定低的电压水平。 以下是基于Python的一个简单实现示例,展示如何将二进制字符串转换为NRZ编码波形: ```python import matplotlib.pyplot as plt def nrz_encode(binary_data): signal = [] for bit in binary_data: if bit == '1': signal.append(1) # High level for '1' elif bit == '0': signal.append(-1) # Low level for '0' return signal binary_input = "10011010" encoded_signal = nrz_encode(binary_input) plt.step(range(len(encoded_signal)), encoded_signal, where='post') plt.ylim([-2, 2]) plt.title("NRZ Encoded Signal") plt.xlabel("Time (Bit Intervals)") plt.ylabel("Amplitude") plt.grid(True) plt.show() ``` 此代码片段展示了如何生成一个基本的NRZ波形并将其可视化。 --- ### NRZ编码的应用场景 NRZ编码因其简单性和高效性被广泛应用于多种通信领域。主要应用场景包括但不限于以下几个方面: 1. **磁盘驱动器读写操作** 在硬盘和其他存储设备中,NRZ编码常用于记录和检索数据,因为它能够有效地利用介质的空间[^3]。 2. **光纤通信系统** 尽管更复杂的编码方案(如8b/10b或64b/66b)也常见于高速光纤链路中,但在某些情况下仍然会采用基础的NRZ编码作为初始阶段的选择。 3. **串行接口标准** RS-232 和早期版本的一些串行总线协议使用了类似的非归零技术来传输信息流[^1]。 需要注意的是,尽管NRZ具有较高的频谱效率,但它缺乏内置同步能力以及对抗噪声的能力较弱等问题使其逐渐被其他改进型编码所取代,特别是在现代高性能需求环境中。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值