我们终于来到了卷积码最激动人心的部分——译码,以及整个差错控制编码的终极话题——调制与编码的权衡。后半部分内容,不仅包含了卷积码的"灵魂"——维特比译码,还通过详尽的实例展示了硬判决和软判决的区别,并引入了"凿孔码"这一灵活调整码率的先进技术。最后,通过几个设计案例,深刻揭示了在真实系统设计中,编码和调制是如何相互影响、相互制约的。
这份笔记将是对整个第八章的升华和总结。我将把维特比译码的每一步都"走"给您看,并把调制与编码之间复杂的权衡关系梳理得明明白白。
🌟 欢迎来到第11讲:维特比译码与系统设计权衡 #
(对应教材《数字通信原理》第八章后半部分)
上一讲我们已经学会了如何用网格图来描述卷积码的编码过程,每一条输入序列都对应着网格图上的一条唯一路径。但如果这条路径在传输中被噪声"撞歪"了呢?我们收到的序列可能对应着网格图上的任何一条路径,甚至是一条不存在的"野路"。我们该如何从这成千上万条可能的路径中,找到当初发送的那条 “最像” 的路径?
这就是本讲的核心——维特比译码算法 (Viterbi Algorithm)。
- ✨ 生动的比喻:GPS导航的最优路径规划
- 想象一下,你要从北京开车到广州,途中有无数的城市和高速公路网(网格图)。一场大雾(噪声)让你手头的地图变得模糊不清,你只知道大概经过了哪些区域(接收序列)。
- 暴力译码:列出所有可能的"北京-广州"路径,一条条地和你的模糊记忆对比,计算量大到无法想象。
- 维特比算法:你每到达一个中间城市(网格图的某个状态),就回顾一下所有能开到这里的路。你只保留那条看起来"最靠谱"的路(路径度量值最优),然后把其他"不太可能"的路全部忘掉。你带着这条"幸存"的最优路径继续前进,到下一个城市再做同样的选择。最终到达广州时,你手上剩下的那条路,就是全局最优的路径。
维特比译码就是这样一种巧妙的动态规划算法,它在每一步都"剪除"最不可能的路径,从而以极高的效率找到全局最优解。最后,我们将站在系统设计者的角度,探讨编码增益的代价,以及如何在带宽、功率和误码率这个"不可能三角"中做出明智的权衡。
学习目标:
- 理解最大似然译码的原理,以及硬判决和软判决的本质区别。
- 【核心】 彻底掌握维特比译码算法的精髓和计算步骤:路径度量、添加-比较-选择 (ACS)、幸存路径、回溯。
- 能够手动完成一个完整的维特比译码过程,包括硬判决和软判决的实例。
- 了解凿孔卷积码的思想,及其在实现速率自适应中的作用。
- 【升华】 掌握调制与编码的权衡,理解编码如何用带宽换功率,以及如何通过联合设计实现系统性能最优化。
📝 本讲主要内容 #
1. 卷积码的概率译码原理 #
与代数译码(如循环码的Meggit译码器)不同,概率译码不仅利用码的结构,还充分利用了信道的统计特性(即噪声的概率分布),因此能获得更优的性能。
1.1. 最大似然 (ML) 译码 #
ML译码的目标是:在收到序列 R 后,从所有 $2^k$ 个可能的许用码字 C_i 中,找到那个最有可能产生 R 的 C_i。
$$
\hat{C} = \underset{C_i \in \{C\}}{\operatorname{argmax}} P(R|C_i)
$$
为了计算方便,通常转化为对数似然:
$$
\hat{C} = \underset{C_i \in \{C\}}{\operatorname{argmax}} \log P(R|C_i) = \underset{C_i \in \{C\}}{\operatorname{argmax}} \sum_{m=1}^{M} \log P(r_m|c_{i,m})
$$
$\sum \log P(r\_m|c\_{i,m})$ 称为路径度量 (Path Metric)。
1.2. 硬判决 vs. 软判决 #
- 硬判决 (Hard Decision) (PPT p4)
- 解调器在译码前,已经将接收到的模拟信号判决为
0或1。译码器只处理二进制序列。 - 度量标准:路径度量最终简化为计算接收序列
R和路径序列C_i之间的汉明距离 $d(R, C\_i)$。ML译码等价于寻找最小汉明距离的路径。 $$ \hat{C} = \underset{C_i}{\operatorname{argmin}} \sum_{m=1}^{M} (r_m \oplus c_{i,m}) $$
- 解调器在译码前,已经将接收到的模拟信号判决为
- 软判决 (Soft Decision) (PPT p5-6)
- 解调器不直接判决为0/1,而是输出一个多比特的量化值或模拟电压值
r,这个值包含了信号的可信度信息。 - ✨ 生动的比喻:
- 硬判决:考官只给你"及格"或"不及格"的结论。
- 软判决:考官告诉你具体分数,比如"98分"(很可能是及格)或"59分"(很可能是及格,但差一点点)。
- 度量标准:在AWGN信道下,路径度量最终简化为计算接收序列
R和路径序列C_i对应电平之间的欧几里德距离的平方 $\sum(r\_m-s\_{i,m})^2$。ML译码等价于寻找最小欧氏距离的路径。 $$ \hat{C} = \underset{C_i}{\operatorname{argmin}} \sum_{m=1}^{M} (r_m - s_{i,m})^2 \iff \underset{C_i}{\operatorname{argmax}} \sum_{m=1}^{M} r_m s_{i,m} $$ - 性能:软判决保留了更多的信道信息,其性能相比硬判决有约 2-2.5 dB 的信噪比增益。
- 解调器不直接判决为0/1,而是输出一个多比特的量化值或模拟电压值
2. 【核心】维特比译码算法 (Viterbi Algorithm) #
直接在网格图上比较所有 $2^k$ 条完整路径的度量是不可行的。维特比算法通过一个巧妙的"剪枝"策略来解决这个问题。
2.1. 算法步骤 (PPT p11) #
- 初始化: t=0,所有状态的路径度量设为0(或某个初始值),路径历史为空。
- 前进 (t = 1, 2, …):
a. 计算分支度量 (Branch Metric): 对于
t时刻接收到的码组r_t,计算从t-1时刻的每个状态到t时刻的每个状态的所有可能转移分支的度量。- 硬判决:汉明距离 $d(r\_t, c\_{\text{branch}})$
- 软判决:欧氏距离平方 $(r\_t - s\_{\text{branch}})^2$
b. 添加-比较-选择 (ACS): 对于
t时刻的每一个状态: - 添加 (Add): 计算所有到达该状态的路径的新路径度量 = (上一时刻幸存路径的度量) + (刚刚计算的分支度量)。
- 比较 (Compare): 比较所有到达该状态的路径的新路径度量。
- 选择 (Select): 只保留度量值最优的那条路径作为该状态在
t时刻的幸存路径 (Survivor Path),并更新该状态的路径度量和路径历史。其余路径全部丢弃。
- 终止与回溯 (Traceback): 当所有接收序列处理完毕后(通常会使用结尾比特使路径最终回到全零状态),从最终时刻度量最优的状态开始,沿着幸存路径反向回溯到初始时刻。这条最终幸存的路径就是译码得到的最佳路径,其对应的输入序列就是译码结果。
2.2. 【深度例题剖析】(2,1,3)卷积码的维特比硬判决译码 (PPT p12-20) #
- 参数:
- 编码器: $c\_{i,0}=a\_i\oplus a\_{i-1}$, $c\_{i,1}=a\_i\oplus a\_{i-2}$
- 信息序列 M =
1011001+00(结尾比特) - 发送码字 C =
11 10 00 01 01 11 11 10 11 - 接收序列 R =
10 10 00 01 01 11 10 10 11(带下划线的是错误)
- 译码过程 (一步步走网格图):
【预留图片:PPT p13-20 的维特比译码过程图,逐步展示幸存路径】
- t=1: 接收
10。- 00->00 (输出00): 汉明距离 d=d(10,00)=1
- 00->10 (输出11): 汉明距离 d=d(10,11)=1
- 状态00的幸存路径度量为1,状态10的幸存路径度量为1。
- t=2: 接收
10。- 到达状态00: 只能从状态00过来(输出00),路径度量 = (t=1时状态00的度量) + d(10,00) = 1+1=2。幸存路径(00)。
- 到达状态01: 只能从状态10过来(输出10),路径度量 = (t=1时状态10的度量) + d(10,10) = 1+0=1。幸存路径(10)。
- …
- t=3: 接收
00。出现第一次选择!- 到达状态10:
- 路径1: 从状态01过来(输出01),d=d(00,01)=1。总度量 = (t=2时状态01的度量) + 1 = 1+1=2。
- 路径2: 从状态11过来(输出10),d=d(00,10)=1。总度量 = (t=2时状态11的度量) + 1 = 3+1=4。
- 比较: 2 < 4。选择路径1,丢弃路径2。状态10在t=3的幸存路径是
...->01->10,路径度量为2。
- 到达状态10:
- … 继续这个过程,直到 t=9 结束。
- t=9: 译码结束,所有路径都汇集到全零状态。此时,全零状态的路径度量最小(为2)。
- 回溯: 从 t=9 的状态00开始,沿着幸存路径(图中粗线)反向回溯:
… ->
(t=4, s=11)->(t=5, s=01)-> … ->(t=0, s=00) - 得到信息序列: 根据回溯路径上的分支(上分支=0,下分支=1),得到译码后的信息序列
101100100。 - 结果: 译码结果与原始信息完全一致,纠错了2个比特的错误。
- t=1: 接收
2.3. 软判决译码示例 (PPT p22-26) #
- 原理与硬判决完全相同,只是分支度量的计算方式不同。
- 软判决使用相关度量 $\sum r\_m s\_{i,m}$,我们选择度量值最大的路径作为幸存路径。
- PPT p23-26详细展示了每一步的路径度量累加和比较过程,最终同样找到了正确的路径。软判决由于利用了模拟幅值信息,在噪声环境中表现更稳健。
3. 凿孔卷积码 (Punctured Convolutional Codes) #
- 动机: 标准卷积码的码率 $k/n$ 是固定的。但在实际通信中,我们希望根据信道好坏动态调整码率(冗余度)。
- 思想:
- 从一个低码率(如1/2)的母码 (Mother Code) 开始。
- 按照一个固定的模式(凿孔矩阵),周期性地删除一部分编码输出比特。
- 示例 (PPT p34): 母码码率R=1/2。凿孔矩阵 $A=\begin{pmatrix} 1 & 1 \\\ 1 & 0 \end{pmatrix}$。
- 这意味着,每2个码组(4个比特),删除第2个码组的第2个比特。
- 输入2个信息比特,原本输出4个码元,现在只输出3个。码率从 1/2 提高到 2/3。
- 译码: 译码时,在被删除的位置填上"虚拟码元"(erasures),在维特比译码中,这些位置的分支度量不参与计算。
- 优点: 可以用一套硬件,通过改变凿孔模式,灵活地实现多种码率,实现速率自适应。
4. 调制与编码的权衡 #
这是通信系统设计的核心艺术。编码和调制不是孤立的。
- 编码的作用: 引入冗余,将信息比特能量分散到更多的信道码元上,从而降低对每个码元信噪比的要求。这被称为编码增益 (Coding Gain)。
- 代价:
- 带宽扩展: 码率 $R\_c = k/n < 1$,为了保持信息速率 $R\_b$ 不变,信道码元速率 $R\_c$ 必须提高到 $R\_b/R\_c$,导致所需带宽增加。
- 能量降低: 在总功率不变的情况下,每个信道码元的能量 $E\_c$ 降低为 $E\_b \times (k/n)$。
- 香农平面图 (PPT p48):
【预留图片:PPT p48 的香农平面图】
- 该图完美地展示了带宽效率 $R/W$ 和功率效率 $E\_b/N\_0$ 之间的关系。
- 香农限: 图中的边界线,代表了理论上能实现无差错传输的极限。任何通信系统都无法进入灰色区域。
- 调制方式的选择:
- 功率受限区 (左侧): $E\_b/N\_0$ 很低。应选择功率效率高的调制方式,如MFSK,可以用带宽换性能。
- 带宽受限区 (右侧): 带宽 $W$ 珍贵。应选择带宽效率高(能在1Hz里塞进更多比特)的调制方式,如高阶QAM、MPSK。
- 【深度例题剖析】带宽与功率均受限系统设计 (PPT p56-62)
-
问题: $R\_b=9600, W=4000, P\_b \le 10^{-9}, P\_r/N\_0=53dB$。
-
分析:
- 仅靠调制: 8PSK满足带宽要求,但误码率不达标。MFSK满足误码率要求,但带宽占用太大。—— 单纯的调制方案无解!
- 引入信道编码: 采用 (63,51) BCH码 + 8PSK 调制。
- 带宽校验: 码率 $R\_c=51/63$。符号速率 $R\_s = \frac{R\_b/R\_c}{\log\_2 M} = \frac{9600/(51/63)}{3} \approx 3953$ Hz。所需带宽 $W \approx R\_s < 4000$ Hz。带宽满足!
- 误码率校验:
- 计算每个信道比特的信噪比 $E\_c/N\_0$。
- 计算每个调制符号的信噪比 $E\_s/N\_0 = (\log\_2 M) \cdot (E\_c/N\_0)$。
- 根据8PSK误符号率公式,计算出译码前的信道误比特率 $P\_c \approx 4\times 10^{-5}$。
- 将 $P\_c$ 代入BCH码的纠错后误比特率上界公式,得到最终 $P\_b \approx 1.2 \times 10^{-10} < 10^{-9}$。误码率满足!
-
结论: 通过编码和调制的联合设计,我们成功地完成了一个在功率和带宽上都非常苛刻的系统设计。编码降低了对信噪比的要求,使得原本无法工作的8PSK调制能够达标。
-
🔗 知识关联与应用 #
- 承上启下: 维特比译码是信息论和数字信号处理领域最重要的算法之一,不仅用于卷积码,还广泛应用于信道均衡、语音识别等领域。调制与编码的权衡,则是将我们所学的所有通信知识融会贯通,应用于实际系统设计的最高纲领。
- 现实应用:
- 所有现代无线通信: 4G/5G, Wi-Fi, 卫星通信、深空通信,其核心物理层都采用了强大的信道编码(如Turbo码, LDPC码, Polar码)和高阶调制的联合方案。这些系统的译码器,很多都是基于维特比译码的思想演化而来的。
- 数字存储: 硬盘、固态硬盘的读写通道中,也使用了类似的编码调制技术来保证数据在高速读写下的可靠性。
🤔 引导式提问 #
- 维特比算法被称为"最优"算法,它的"最优"体现在什么地方?是计算速度最快吗?还是其他方面?
- 在维特比译码中,我们为何要在信息序列末尾添加
L-1个0比特(结尾卷积码序列)?这样做对译码过程有什么至关重要的好处? - 一个系统设计师告诉你,他通过使用一个码率非常低(如1/8)的强力纠错码,成功让一个原本信号很差的链路(低 $E\_b/N\_0$)达到了很低的误码率。但他也抱怨说,系统的总信息吞吐量(有效数据速率)不升反降。请用调制与编码的权衡关系,解释他为何会遇到这个"悖论"。
💡 本讲总结 #
本讲我们登上了卷积码之巅——维特比译码。我们理解了最大似然译码的数学原理,并区分了硬判决和软判决的优劣。核心是掌握了维特比算法在网格图上"披荆斩棘"的动态规划过程:通过添加-比较-选择保留幸存路径,高效地找到了全局最优解。通过对硬判决和软判决的详尽实例演练,我们应能独立完成一次译码。最后,我们将视野拔高到整个通信系统,探讨了编码与调制的深刻权衡。我们明白了,没有免费的午餐,编码增益是以带宽为代价换取的,只有精妙地联合设计,才能在香农极限的指引下,打造出性能最优的现代通信系统。