数字无线通信原理精讲 第6篇:差错控制编码技术

摘要

本文将带你深入理解差错控制编码技术,帮助你掌握如何在噪声信道中实现可靠通信。你将学到线性分组码和卷积码的编码原理、Viterbi解码算法、Turbo码和LDPC码等现代编码技术、编码增益的计算方法,以及如何在实际系统中选择合适的编码方案。


本文由”51学通信”(公众号:51学通信,站长:爱卫生)原创分享。如需深入交流或获取更多通信技术资料,欢迎添加微信:gprshome201101。


学习目标

阅读完本文后,你将能够:

  • 能力1:理解差错控制编码的基本原理,掌握码率、码距等关键概念
  • 能力2:设计和分析线性分组码,计算检错和纠错能力
  • 能力3:理解卷积码的编码原理和网格表示,实现Viterbi解码
  • 能力4:掌握Turbo码和LDPC码的编解码原理,理解迭代解码思想
  • 能力5:计算编码增益,为实际系统选择合适的编码方案

1. 差错控制编码概述

1.1 为什么需要差错控制编码

在实际通信系统中,由于信道噪声、干扰等因素,接收端不可避免会产生误码。差错控制编码通过引入受控冗余来检测和纠正这些错误。

flowchart TD
    subgraph WithoutCoding["无编码系统"]
        Data1["数据"] --> Mod1["调制"]
        Mod1 --> Channel1["噪声信道"]
        Channel1 --> Demod1["解调"]
        Demod1 --> Error1["误码率高"]
    end

    subgraph WithCoding["有编码系统"]
        Data2["数据"] --> Encode["信道编码<br/>添加冗余"]
        Encode --> Mod2["调制"]
        Mod2 --> Channel2["噪声信道"]
        Channel2 --> Demod2["解调"]
        Demod2 --> Decode["信道解码<br/>纠正错误"]
        Decode --> Correct["可靠输出"]
    end

    style Error1 fill:#f8d7da
    style Correct fill:#d4edda
    style Encode fill:#fff3cd
    style Decode fill:#fff3cd

图表讲解:这个对比图展示了有无编码系统的区别。无编码系统中,噪声直接导致误码。有编码系统通过在发送端添加冗余(编码),在接收端利用这些冗余来检测和纠正错误。虽然编码增加了传输开销,但大幅提高了可靠性。

1.2 差错控制的基本方法

方法类型原理优点缺点应用场景
FEC前向纠错,自动纠正错误无需反馈,实时性好冗余大,复杂度高实时通信、广播
ARQ自动重传请求,检错后重传效率高,简单需要反馈信道,延迟数据通信、互联网
HARQ混合方式,FEC+ARQ结合两者优点实现复杂4G/5G移动通信
CRC循环冗余校验,仅检错实现简单,检错能力强不能纠错数据帧、协议

1.3 编码的基本参数

码率(Code Rate)

R = k/n

其中k是信息比特数,n是编码后的码字长度。

编码增益(Coding Gain): 在相同误码率下,编码系统比未编码系统节省的E_b/N₀(以dB计)。

汉明距离(Hamming Distance): 两个码字之间对应位不同的个数。

最小码距(d_min): 码集中任意两个码字之间的最小汉明距离。

flowchart TD
    subgraph Parameters["编码参数关系"]
        R["码率 R = k/n<br/>传输效率"]
        dmin["最小码距 d_min<br/>纠错能力"]
        Gain["编码增益<br/>性能提升"]

        Tradeoff["权衡关系"]

        R --> Tradeoff
        dmin --> Tradeoff
        Gain --> Tradeoff
    end

    subgraph Design["设计目标"]
        Goal1["高码率<br/>高效率"]
        Goal2["大码距<br/>强纠错"]
        Goal3["高增益<br/>好性能"]
    end

    Tradeoff --> Design

    style Parameters fill:#e2e3e5
    style Design fill:#d4edda

图表讲解:这个图展示了编码参数之间的权衡关系。码率反映传输效率,最小码距决定纠错能力,编码增益反映性能提升。在实际设计中,这些参数相互制约:高码率意味着少冗余,但纠错能力弱;大码距意味着强纠错,但码率低。系统设计需要根据具体需求找到合适的平衡点。

