Encoding And Modulation
编码与调制的边界
计算机内部处理的是数字数据,但链路上传输的是信号。发送端必须把数据变成适合信道传播的信号;接收端再从信号中恢复数据。
编码通常指把数据变换为数字信号。典型场景是数字数据经过线路编码后,在数字信道上传输。
调制通常指把数据加载到模拟载波上,形成带通信号。典型场景是基带信号不能直接通过某段信道,必须用载波的振幅、频率或相位变化来承载数据。
| 数据 | 信号 | 变换方式 |
|---|---|---|
| 数字数据 | 数字信号 | 编码 |
| 数字数据 | 模拟信号 | 调制 |
| 模拟数据 | 数字信号 | 编码 |
| 模拟数据 | 模拟信号 | 调制 |
常用编码方式
线路编码决定 0 和 1 怎样表现为电平变化。常见编码方式如下:
不归零制
不归零制 NRZ 在一个码元期间保持某个电平,不回到零电平。它实现简单、带宽利用率较高,编码效率最高。但长时间连续 0 或连续 1 会导致接收端难以从信号中提取时钟。
反向不归零制
反向不归零制 NRZI 不直接用高电平/低电平表示 0 和 1,而是用码元边界处是否跳变表示数据。常见约定是:
- 码元开始处发生跳变表示
1。 - 码元开始处不发生跳变表示
0。
NRZI 关注“变不变”,不是关注绝对电平,因此比普通 NRZ 更不怕线路极性反接。但如果数据中长时间连续出现不触发跳变的比特,仍然会缺少同步信息,所以实际系统常配合额外编码使用。
归零制
归零制 RZ 在每个码元期间都会回到零电平。它比不归零制更容易帮助接收端同步,但每个码元内部多了一次电平变化,需要更宽的频带。
曼彻斯特编码
曼彻斯特编码在每个码元中间发生一次跳变,这个跳变既表示数据,也提供时钟同步。
低到高的跳变,和高到低的跳变所表示的是0还是1需要具体问题具体分析。
曼彻斯特编码的优点是自同步能力强,缺点是每个比特至少需要一次中间跳变,所需频带较宽。
差分曼彻斯特编码
差分曼彻斯特编码也在每个码元中间跳变,用中间跳变提供同步;数据由码元开始处是否发生跳变表示。常见约定是:
- 码元开始处有跳变表示
0。 - 码元开始处无跳变表示
1。
它关注是否变化,而不是绝对电平,因此对极性反转不敏感。
这些编码方式不是某一种线缆的固定属性,而是链路层/物理层标准对信号的约定。典型例子是:早期 10Mb/s 以太网使用曼彻斯特编码;令牌环曾使用差分曼彻斯特编码;USB 等系统中常见 NRZI 与位填充配合使用。线缆只提供传输介质,真正决定波形含义的是通信标准。
带通调制
若信道不能直接传输低频分量或直流分量,发送端可以把基带信号调制到较高频率的载波上。带通调制通过改变载波参数承载信息。
| 调制方式 | 改变什么 | 直观理解 |
|---|---|---|
| 调幅 AM | 振幅 | 波峰高低变化 |
| 调频 FM | 频率 | 波形疏密变化 |
| 调相 PM | 相位 | 波形位置发生跳变 |
基本调制只改变一个参数。为了提高数据率,实际通信常组合多个参数,例如同时改变振幅和相位。
QAM 与星座图
QAM 是正交振幅调制。它把两个相互正交的载波分量组合起来,同时利用振幅和相位承载信息。
星座图上的每个点表示一种码元状态。若星座图有 $M$ 个点,则每个码元最多表示:
$$
\log_2 M \text{ bit}
$$
例如 QAM-16 有 $16$ 个点,每个码元可表示:
$$
\log_2 16=4\text{ bit}
$$
格雷码常用于星座点标号。它让相邻星座点的比特编号只差 1 位。这样做不能保证所有差错都只错 1 bit;它降低的是最常见的相邻点误判的代价。噪声较小时,接收点更容易落到相邻星座点,而不是跨越很远落到非相邻点,所以相邻点只差 1 位可以减少平均比特错误数。
码元、波特和速率的关系
$$
R=B\log_2 (m\times n)
$$
其中:
- $R$ 是数据传输速率,单位 b/s。
- $B$ 是码元传输速率,单位 Baud。
- $m$ 是相位数。
- $n$ 是每个相位的振幅数。
提高数据传输速率有两条路:
- 提高码元传输速率 $B$。
- 增加码元状态数 $M$,让每个码元携带更多 bit。
第二条路指的是在同样的码元速率下,把星座点做得更多。例如从 QPSK 的 4 个状态增加到 QAM-16 的 16 个状态,每个码元携带的 bit 数从 $2$ 增加到 $4$。代价是星座点之间更近,接收端更难区分相邻状态,因此对信噪比和调制解调技术要求更高。