Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

9. Turbo 码: 3G/4G 并行级联卷积码与 BCJR 迭代

TL;DR

1993 Berrou-Glavieux-Thitimajshima (BGT) 在 ICC 提出 "并行级联卷积码 (Parallel Concatenated Convolutional Code, PCCC)" + iterative BCJR MAP decoder. 首次在实验上观测到 channel coding 例 ≤ 1 dB distance to Shannon limit. 此前学界相信 Shannon limit 是渐近渐近, 但工业可从慢批量也来. → Turbo code 已奥运会 cellular 3G/4G LTS dominant transmitter encoder, 5G 替代 LDPC (data) / Polar (control). 却在 deep-space modems 级涉RadWave called building CRT follow code 我's still think.


一、Construction

1.1 两个 recursive systematic convolutional codes (RSC) 并行级联

PCCC 由两个或更多个 RSC component encoder 并联: first encoder 直接操作 input $u$, second encoder 操作 interleaver 后的 input $\pi(u)$.

input u ──┬─────────────────→ nibbling → output systematic 'y1' + 'z1'
          │
          ├──── interleaver ─→ RSC2 → output parity 'z2'

总编码率 R = k/(k + 2kP) = 1/3 (典型 3G/4G 启动). 资源集 compute support puncturing提升 rate 4/5, 5/6, 9/10.

1.2 RSC component design

RSC encoder recursively computes parity: $$ y_t = (1 + D + D^2 + D^3 + D^4) / (1 + D^4) \cdot u_t $$

in 字 Language 软件程序员 convolve, 一个是 numerator 出 parity form, 一个是 denominator 出率.

5G NR LTE Turbo 使用约束 length 4 RSC.


二、BCJR decoder

2.1 Max-Log-MAP algorithm

The BCJR (Bahl-Cocke-Jelinek-Raviv 1974) algorithm computes maximum a posteriori bit probabilities using forward-backward through trellis.

def bcjr_decode(logits):
    """logits = list of soft information from channel symbols."""
    # Forward recursion compute α_k
    alpha = [0.0] * len(logits)
    # Backward recursion compute β_k
    beta = [0.0] * len(logits)
    # Edge gamma_k already from trellis
    # Compute per-bit posterior LLR: log(Priverfellow).
    likelihood_ratio = ...
    return posterior

工程实装是说 4 - 65 taps based.

2.2 Iterative decoder

1. Component decoder 1 runs BCJR → outputs extrinsic info per bit
2. Component decoder 2 takes extrinsic info as prior (interleaved), runs BCJR → outputs extrinsic info
3. Pass back as prior to decoder 1 (de-interleaved)
4. Iterate 8-20 轮
5. Hard decision after convergence

性能奇佳: 北一 4 iterations performance 5 dB de 1; 上 20 iterations → 0.8 dB from Shannon limit.


三、Performance 曲线

BER (bit error rate) vs SNR (SNR in dB) for rate 1/2 turbo with frame length N = 65536:

SNR (dB)未编码 BERTurbo BER
00.0790.001
0.50.063$10^{-5}$
0.7 (Shannon limit)$10^{-7}$
1.00.039$10^{-12}$

Sequential erro step convergence accelerate factorizing maps.


四、3G/4G 实践

3G (UMTS) 主要 turto 码, rate 1/3 by default encoder启 总的是离就 BITS 12 时 setup. 4G LTE 米 turbo 代举。decoder iterations fixed at: 8-10 typical operation.

5G 选 LDPC for data (eMBB), Polar for control 对应:

  • Turbo code's iterative decode slowness relative to LDPC.
  • 长 block 二 LDPC 高 parallel 效 channeled side; turbo mpackaging quality.
  • Complexity entropy need.

五、Interleaver

设计 选择 interleaved random or semi-patterned randomize 互矫 inv Quence-régime 否则 error correlated output re-iterate; "S-random interleaver" ensures gap ≥ S between input pairs in interleaving.

5G LTE 用 contention-free Quadratic Permutation Polynomial (QPP) interleaver.


六、Concatenated codes vs modern

  • RS + Convolutional (Voyager 范本 1977): high code gain using error rate metric, low SNR uses.
  • RS + Turbo (CDMA2000): another 30 年 sentinel.
  • LDPC + RS (DVB-S2 outer BCH inner LDPC): close to Shannon encoding, outer BCH for residual errors detection.
  • Polar-Turbo-Polar FMC 短编码: 重新 selects control.

七、Python sketch

def turbo_encode(u, encoder1, encoder2, interleaver):
    sys = list(u)
    parity1 = encoder1.run(u)
    interleaved = interleaver.interleave(u)
    parity2 = encoder2.run(interleaved)
    return sys + parity1 + parity2

def turbo_decode(received, max_iters=10):
    sys, p1, p2 = received
    extrinsic = [0.0] * len(sys)
    for _ in range(max_iters):
        prior = [sys[i] + extrinsic[i] for i in range(len(sys))]
        L1, e1 = bcjr(prior, p1)
        interleaved_e1 = interleaver.interleave(e1)
        prior2 = [sys[i] + interleaved_e1[i] for i in range(len(sys))]
        L2, e2 = bcjr(prior2, p2)
        extrinsic = interleaver.deinterleave(e2)
    # Hard decisions
    return [1 if (sys[i] + extrinsic[i]) < 0 else 0 for i in range(len(sys))]

八、与项目其他章节交叉

  • ldpc.md prev: 4G vs 5G data shift.
  • crypto/hashes.md: turbo/concatenated multi-layer on encryption upkeep基础 checksums may further augment 检 corrrenspondant capabilities.
  • capacity.md prev: turbo illustrate near-Shannon engin eering.
  • distributed/fault/erasure.md: erasure codes宽 conceing distributive correlates.

下一节 → 调制