2. 线性分组码

2.1 分组码的基本概念

分组码将k个信息比特编码为n个码字比特(n > k),记为(n, k)码。

生成矩阵G:k×n矩阵,通过c = uG生成码字 校验矩阵H:(n-k)×n矩阵,用于检测错误

对于系统码,生成矩阵形式为:

G = [I_k | P]

其中I_k是k×k单位矩阵,P是k×(n-k)矩阵。

2.2 汉明码

汉明码是最早的纠错码之一,(7,4)汉明码是一个经典例子。

flowchart LR
    subgraph Hamming74["(7,4)汉明码编码"]
        Input["4位信息<br/>u = (u₁, u₂, u₃, u₄)"] --> Encode["编码器"]

        Encode --> Output["7位码字<br/>c = (c₁, c₂, ..., c₇)"]

        subgraph Structure["码字结构"]
            Info["信息位<br/>c₁ c₂ c₃ c₄"]
            Parity["校验位<br/>c₅ c₆ c₇"]
        end

        Output --> Structure
    end

    style Input fill:#fff4e6
    style Output fill:#d4edda
    style Parity fill:#fff3cd

图表讲解:(7,4)汉明码将4位信息编码为7位码字。码字中前4位是原始信息,后3位是校验位。校验位是信息位的线性组合,用于检测和纠正错误。这种码可以纠正单个比特错误。

(7,4)汉明码的生成矩阵

G = [1 0 0 0 | 1 1 0
     0 1 0 0 | 1 0 1
     0 0 1 0 | 0 1 1
     0 0 0 1 | 1 1 1]

(7,4)汉明码的校验矩阵

H = [1 1 1 | 0 1 0 1
     1 0 1 | 1 0 1 1
     0 1 1 | 1 1 1 0]

2.3 循环冗余校验码

CRC码广泛应用于数据通信中的错误检测。

51学通信提示:CRC只能检错不能纠错。它通过在数据后面附加校验位,使整个码字能被某个生成多项式整除。接收端进行同样的除法运算,如果余数为0则认为没有错误。

常用CRC标准:

CRC类型生成多项式应用
CRC-8x⁸ + x² + x + 1多种协议
CRC-16x¹⁶ + x¹⁵ + x² + 1蓝牙、USB
CRC-32x³² + x²⁶ + x²³ + …以太网、ZIP
CRC-CCITTx¹⁶ + x¹² + x⁵ + 1HDLC、X.25

2.4 纠错能力分析

分组码的纠错能力由最小码距决定:

纠错能力条件说明
检测t个错误d_min ≥ t + 1可以发现最多t个错误
纠正t个错误d_min ≥ 2t + 1可以纠正最多t个错误
纠正t个,检测e个d_min ≥ t + e + 1纠t检e(e > t)
flowchart TD
    subgraph Correction["纠错能力与码距"]
        d2["d_min = 2<br/>仅检错"]
        d3["d_min = 3<br/>纠1错"]
        d5["d_min = 5<br/>纠2错"]
        d7["d_min = 7<br/>纠3错"]
    end

    subgraph Examples["实际例子"]
        Hamming["汉明码<br/>d_min=3, 纠1错"]
        Golay["戈莱码<br/>(23,12), d_min=7, 纠3错"]
        BCH["BCH码<br/>灵活的纠错能力"]
    end

    Correction --> Examples

    style d3 fill:#d4edda
    style d5 fill:#fff3cd
    style d7 fill:#ffe66d

图表讲解:这个图展示了码距与纠错能力的关系。码距越大,纠错能力越强。汉明码的最小码距为3,可以纠正单个错误。戈莱码的最小码距为7,可以纠正3个错误。实际系统设计时需要在码率和纠错能力之间权衡。

3. 卷积码

3.1 卷积码的基本原理

与分组码不同,卷积码是有记忆的编码。每个时刻的输出不仅依赖于当前输入,还依赖于之前的输入状态。

卷积码由以下参数描述:

  • (n, k, K):n个输出,k个输入,约束长度K
  • 码率:R = k/n
  • 生成多项式:描述编码器的连接关系
