Appearance
通信原理:调制、编码、信道
概念
通信的全部问题可以压缩成一句话:在一条会变坏的信道上,把信息尽可能快地搬过去。
围绕这句话只有三件事:
| 环节 | 要解决的问题 | 手段 |
|---|---|---|
| 调制 | 信息怎么"挂"到载波上 | AM/FM、ASK/FSK/PSK/QAM、OFDM |
| 编码 | 怎么加冗余让错误可纠正、怎么压缩让信息更短 | 汉明码、卷积码、LDPC、Turbo / 信源压缩 |
| 信道 | 搬的过程中会坏成什么样 | 噪声、衰落、干扰、多径 |
三者不是并列的,而是被一条公式串起来的:香农容量告诉你这条信道最多能传多少;调制决定你离这个上限有多近;编码决定你能承受多大的噪声。
与电子通信分支内部的关系:上一章设计的滤波器,在通信系统里到处都是——发射端用它限制带外辐射、接收端用它选频和抗混叠;而 采样定理 则决定了整个数字通信链路的入口。
原理
一、信息量与信道容量:天花板由谁定
无噪声的哈特利公式(先定上限的一半):
C = 2·B·log2(M) B 是带宽,M 是每符号的离散电平数有噪声的香农公式(这才是真实的天花板):
C = B · log2(1 + S/N) bit/s香农公式的三个读法,都很反直觉:
- 带宽和信噪比可以互换:带宽翻倍、信噪比掉到 1/4,容量不变。所有的扩频技术都建立在这条上;
- 信噪比要指数级增长才能换线性增长:
S/N从 1000 涨到 10000(+10 dB),容量只涨约 33%; - 信噪比可以无限小吗?不能:
S/N → 0时容量趋于 0。存在一个不可逾越的功率下限(Eb/N0 > −1.59 dB),这一点和调制方式无关。
| 带宽 B | 信噪比 S/N | 线性信噪比 | 容量 C |
|---|---|---|---|
| 3100 Hz | 30 dB | 1000.0 | 30.90 kbps |
| 6000 Hz | 40 dB | 10000.0 | 79.73 kbps |
| 1 MHz | 20 dB | 100.0 | 6.66 Mbps |
| 20 MHz | 10 dB | 10.0 | 69.19 Mbps |
| 20 MHz | 30 dB | 1000.0 | 199.34 Mbps |
第一行就是拨号上网的宿命:话音频带 3100 Hz、信噪比 30 dB → 30.90 kbps。当年那个 33.6 kbps 的"极限速率"就卡在这——再好的调制方式也翻不过香农线。
二、调制:把比特变成波形
模拟调制三兄弟:
| 方式 | 改变什么 | 带宽 | 抗噪 |
|---|---|---|---|
| AM | 幅度 | 2·fm | 差 |
| FM | 频率 | 2(Δf + fm)(卡森公式) | 好(有门限效应) |
| PM | 相位 | 与 FM 相近 | 好 |
数字调制的核心概念是星座图:把 k 个比特映射成复平面上的 M = 2^k 个点。
| 调制方式 | 每符号比特 k | 频谱效率 | 到达 BER 10⁻⁵ 所需 Eb/N0 |
|---|---|---|---|
| BPSK | 1 | 1 bit/s/Hz | 9.59 dB |
| QPSK | 2 | 2 bit/s/Hz | 9.59 dB |
| 16QAM | 4 | 4 bit/s/Hz | 13.43 dB |
| 64QAM | 6 | 6 bit/s/Hz | 17.79 dB |
| 256QAM | 8 | 8 bit/s/Hz | 22.50 dB |
这张表是本章最重要的一张:BPSK 和 QPSK 所要求的信噪比完全一样(QPSK 只是用两个正交载波各传一路 BPSK),所以工程上几乎没有理由只用 BPSK。再往上每提高一倍阶数,就要多付 4 dB 左右的信噪比。
固定 20 MHz 带宽时(滚降系数 α = 0.25):
| 调制 | 符号率 | 比特率 |
|---|---|---|
| BPSK | 32 Msym/s | 32 Mbps |
| QPSK | 32 Msym/s | 64 Mbps |
| 16QAM | 32 Msym/s | 128 Mbps |
| 64QAM | 32 Msym/s | 192 Mbps |
| 256QAM | 32 Msym/s | 256 Mbps |
同样 20 MHz:BPSK 只能装 32 Mbps,256QAM 能装 256 Mbps——速率涨 8 倍,代价是所需信噪比从 9.59 dB 涨到 22.50 dB,多要 12.91 dB。这就是"频谱效率"和"功率效率"之间的全部权衡。
所以真实系统永远同时用几档:靠近基站的用户用 256QAM,边缘用户退到 QPSK——这就是自适应调制编码(AMC)。
三、信道与误码率:Eb/N0 才是公平的尺子
信道里发生的事分三类:
| 损伤 | 来源 | 表现 | 对策 |
|---|---|---|---|
| 噪声 | 热噪声([电子与通信](/elec/21-rf.md) 会算灵敏度) | 随机错码 | 增大功率、编码 |
| 衰落 | 多径、遮挡 | 信号忽强忽弱 | 分集、均衡、交织 |
| 干扰 | 邻道、同频 | 持续偏移 | 滤波、功率控制 |
衡量"信号有多强"必须用 Eb/N0 而不是 S/N,因为两者差一个"每比特能量与符号率的关系":
Eb/N0 = (S/N) · (B / Rb) Rb 是比特率这意味着:阶数越高,同样的 S/N 下 Eb/N0 越低(因为 Rb 大了)。这正是上表"高阶调制需要更大 Eb/N0"的来处。
举例:B = 20 MHz、Rb = 256 Mbps、S/N = 30 dB,则 Eb/N0 = 1000 × 20/256 = 78.1(18.93 dB)——这个值小于 256QAM 要求的 22.50 dB,所以这组参数根本跑不起来。调制的选择和功率、带宽必须一起算,不能分开拍脑袋。
四、信道编码:用冗余换可靠性
基本参数就三个:
码长 n 信息位 k 码率 R = k/n 冗余 = 1 − R最小汉明距离 d_min 决定能力:
| 能力 | 条件 |
|---|---|
检测 e 位错 | d_min ≥ e + 1 |
纠正 t 位错 | d_min ≥ 2t + 1 |
同时纠 t 检 e(e > t) | d_min ≥ t + e + 1 |
汉明 (7,4) 码是最经典的例子:
| 项目 | 数值 |
|---|---|
| 码长 / 信息位 | 7 / 4 |
码率 k/n | 0.571429 |
| 冗余占比 | 42.86% |
最小距离 d_min | 3 |
可纠位数 t | 1 |
| 可检位数 | 2 |
| 单错图案数(1 + n) | 8 |
可用伴随式 2^(n−k) | 8 |
"8 对 8"就是汉明码精妙的全部:7 个"错了 1 位"的位置加 1 个"没错",正好等于 3 个校验位能给出的 8 种伴随式。每一个伴随式的值直接就是出错的位置,不需要查表。所以汉明码是"能纠 1 位"的最优线性码——再多纠一位,冗余就不够了。
代价有两个:① 码率只有 57.14%(要传 4 个信息位得发 7 位);② 只能对付单比特错,双比特错会被"纠"成另一个合法码字却完全不报错(示例 1 会把这个静默失败演示出来)。要同时纠 1 检 2,得再加一个总校验位,变成 SECDED 的 (8,4) 码。
更强的手段:卷积码(Viterbi 译码)、RS 码(对突发错误)、LDPC 与 Turbo(接近香农限)。香农第二定理保证了"只要 R < C,就一定存在编码让误码率任意小"——但它不告诉你码怎么构造,这就是编码理论几十年在干的事。
五、奈奎斯特第一准则与滚降:带宽、符号率、比特率
无码间串扰(ISI)的条件是频谱满足"折叠后为常数",最典型的就是理想低通——此时
符号率 Rs = 2·B 即 每 Hz 传 2 个符号但理想低通物理上做不出来,所以实际用升余弦(RC)或根升余弦(RRC),引入滚降系数 α:
占用带宽 B = (1 + α)·Rs / 2 即 Rs = 2B / (1 + α)| 滚降系数 α | 20 MHz 里的 64QAM 符号率 | 比特率 |
|---|---|---|
| 0.00(理想) | 40 Msym/s | 240 Mbps |
| 0.25 | 32 Msym/s | 192 Mbps |
| 0.35 | 30 Msym/s | 178 Mbps |
| 0.50 | 27 Msym/s | 160 Mbps |
α 是"可实现性"的价格:α = 0 理论上最省带宽,但滤波器要用无限阶才能实现;α 越大过渡带越宽越好做,代价是同样带宽里能塞的符号率变少(α = 0.25 只剩理想值的 80%)。
一个真实算例(有线电视 DVB-C):符号率 6.90 Msym/s、α = 0.15 → 占用带宽 3.9675 MHz;256QAM 原始 55.2 Mbps,取 7/8 信道编码后 48.3 Mbps。这 3.9675 MHz 就是塞进一个 8 MHz 模拟电视频道的余量所在。
六、复用与多址:多个人怎么共用一条信道
| 方式 | 切分维度 | 典型例子 | 关键弱点 |
|---|---|---|---|
| FDM / FDMA | 频率 | 广播、老式模拟电话 | 需要保护带,浪费频谱 |
| TDM / TDMA | 时间 | PCM 电话、2G GSM | 必须全网同步 |
| CDMA | 码字 | 3G WCDMA / CDMA2000 | 远近效应,需要功率控制 |
| OFDM | 正交子载波 | 4G LTE、Wi-Fi、DVB | 峰均比高 |
OFDM 值得单独说一句:LTE 的 20 MHz 信道切成 1200 个 15 kHz 子载波,每个子载波可以独立选调制阶数,而且子载波之间的正交性靠 FFT 实现——所以 DSP 里那套 FFT 是 4G/5G 基带的计算核心。这也解释了为什么 OFDM 的发明要等到 FFT 芯片便宜之后。
示例
例 1:汉明 (7,4) 码的编码、纠错与静默失败(C)
这段代码做三件事:把 4 位数据编成 7 位码字(校验位放在 1、2、4 号位置)、注入每一个单比特错并验证都能纠回来、然后故意注入一个双比特错,看它怎么被"纠"成一个错误但合法的新码字。
/* 汉明 (7,4) 码:编码、单比特纠错,以及双比特错的静默失败 */
#include <stdio.h>
static void encode(int d1, int d2, int d3, int d4, int *c)
{
c[3] = d1;
c[5] = d2;
c[6] = d3;
c[7] = d4;
c[1] = c[3] ^ c[5] ^ c[7]; /* p1 覆盖 1 3 5 7 */
c[2] = c[3] ^ c[6] ^ c[7]; /* p2 覆盖 2 3 6 7 */
c[4] = c[5] ^ c[6] ^ c[7]; /* p4 覆盖 4 5 6 7 */
}
static int syndrome(const int *c)
{
int s1 = c[1] ^ c[3] ^ c[5] ^ c[7];
int s2 = c[2] ^ c[3] ^ c[6] ^ c[7];
int s4 = c[4] ^ c[5] ^ c[6] ^ c[7];
return s4 * 4 + s2 * 2 + s1; /* 伴随式的值就是出错位置 */
}
static void code_str(const int *c, char *out)
{
for (int i = 1; i <= 7; i++) {
out[i - 1] = (char) ('0' + c[i]);
}
out[7] = '\0';
}
int main(void)
{
int c[8];
char s[8];
static const int data[4][4] = {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 1, 1}, {1, 1, 1, 1}};
printf("%-8s %-10s\n", "data", "codeword");
for (int i = 0; i < 4; i++) {
encode(data[i][0], data[i][1], data[i][2], data[i][3], c);
code_str(c, s);
printf("%d%d%d%d %-10s\n", data[i][0], data[i][1], data[i][2], data[i][3], s);
}
encode(1, 0, 1, 1, c);
code_str(c, s);
printf("\nbase codeword = %s\n", s);
printf("%-8s %-10s %-10s\n", "flip bit", "syndrome", "recovered");
int ok = 0;
for (int p = 1; p <= 7; p++) {
int t[8];
for (int i = 1; i <= 7; i++) {
t[i] = c[i];
}
t[p] ^= 1; /* 注入单比特错 */
int syn = syndrome(t);
if (syn >= 1 && syn <= 7) {
t[syn] ^= 1; /* 按伴随式纠正 */
}
char r[8];
code_str(t, r);
int good = (syn == p) && (r[0] == s[0] && r[1] == s[1] && r[2] == s[2] && r[3] == s[3]
&& r[4] == s[4] && r[5] == s[5] && r[6] == s[6]);
if (good) {
ok++;
}
printf("%-8d %-10d %-10s\n", p, syn, good ? "yes" : "no");
}
printf("single-bit errors corrected: %d of 7\n", ok);
int t2[8];
for (int i = 1; i <= 7; i++) {
t2[i] = c[i];
}
t2[1] ^= 1;
t2[2] ^= 1; /* 注入双比特错 */
int sy = syndrome(t2);
t2[sy] ^= 1;
char r2[8], d2[5];
code_str(t2, r2);
d2[0] = (char) ('0' + t2[3]);
d2[1] = (char) ('0' + t2[5]);
d2[2] = (char) ('0' + t2[6]);
d2[3] = (char) ('0' + t2[7]);
d2[4] = '\0';
printf("\ntwo-bit error at 1,2 -> syndrome = %d -> decoder flips bit %d\n", sy, sy);
printf("result = %s (data %s, original %s)\n", r2, d2, "1011");
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
data codeword
0000 0000000
0001 1101001
1011 0110011
1111 1111111
base codeword = 0110011
flip bit syndrome recovered
1 1 yes
2 2 yes
3 3 yes
4 4 yes
5 5 yes
6 6 yes
7 7 yes
single-bit errors corrected: 7 of 7
two-bit error at 1,2 -> syndrome = 3 -> decoder flips bit 3
result = 1000011 (data 0011, original 1011)读数:
- 4 个数据字编出的码字:
0000 → 0000000、0001 → 1101001、1011 → 0110011、1111 → 1111111。每一个码字里 1 的个数都是偶数且三个校验组各自满足偶校验——这是校验位算对了的最快检验。 - 注入任意单比特错,伴随式的值就等于出错位置(1→1,2→2,…,7→7),7 个全对。伴随式不需要查表,它的数值本身就是答案——这就是汉明码的设计目标。
- 双比特错(1、2 位)会得到伴随式 3,译码器老老实实把第 3 位翻转,结果得到
1000011——一个离原码字距离正好 3 的合法码字。译码器认为"我修好了",交给上层的数据却是0011(原来1011)。这就是静默失败:不报错、却错了。
例 2:容量、调制阶数、汉明码、滚降一次算完(Python)
C 段演示了编码的机制。这一段把整章的数量关系补齐:香农容量表、各调制方式所需的 Eb/N0(用 Q 函数反解,不是抄表)、汉明码的参数账、滚降系数对符号率与比特率的影响。
import math
def pad(s, w):
dw = sum(2 if ord(c) > 0x2000 else 1 for c in str(s))
return str(s) + " " * max(0, w - dw)
def table(head, rows, gap=2):
data = [[str(c) for c in r] for r in rows]
w = [max([sum(2 if ord(c) > 0x2000 else 1 for c in str(head[i]))]
+ [sum(2 if ord(c) > 0x2000 else 1 for c in r[i]) for r in data]) + gap
for i in range(len(head))]
print(" " + "".join(pad(head[i], w[i]) for i in range(len(head))))
for r in data:
print(" " + "".join(pad(r[i], w[i]) for i in range(len(head))))
def qfunc(x):
return 0.5 * math.erfc(x / math.sqrt(2.0))
def ebn0_db_for(pb_target, m):
lo, hi = 1e-3, 1e7
for _ in range(300):
mid = math.sqrt(lo * hi)
if m == 2:
pb = qfunc(math.sqrt(2.0 * mid))
else:
k = math.log2(m)
pb = (4.0 / k) * (1.0 - 1.0 / math.sqrt(m)) \
* qfunc(math.sqrt(3.0 * k / (m - 1.0) * mid))
if pb > pb_target:
lo = mid
else:
hi = mid
return 10 * math.log10(math.sqrt(lo * hi))
print("=== 1. 信道容量:香农公式把带宽、信噪比、速率三个量锁在一起 ===")
rows = []
for b, snr in ((3100.0, 30.0), (6000.0, 40.0), (1e6, 20.0), (20e6, 10.0), (20e6, 30.0)):
c = b * math.log2(1 + 10 ** (snr / 10.0))
bw = "%.0f Hz" % b if b < 1e6 else "%.0f MHz" % (b / 1e6)
rows.append([bw, "%.0f dB" % snr, "%.1f" % (10 ** (snr / 10.0)),
"%.2f kbps" % (c / 1000) if c < 1e6 else "%.2f Mbps" % (c / 1e6)])
table(["带宽 B", "信噪比 S/N", "线性信噪比", "容量 C"], rows)
print(" 拨号上网那 33.6 kbps 的天花板就在这里:B = 3100 Hz、S/N = 30 dB 时 C = 30.90 kbps,")
print(" 再怎么改调制方式也翻不过去 —— 唯一的出路是加大带宽或提高信噪比。")
print()
print("=== 2. 调制阶数:频谱效率与功率效率的互换 ===")
bt = 20e6
alpha = 0.25
rs = 2 * bt / (1 + alpha)
rows = []
for m, name in ((2, "BPSK"), (4, "QPSK"), (16, "16QAM"), (64, "64QAM"), (256, "256QAM")):
k = math.log2(m)
rows.append([name, "%.0f" % k, "%.0f Msym/s" % (rs / 1e6),
"%.0f Mbps" % (rs * k / 1e6), "%.2f" % ebn0_db_for(1e-5, m)])
table(["调制方式", "每符号比特 k", "符号率(α = 0.25)", "比特率", "BER 1e-5 所需 Eb/N0"], rows)
print(" 同样 20 MHz:BPSK 只能装 32 Mbps,256QAM 能装 256 Mbps —— 但所需信噪比从 9.59 dB 涨到 22.50 dB,")
print(" 多装 8 倍速率的代价是多要 12.91 dB 信噪比,这就是调制阶数选择的全部权衡。")
print()
print("=== 3. 信道编码:汉明 (7,4) 为什么正好能纠 1 位 ===")
n, k = 7, 4
rdm = 3
rows = [
["码长 n", "%d" % n],
["信息位 k", "%d" % k],
["码率 k/n", "%.6f" % (k / n)],
["冗余占比", "%.2f%%" % ((n - k) / n * 100)],
["最小汉明距离 d_min", "%d" % rdm],
["可纠正位数 t = floor((d-1)/2)", "%d" % ((rdm - 1) // 2)],
["可检错位数 d-1", "%d" % (rdm - 1)],
["单错图案数 1 + n", "%d" % (1 + n)],
["可用伴随式 2^(n-k)", "%d" % (2 ** (n - k))],
]
table(["项目", "数值"], rows)
print(" 16 个码字之间最小距离 3:任意一个单比特错都落在某个码字周围半径 1 的球内,且这些球互不相交,")
print(" 所以 7 个错位 + 1 个'没出错'共 8 种情况能一一对应到 8 个伴随式 —— 纠 1 位刚好够用,多一位就不够。")
print()
print("=== 4. 奈奎斯特第一准则与滚降:带宽换符号率 ===")
rows = []
for a in (0.0, 0.25, 0.35, 0.5):
r = 2 * bt / (1 + a)
rows.append(["%.2f" % a, "%.2f MHz" % (bt / 1e6), "%.0f Msym/s" % (r / 1e6),
"%.0f Mbps" % (r * 6 / 1e6)])
table(["滚降系数 α", "占用带宽 B", "64QAM 符号率 = 2B/(1+α)", "64QAM 比特率"], rows)
dvbc_rs = 6.9e6
dvbc_b = (1 + 0.15) * dvbc_rs / 2
rows = [
["DVB-C 符号率", "6.90 Msym/s"],
["滚降系数 α", "0.15"],
["占用带宽 B = (1+α)·Rs/2", "%.4f MHz" % (dvbc_b / 1e6)],
["256QAM 原始比特率", "%.1f Mbps" % (dvbc_rs * 8 / 1e6)],
["取 7/8 信道编码后", "%.1f Mbps" % (dvbc_rs * 8 * 7 / 8 / 1e6)],
]
table(["有线电视(DVB-C)算例", "数值"], rows)
print(" α = 0 就是理想奈奎斯特带宽(B = Rs/2),但物理上做不出理想低通,必然过冲;")
print(" α 越大过渡带越宽、越好实现,代价是同样带宽里能塞的符号率变少:")
print(" α = 0.25 时符号率只剩理想值的 80%(40 → 32 Msym/s),比特率从 240 掉到 192 Mbps。")
print()
print("=== 5. 复用与多址:多个人怎么共用一条信道 ===")
rows = [["方式", "切分维度", "典型例子", "关键弱点"],
["FDM / FDMA", "频率", "广播、老式模拟电话", "需要保护带,浪费频谱"],
["TDM / TDMA", "时间", "PCM 电话、2G GSM", "必须全网同步"],
["CDMA", "码字", "3G WCDMA / CDMA2000", "远近效应,需要功率控制"],
["OFDM", "正交子载波", "4G LTE、Wi-Fi、DVB", "峰均比高"]]
table(rows[0], rows[1:])
print(" LTE 的 20 MHz 信道切成 1200 个 15 kHz 子载波,每个子载波上都可以独立选调制阶数:")
print(" 靠近基站的用户用 256QAM,边缘用户退到 QPSK —— 这就是“自适应调制编码”能同时兼顾两种需求的原因。")
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
=== 1. 信道容量:香农公式把带宽、信噪比、速率三个量锁在一起 ===
带宽 B 信噪比 S/N 线性信噪比 容量 C
3100 Hz 30 dB 1000.0 30.90 kbps
6000 Hz 40 dB 10000.0 79.73 kbps
1 MHz 20 dB 100.0 6.66 Mbps
20 MHz 10 dB 10.0 69.19 Mbps
20 MHz 30 dB 1000.0 199.34 Mbps
拨号上网那 33.6 kbps 的天花板就在这里:B = 3100 Hz、S/N = 30 dB 时 C = 30.90 kbps,
再怎么改调制方式也翻不过去 —— 唯一的出路是加大带宽或提高信噪比。
=== 2. 调制阶数:频谱效率与功率效率的互换 ===
调制方式 每符号比特 k 符号率(α = 0.25) 比特率 BER 1e-5 所需 Eb/N0
BPSK 1 32 Msym/s 32 Mbps 9.59
QPSK 2 32 Msym/s 64 Mbps 9.59
16QAM 4 32 Msym/s 128 Mbps 13.43
64QAM 6 32 Msym/s 192 Mbps 17.79
256QAM 8 32 Msym/s 256 Mbps 22.50
同样 20 MHz:BPSK 只能装 32 Mbps,256QAM 能装 256 Mbps —— 但所需信噪比从 9.59 dB 涨到 22.50 dB,
多装 8 倍速率的代价是多要 12.91 dB 信噪比,这就是调制阶数选择的全部权衡。
=== 3. 信道编码:汉明 (7,4) 为什么正好能纠 1 位 ===
项目 数值
码长 n 7
信息位 k 4
码率 k/n 0.571429
冗余占比 42.86%
最小汉明距离 d_min 3
可纠正位数 t = floor((d-1)/2) 1
可检错位数 d-1 2
单错图案数 1 + n 8
可用伴随式 2^(n-k) 8
16 个码字之间最小距离 3:任意一个单比特错都落在某个码字周围半径 1 的球内,且这些球互不相交,
所以 7 个错位 + 1 个'没出错'共 8 种情况能一一对应到 8 个伴随式 —— 纠 1 位刚好够用,多一位就不够。
=== 4. 奈奎斯特第一准则与滚降:带宽换符号率 ===
滚降系数 α 占用带宽 B 64QAM 符号率 = 2B/(1+α) 64QAM 比特率
0.00 20.00 MHz 40 Msym/s 240 Mbps
0.25 20.00 MHz 32 Msym/s 192 Mbps
0.35 20.00 MHz 30 Msym/s 178 Mbps
0.50 20.00 MHz 27 Msym/s 160 Mbps
有线电视(DVB-C)算例 数值
DVB-C 符号率 6.90 Msym/s
滚降系数 α 0.15
占用带宽 B = (1+α)·Rs/2 3.9675 MHz
256QAM 原始比特率 55.2 Mbps
取 7/8 信道编码后 48.3 Mbps
α = 0 就是理想奈奎斯特带宽(B = Rs/2),但物理上做不出理想低通,必然过冲;
α 越大过渡带越宽、越好实现,代价是同样带宽里能塞的符号率变少:
α = 0.25 时符号率只剩理想值的 80%(40 → 32 Msym/s),比特率从 240 掉到 192 Mbps。
=== 5. 复用与多址:多个人怎么共用一条信道 ===
方式 切分维度 典型例子 关键弱点
FDM / FDMA 频率 广播、老式模拟电话 需要保护带,浪费频谱
TDM / TDMA 时间 PCM 电话、2G GSM 必须全网同步
CDMA 码字 3G WCDMA / CDMA2000 远近效应,需要功率控制
OFDM 正交子载波 4G LTE、Wi-Fi、DVB 峰均比高
LTE 的 20 MHz 信道切成 1200 个 15 kHz 子载波,每个子载波上都可以独立选调制阶数:
靠近基站的用户用 256QAM,边缘用户退到 QPSK —— 这就是“自适应调制编码”能同时兼顾两种需求的原因。四条结论:
- 香农线是硬天花板:3100 Hz / 30 dB 只有 30.90 kbps;20 MHz / 30 dB 能到 199.34 Mbps。同一条公式,差了四个数量级。
- 调制阶数的价格表可以自己算出来:用
Pb ≈ (4/k)(1−1/√M)·Q(√(3k/(M−1)·Eb/N0))反解 BER10⁻⁵,得到 BPSK/QPSK 9.59 dB、16QAM 13.43 dB、64QAM 17.79 dB、256QAM 22.50 dB。BPSK 与 QPSK 完全相同——所以 BPSK 在实际系统里几乎绝迹。 - 汉明码的"8 对 8"是可以数的:单错图案 8 个(含"没错")对 8 个伴随式,刚好够用、一位不剩;码率 57.14%、冗余 42.86%。
- 滚降系数是"可实现性"的价格:α 从 0 加到 0.50,20 MHz 里的 64QAM 符号率从 40 掉到 27 Msym/s、比特率从 240 掉到 160 Mbps。DVB-C 用 α = 0.15 把 55.2 Mbps(含 7/8 编码后 48.3 Mbps)塞进 3.9675 MHz。
考点
考点
1. 两条容量公式
- 哈特利(无噪声):
C = 2B·log2(M)。 - 香农:
C = B·log2(1 + S/N);S/N要用线性值,题目给 dB 必须先换算。 - 带宽与信噪比可互换(带宽翻倍、功率降到 1/4,容量不变)。
- 功率下限:
Eb/N0 > −1.59 dB(ln2),与调制方式无关。
2. 调制与星座
- M 进制每符号
k = log2 M个比特;频谱效率kbit/s/Hz。 - BPSK 与 QPSK 所需
Eb/N0相同(9.59 dB @ BER10⁻⁵);16QAM 13.43、64QAM 17.79、256QAM 22.50 dB。 - 星座图上点越密 → 同样噪声下越容易跨判,所以要更大功率。
- 格雷编码让相邻星座点只差 1 比特,最坏情况误符号只错 1 比特。
3. 信道编码(高频)
R = k/n;d_min决定能力:纠t位需d_min ≥ 2t + 1,检e位需d_min ≥ e + 1。- 汉明 (7,4):
d_min = 3、纠 1 位、码率 4/7 = 0.571429;单错图案 8 个 = 伴随式 8 种。 - 汉明码不能同时"纠 1 检 2"——那是 SECDED (8,4) 的活。
- 香农第二定理:
R < C时存在任意低误码率的编码,但不告诉你怎么构造。
4. 奈奎斯特第一准则与滚降(高频)
- 无 ISI 条件;理想低通时
Rs = 2B,实际用升余弦:B = (1+α)·Rs/2,Rs = 2B/(1+α)。 - α 越大越好实现、越费带宽:α = 0.25 时符号率只有理想值的 80%。
- 比特率
Rb = Rs · log2 M。
5. 复用与多址
FDM/FDMA(频率)、TDM/TDMA(时间)、CDMA(码字)、OFDM(正交子载波)。OFDM 靠 FFT 实现子载波正交,是 LTE / Wi-Fi / DVB 的公共底座。
6. 易错点清单
- 直接把 dB 当线性值代进香农公式:必须
10^(dB/10)。 - 忘记
Eb/N0 = (S/N)(B/Rb),把S/N和Eb/N0混用。 - 以为"高阶调制只要信噪比够就能一直提速率":香农上限还在,而且
Eb/N0有硬下限。 - 以为汉明码能纠 2 位:只有
d_min = 3,纠 1 位,双错会静默误纠。 - 把滚降系数当成"多占带宽的百分比"而不看它压低了符号率:
B = (1+α)Rs/2是等号,不是约等于。 - 算容量时忘了
M(哈特利公式里)和S/N(香农公式里)是两个不同的公式,一个有噪声一个没有。
小结
- 香农公式是整个通信的天花板:
C = B·log2(1 + S/N)。带宽与信噪比可互换,但功率有不可逾越的下限(Eb/N0 > −1.59 dB)。 - 调制是"频谱效率与功率效率的互换":BPSK 到 256QAM,速率涨 8 倍、
Eb/N0多要 12.91 dB;BPSK 与 QPSK 代价相同,所以前者几乎被淘汰。 - 信道编码用冗余换可靠性,
d_min定能力;汉明 (7,4) 用 8 个伴随式刚好覆盖 8 个单错图案,码率 57.14%,代价是双错会静默误纠。 - 奈奎斯特第一准则 + 滚降系数给出带宽与符号率的换算:
Rs = 2B/(1+α);α 是"可实现性"的价格。 - 复用四方式里 OFDM 最有代表性:靠 FFT 让子载波正交,是 4G/5G/Wi-Fi 的共同底座——这就是 DSP 与通信的交汇点。
回到分支:上一章解决了"滤波器怎么造",这一章把滤波器放回系统里——发射端用滤波器限制带外辐射、接收端用它选频抗干扰,而 Eb/N0 与灵敏度这两笔账最终要靠 微波与射频基础 的链路预算来兑现。同时,本章所有容量与编码的讨论都建立在"信号已经被正确采样"这个前提上,而那个前提就是下一章的全部内容。
和主线的交汇在物理层:计算机网络 的奈奎斯特与香农定理,本质就是本章第一、二节的公式换了个说法。前置数学仍是 复变函数与积分变换。
这一章回答的是"信息怎么在坏信道上高效且可靠地传过去";下一章回到一切的最前面——连采样这一步都做错,后面全都白费。
下一篇:采样定理:为什么 44.1kHz
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。