flowchart LR
    subgraph Convolutional["卷积码编码器 (2,1,3)"]
        Input["输入<br/>u(t)"] --> Shift["移位寄存器"]

        subgraph Shift["移位寄存器"]
            S1["u(t)"]
            S2["u(t-1)"]
            S3["u(t-2)"]
        end

        S1 --> Add1["+"]
        S2 --> Add1
        S3 --> Add1

        S1 --> Add2["+"]
        S3 --> Add2

        Add1 --> Output1["c₁(t)"]
        Add2 --> Output2["c₂(t)"]

        Output1 --> Combine["组合输出"]
        Output2 --> Combine
    end

    style Input fill:#fff4e6
    style Combine fill:#d4edda
    style Add1 fill:#ffe66d
    style Add2 fill:#ffe66d

图表讲解:这个图展示了一个(2,1,3)卷积码编码器的结构。输入比特进入移位寄存器,寄存器的各级通过加法器(模2加)组合产生两个输出比特。寄存器的长度(约束长度)决定了编码器的记忆深度。编码器的输出由当前输入和之前两个输入共同决定。

3.2 网格图表示

卷积码的状态转移可以用网格图清晰表示。

flowchart TD
    subgraph Trellis["卷积码网格图"]
        subgraph T0["时刻 t=0"]
            S00["状态 00"]
            S01["状态 01"]
            S10["状态 10"]
            S11["状态 11"]
        end

        subgraph T1["时刻 t=1"]
            S00_1["状态 00"]
            S01_1["状态 01"]
            S10_1["状态 10"]
            S11_1["状态 11"]
        end

        S00 -->|"输入0<br/>输出00"| S00_1
        S00 -->|"输入1<br/>输出11"| S10_1
        S10 -->|"输入0<br/>输出10"| S01_1
        S10 -->|"输入1<br/>输出01"| S11_1

        style S00 fill:#4ecdc4
        style S10 fill:#4ecdc4
        style S00_1 fill:#ffe66d
        style S10_1 fill:#ffe66d
    end

图表讲解:网格图展示了卷积码的状态转移随时间的演变。每个时刻有4个可能的状态(由寄存器内容决定)。从每个状态出发,根据输入0或1转移到不同的状态,并产生对应的输出。解码时需要在网格图中寻找最可能的路径。

3.3 Viterbi解码算法

Viterbi算法是卷积码的最优解码算法,基于最大似然准则。

算法步骤

flowchart TD
    subgraph Viterbi["Viterbi算法流程"]
        Start["初始化<br/>t=0, 所有状态路径度量=0<br/>除起始状态外其他设为-∞"] --> Step1

        Step1["递归计算<br/>对每个接收符号"] --> Step2

        Step2["计算分支度量<br/>每个状态转移的分支度量"] --> Step3

        Step3["更新路径度量<br/>path_metric = 分支度量 + 累积度量"] --> Step4

        Step4["路径合并<br/>保留最小度量路径"] --> Check

        Check{"是否<br/>结束?"}

        Check -->|"否"| Step1
        Check -->|"是"| Traceback["回溯<br/>从终止状态回溯<br/>找到最优路径"]

        Traceback --> Output["输出解码比特"]
    end

    style Start fill:#fff4e6
    style Output fill:#d4edda
    style Check fill:#ffd93d

图表讲解:这个流程图展示了Viterbi算法的主要步骤。算法逐符号处理接收序列,在网格图中累积路径度量。对于每个状态,只保留度量最小的路径(幸存路径),其他路径被剪枝。最后从终止状态回溯,找到整个序列的最优路径。这种方法将复杂度从指数级降低到线性级。

51学通信建议:Viterbi算法的核心思想是”剪枝”——在网格图中每个状态只保留一条幸存路径。这基于最优性原理:如果到达某个状态的最优路径经过某个中间状态,那么从起始到中间状态的那段路径也必须是最优的。这使得我们不需要穷举所有可能的路径。

4. 现代编码技术

4.1 Turbo码

Turbo码是1993年提出的革命性编码技术,首次在实用复杂度下接近了香农限。

Turbo码编码器结构

flowchart TD
    subgraph Turbo["Turbo码编码器"]
        Input["输入信息"] --> Interleave["交织器"]
        Input --> RSC1["RSC编码器1"]

        Interleave --> RSC2["RSC编码器2"]

        RSC1 --> Puncture["删余矩阵"]
        RSC2 --> Puncture

        Input --> Systematic["系统位输出"]
        Puncture --> Parity["校验位输出"]

        Systematic --> Combine["复用输出"]
        Parity --> Combine
    end

    style Input fill:#fff4e6
    style Combine fill:#d4edda
    style Interleave fill:#ffe66d
    style RSC1 fill:#a8e6cf
    style RSC2 fill:#a8e6cf

图表讲解:Turbo码编码器包含两个递归系统卷积(RSC)编码器。输入信息直接送到第一个编码器,同时经过交织器(改变比特顺序)后送到第二个编码器。两个编码器的输出经过删余(选择性丢弃部分校验位)后复用输出。交织器的存在使得两个编码器对不同的比特模式进行校验,提高了纠错能力。

Turbo码解码算法

Turbo码采用迭代解码,两个解码器相互交换软信息。

sequenceDiagram
    participant R as 接收信号
    participant D1 as 解码器1
    participant I as 交织/去交织
    participant D2 as 解码器2
    participant O as 硬判决输出

    Note over R: 接收码字
    R->>D1: 系统位 + 校验位1
    R->>D2: 系统位 + 校验位2

    Note over D1: 迭代1开始
    D1->>I: 外信息 LLR₁
    I->>D2: 交织后的 LLR

    Note over D2: 解码
    D2->>I: 外信息 LLR₂
    I->>D1: 去交织后的 LLR

    Note over D1,D2: 继续迭代...
    Note over D1: 最终判决
    D1->>O: 解码比特

图表讲解:Turbo码解码是迭代过程。两个解码器相互传递”外信息”——不是简单的硬判决(0或1),而是软信息(对数似然比LLR)。解码器1将外信息交织后传递给解码器2,解码器2又将新的外信息去交织后传回解码器1。经过若干次迭代后,对最终的LLR进行硬判决得到解码比特。

4.2 LDPC码

低密度奇偶校验(LDPC)码是另一类接近香农限的现代编码。

LDPC码的特点

  • 稀疏的校验矩阵(大部分元素为0)
  • 图表示:变量节点和校验节点
  • 和积算法解码
flowchart TD
    subgraph LDPC["LDPC码的Tanner图表示"]
        subgraph VariableNodes["变量节点(比特节点)"]
            V1["v₁"]
            V2["v₂"]
            V3["v₃"]
            V4["v₄"]
            V5["v₅"]
            V6["v₆"]
        end

        subgraph CheckNodes["校验节点"]
            C1["c₁"]
            C2["c₂"]
            C3["c₃"]
        end

        V1 --> C1
        V2 --> C1
        V3 --> C1
        V3 --> C2
        V4 --> C2
        V4 --> C3
        V5 --> C3
        V6 --> C3
    end

    style VariableNodes fill:#a8e6cf
    style CheckNodes fill:#ffe66d

图表讲解:LDPC码可以用二分图(Tanner图)表示。变量节点(圆圈)代表码字比特,校验节点(方块)代表校验方程。边表示连接关系。稀疏性意味着每个节点只连接少数其他节点。解码时,变量节点和校验节点相互传递消息,经过多次迭代后收敛。

4.3 极化码

极化码是2008年提出的新一代编码,是第一种被证明在二进制离散无记忆信道下达到香农限的编码。

极化码的核心思想: 通过信道组合和分裂,将N个相同的信道”极化”为:

  • 一部分完全可靠的信道(容量接近1)
  • 一部分完全不可靠的信道(容量接近0)
flowchart LR
    subgraph Polarization["信道极化过程"]
        N["N个相同信道<br/>容量 W"] --> Combine["信道组合"]

        Combine --> Split["信道分裂"]

        Split --> Reliable["N·W 个<br/>可靠信道<br/>容量≈1"]

        Split --> Unreliable["N(1-W) 个<br/>不可靠信道<br/>容量≈0"]
    end

    style N fill:#fff4e6
    style Reliable fill:#d4edda
    style Unreliable fill:#f8d7da

图表讲解:极化码通过递归的信道组合和分裂操作,使信道极化。可靠信道用于传输信息比特,不可靠信道传输固定比特(通常为0)。随着码长增加,极化效果越明显,越接近香农限。5G控制信道采用了极化码。

4.4 现代编码比较

编码类型特点优点缺点应用
Turbo码并行级联性能好,相对简单误码平层3G/4G数据信道
LDPC码稀疏校验矩阵低误码平层,可并行解码延迟大5G数据信道、Wi-Fi
极化码信道极化理论证明最优中等码长性能稍差5G控制信道

5. 交织技术

5.1 为什么需要交织

在衰落信道中,错误往往成群出现(突发错误)。纠错码通常设计为纠正随机错误,对突发错误效果不佳。交织技术将突发错误分散成随机错误。

flowchart TD
    subgraph WithoutInterleaver["无交织"]
        Data1["数据流"] --> Channel1["衰落信道"]
        Channel1 --> Burst["突发错误<br/>████████"]
        Burst --> Fail["纠错失败"]
    end

    subgraph WithInterleaver["有交织"]
        Data2["数据流"] --> Interleave["交织器"]
        Interleave --> Channel2["衰落信道"]
        Channel2 --> Spread["分散错误<br/>█  █  █  █"]
        Spread --> DeInterleave["去交织"]
        DeInterleave --> Correct["纠错成功"]
    end

    style Fail fill:#f8d7da
    style Correct fill:#d4edda
    style Interleave fill:#ffe66d

图表讲解:这个对比图展示了交织的作用。无交织时,衰落导致连续的比特错误,超出纠错码的纠正能力。有交织时,数据被重新排列,使得连续的错误比特分散到不同的码字中,每个码字只有少量错误,可以被纠正。

5.2 块交织

块交织是最简单的交织方式,按行写入、按列读出(或反之)。

交织深度:决定能分散的最大突发长度

flowchart TD
    subgraph BlockInterleaver["块交织 (4×5示例)"]
        Write["按行写入"]

        subgrid Matrix["交织矩阵"]
            Row1["1 2 3 4 5"]
            Row2["6 7 8 9 10"]
            Row3["11 12 13 14 15"]
            Row4["16 17 18 19 20"]
        end

        Write --> Matrix

        Matrix --> Read["按列读出"]

        Read --> Output["1, 6, 11, 16, 2, 7, 12, 17, ..."]
    end

    style Write fill:#fff4e6
    style Output fill:#d4edda
    style Matrix fill:#ffe66d

图表讲解:块交织器将数据按行写入矩阵,然后按列读出。这样原来相邻的数据在交织后相距较远,可以将连续的错误分散。交织深度(矩阵行数)决定了能分散的最大突发长度。

5.3 卷积交织

卷积交织使用移位寄存器实现,延迟更小,更适合流式数据。

交织类型优点缺点应用
块交织实现简单延迟大,需要存储整个块DVB-T、DAB
卷积交织延迟小,连续处理实现稍复杂DVB-C、ATSC

6. 编码性能分析

6.1 编码增益计算

编码增益是在相同误码率下,编码系统比未编码系统节省的E_b/N₀。

flowchart LR
    subgraph CodingGain["编码增益计算"]
        BER["目标误码率<br/>10⁻⁵"] --> Query

        subgraph Query["查询所需的 E_b/N₀"]
            Uncoded["未编码<br/>9.6 dB (BPSK)"]
            Coded["编码<br/>6 dB (某码)"]
        end

        Uncoded --> Diff["编码增益"]
        Coded --> Diff

        Diff --> Result["9.6 - 6 = 3.6 dB"]
    end

    style BER fill:#fff4e6
    style Result fill:#d4edda
    style Diff fill:#ffe66d

图表讲解:编码增益的计算方法是:对于目标误码率(如10⁻⁵),找到未编码系统和编码系统分别需要的E_b/N₀,两者之差就是编码增益。例如,未编码BPSK需要9.6dB,而某编码方案只需要6dB,那么编码增益就是3.6dB。

6.2 不同编码的编码增益

编码方案编码增益 (BER=10⁻⁵)复杂度应用
卷积码 (2,1,7)约4-5 dB中等卫星通信
Turbo码约8-9 dB3G/4G
LDPC码约9-10 dB5G、Wi-Fi 6
极化码约8-9 dB中等5G控制信道

51学通信提示:编码增益不是固定的,它取决于码率、码长、解码迭代次数等参数。高码率(接近1)的编码增益较小,因为冗余少。长码通常有更好的性能,但延迟也更大。

6.3 误码平层现象

一些现代编码(如Turbo码)在低信噪比下性能优异,但高信噪比下误码率下降变慢,出现”误码平层”。

编码类型误码平层原因解决方法
Turbo码明显次优解码增加迭代、外部交织
LDPC码不明显稀疏图结构优化度分布
极化码存在中等码长性能限制增加码长

7. 核心概念总结

概念名称定义应用场景注意事项
码率信息比特与码字比特之比衡量传输效率高码率=高效率但纠错弱
最小码距任意两个码字的最小汉明距离决定纠错能力d_min ≥ 2t + 1 纠t错
生成矩阵将信息比特映射为码字的矩阵分组码编码G = [I
校验矩阵用于检测错误的矩阵译码、检错H·cᵀ = 0 无错误
Viterbi算法卷积码最优解码算法卷积码解码复杂度与状态数成正比
编码增益相同BER下节省的E_b/N₀性能评估典型值3-8dB
交织重排数据以分散突发错误衰落信道增加延迟但改善性能

8. 常见问题解答

Q1:Turbo码和LDPC码哪个更好?5G为什么分别使用它们?

:Turbo码和LDPC码都是非常优秀的现代编码方案,都可以在实用复杂度下接近香农限。它们各有特点,5G根据不同场景选择了不同的编码。

Turbo码的优势

  • 在中等码长(数百到数千比特)下性能优异
  • 解码复杂度相对较低
  • 对码率灵活性支持好

LDPC码的优势

  • 更低的误码平层(高SNR时性能更好)
  • 支持高度并行的解码实现
  • 对长码(数万比特)性能更好

5G的选择

  • 数据信道(PDSCH/PUSCH)使用LDPC码:数据块通常较大,需要高吞吐量并行解码,LDPC码更适合
  • 控制信道(PDCCH/UCCH)使用极化码:控制信息较短,极化码在短码时性能好且解码复杂度适中

这种选择体现了”技术适配场景”的原则。没有绝对最好的编码,只有最适合特定应用的编码。


Q2:为什么需要迭代解码?一次解码不够吗?

:迭代解码是Turbo码、LDPC码等现代编码能够接近香农限的关键技术。理解迭代解码需要理解”软信息”和”外信息”的概念。

硬判决 vs 软判决

  • 硬判决:直接将接收信号判决为0或1
  • 软判决:保留接收信号的置信度信息(如LLR值)

软判决包含更多信息,解码性能更好。

迭代解码的原理: 在Turbo码中,两个解码器相互传递”外信息”——不是最终的判决,而是当前解码器对每个比特的”软判断”加上置信度。每个解码器利用另一个解码器提供的外信息作为先验知识,更新自己的判断。经过若干轮迭代,判断越来越准确。

为什么需要多次迭代

  1. 第一次迭代时,解码器只能利用接收信号本身
  2. 后续迭代中,解码器可以利用另一个解码器提供的额外信息
  3. 随着迭代次数增加,信息逐渐累积,判决越来越可靠

51学通信认为:迭代次数并非越多越好。通常4-8次迭代就能获得大部分增益。更多迭代带来的增益递减,但延迟和复杂度线性增加。实际系统需要根据应用选择合适的迭代次数。


Q3:如何为我的系统选择合适的编码方案?

:选择编码方案需要综合考虑多个因素。下面是一个系统化的选择流程。

第一步:明确需求

  • 数据块大小:短(<100比特)、中(100-1000)、长(>1000)
  • 目标误码率:10⁻³、10⁻⁵、10⁻⁸等
  • 可接受的延迟:实时(<1ms)、中等(<10ms)、宽松
  • 功耗/复杂度约束:电池供电、高性能服务器

第二步:选择编码类型

场景推荐编码理由
极短控制信息汉明码/BCH码简单、足够
短数据块卷积码、极化码性能好、延迟小
中等数据块Turbo码性能与复杂度平衡
长数据块LDPC码高吞吐、低误码平层
超低延迟简单分组码复杂度最低

第三步:确定参数

  • 码率:根据信道质量选择,好信道用高码率,差信道用低码率
  • 码长:在延迟和性能之间权衡
  • 迭代次数:4-8次通常是好的起点

第四步:验证和优化

  • 仿真验证性能
  • 调整参数优化

实际应用中,可以采用自适应编码调制(ACM),根据信道条件动态调整编码方案,这在4G/5G系统中已经广泛使用。


Q4:交织会增加延迟吗?如何权衡?

:交织确实会增加延迟,这是其代价。理解这个权衡需要分析交织的工作机制。

交织延迟的来源: 交织需要在发送端收集一定量的数据进行重新排列,在接收端收集后再还原。这个收集和还原过程需要时间。

延迟计算: 对于m×n的块交织器:

  • 发送端延迟:约m×n个符号周期
  • 接收端延迟:约m×n个符号周期
  • 总延迟:约2×m×n个符号周期

交织的收益

  • 将突发错误分散为随机错误
  • 使得纠错码能更有效地工作
  • 在衰落信道中显著提高性能

权衡策略

应用场景是否使用交织理由
实时语音小交织可容忍少量错误,延迟敏感
视频流中等交织平衡性能和延迟
文件传输深交织重传代价高,可以容忍延迟
广播系统深交织无反馈信道,需要可靠接收

5G系统中的设计: 5G采用灵活的交织策略,根据业务类型(eMBB、mMTC、URLLC)选择不同的交织深度。对于超可靠低延迟通信(URLLC),甚至可能不使用交织以最小化延迟。


Q5:编码总是好的吗?什么时候不需要编码?

:编码并不总是有益的。在某些情况下,不编码或使用简单编码可能是更好的选择。理解这一点需要认识编码的代价。

编码的代价

  1. 带宽开销:编码后的数据量增大(1/R倍)
  2. 处理延迟:编解码需要时间
  3. 功耗增加:编解码电路消耗能量
  4. 复杂度:系统设计更复杂
  5. 同步开销:可能需要更复杂的同步

不需要编码的情况

情况理由示例
信道极好错误率已经很低有线通信、短距离
极低延迟要求编解码延迟不可接受某些工业控制
极低功耗编解码功耗不可接受某些物联网传感器
数据本身有冗余应用层有容错机制音视频编码已有容错
代价高于收益编码增益不值得代价某些短突发通信

实际考虑: 即使决定使用编码,也需要考虑编码的”轻重”:

编码强度适用场景示例
仅检错好信道 + 重传以太网、TCP
轻度纠错一般信道CRC + 简单FEC
重度纠错差信道Turbo/LDPC

51学通信提示:编码是一个工具,不是目的。系统设计的核心是满足需求,而不是使用最先进的技术。在好信道上,不编码或简单编码可能是合理的选择。5G系统中,控制信道和数据信道使用不同强度的编码,体现了这个原则。


总结

本文深入讲解了差错控制编码技术。我们学习了:

  1. 编码基础:理解了差错控制的必要性、基本方法和关键参数
  2. 线性分组码:掌握了汉明码、CRC码的原理和应用
  3. 卷积码:理解了编码器结构、网格图和Viterbi算法
  4. 现代编码:学习了Turbo码、LDPC码和极化码的原理
  5. 交织技术:了解了如何处理突发错误
  6. 性能分析:掌握了编码增益的计算和性能评估

差错控制编码是可靠通信的基石。从简单的汉明码到现代的Turbo/LDPC码,编码技术的进步使我们能够在噪声信道中实现可靠的通信,越来越接近香农的理论极限。

下篇预告

下一篇我们将深入探讨码间干扰与均衡技术,带你了解带限信道中的传输问题,包括码间干扰的产生机理、奈奎斯特准则、升余弦滤波器、线性均衡器和判决反馈均衡器的设计,帮助你理解如何在带限信道中实现可靠传输。