2026年10月5日月曜日

ターボ符号と、LDPC符号について、雑学や業界話を、交えながら解説して下さい😊

ターボ符号と、LDPC符号について、雑学や業界話を、交えながら解説して下さい😊、


ご提示いただいたそれぞれの比喩は、各誤り訂正符号の本質(アルゴリズムの挙動や構造)を見事に捉えています。

これらを直感的なイメージ図と、通信理論における数式・数学的表現で整理しました。

1. ターボ符号 (Turbo Codes)

イメージ: 「二人の名探偵が何度も相談しながら真犯人を絞り込む」

互いに異なる順番(インターリーバ)でデータを受け取った2つの構成符号器/復号器(名探偵)が、試行錯誤(反復処理)を通じて互いの信頼度情報を交換し合う仕組みです。

  送信側 (Encoder)                     受信側 (Iterative Decoder)
                                      +-----------------------+
   [情報 bit] ──+──> [構成符号1] ───> │  復号器 1 (探偵A)     │ ── (外部情報 L1) ──┐
                │                     +-----------------------+                    │
                ↓                                ▲                                 ▼
             [並べ替え]                           │                          [並べ替え / 戻し]
                │                                │                                 │
                └──> [構成符号2] ───> +-----------------------+                    │
                                      │  復号器 2 (探偵B)     │ <──────────────────┘
                                      +-----------------------+
                                                 │
                                                 ▼ (反復後に判定)
                                            [推定 bit]

ターボ復号における外部情報の更新

ターボ復号の本質は、LLR(Log-Likelihood Ratio: 対数確からしさ比)を用いて、各復号器が事後確率を反復的に更新することにあります。

外部情報(Extrinsic Information)の計算

  Le(m)(uk)=LAPP(m)(uk)−Lsys(uk)−La(m−1)(uk)L_e^{(m)}(u_k) = L_{\mathrm{APP}}^{(m)}(u_k) - L_{\mathrm{sys}}(u_k) - L_a^{(m-1)}(u_k)Le(m)​(uk​)=LAPP(m)​(uk​)−Lsys​(uk​)−La(m−1)​(uk​)

各項の意味

  Lsys(uk)L_{\mathrm{sys}}(u_k)Lsys​(uk​)受信信号から直接得られる情報(チャネル情報)
  La(m−1)(uk)L_a^{(m-1)}(u_k)La(m−1)​(uk​)もう一方の復号器から受け取った事前情報(A Priori Information)
  LAPP(m)(uk)L_{\mathrm{APP}}^{(m)}(u_k)LAPP(m)​(uk​)BCJRアルゴリズムにより計算された事後確率に対応するLLR
  Le(m)(uk)L_e^{(m)}(u_k)Le(m)​(uk​)今回の復号処理で新たに得られた外部情報(Extrinsic Information)

情報の分離という観点

外部情報は、   外部情報=事後情報−チャネル情報−事前情報\text{外部情報} = \text{事後情報} - \text{チャネル情報} - \text{事前情報}外部情報=事後情報−チャネル情報−事前情報すなわち、   Le=LAPP−Lsys−LaL_e = L_{\mathrm{APP}} - L_{\mathrm{sys}} - L_aLe​=LAPP​−Lsys​−La​という形で表されます。 これは、
「自分が最初から持っていた情報」と 「相手から与えられた情報」を除き、 「今回の復号処理で新たに発見した情報だけ」を抽出する
ことを意味します。

探偵の例での解釈

各復号器を探偵と考えると、   新しい手掛かり=最終判断−元の証拠−相手から聞いた情報\text{新しい手掛かり} = \text{最終判断} - \text{元の証拠} - \text{相手から聞いた情報}新しい手掛かり=最終判断−元の証拠−相手から聞いた情報となります。 つまり探偵Aは、   Le(m)(uk)L_e^{(m)}(u_k)Le(m)​(uk​)だけを探偵Bへ渡し、探偵Bはそれを   La(m)(uk)L_a^{(m)}(u_k)La(m)​(uk​)として利用します。 その後、   Le(1)→Le(2)→⋯→Le(m)L_e^{(1)} \rightarrow L_e^{(2)} \rightarrow \cdots \rightarrow L_e^{(m)}Le(1)​→Le(2)​→⋯→Le(m)​という反復(Iteration)を繰り返し、   ∣LAPP(uk)∣\left|L_{\mathrm{APP}}(u_k)\right|∣LAPP​(uk​)∣が徐々に大きくなっていくことで、ビット uku_kuk​ が 0 か 1 かに対する確信度が高まります。

最終的な判定

反復終了後、事後LLRの符号によって判定します。   u^k={1(LAPP(uk)≥0)0(LAPP(uk)<0)\hat{u}_k= \begin{cases} 1 & \left( L_{\mathrm{APP}}(u_k) \ge 0 \right) \\ 0 & \left( L_{\mathrm{APP}}(u_k) < 0 \right) \end{cases}u^k​={10​(LAPP​(uk​)≥0)(LAPP​(uk​)<0)​LLRの絶対値   ∣LAPP(uk)∣\left|L_{\mathrm{APP}}(u_k)\right|∣LAPP​(uk​)∣が大きいほど、その判定に対する信頼度が高いことを意味します。

2. LDPC符号 (Low-Density Parity-Check Codes)

イメージ: 「大勢の証人が少しずつ情報を持ち寄り、多数の意見から正解を導く」

データの1ビット(変数ノード/証人)と、チェック条件(チェックノード/検証者)が疎に結合した二部グラフ(タナーグラフ)上で、メッセージを受け渡し(Message Passing)しながら全体の矛盾を解消します。

 (変数ノード : bit / 証人)      (チェックノード : パリティ / 検証者)
       [ v_1 ] ─────────────── ( c_1 )  「v_1 + v_2 + v_3 = 0 か?」
        │   └──────────┐      /
       [ v_2 ] ───────┼───────┘
        │            /│
       [ v_3 ] ─────┘  └─── ( c_2 )  「v_1 + v_3 + v_4 = 0 か?」
        │                 /
       [ v_4 ] ──────────┘

LDPC符号の数式表現

LDPC(Low-Density Parity-Check)符号は、多くの要素が 0 である疎な検査行列 HHH によって定義されます。

パリティ検査条件

符号語 x\mathbf{x}x は、   HxT=0(mod2)H \mathbf{x}^{T} = \mathbf{0} \pmod{2}HxT=0(mod2)を満たさなければなりません。 ここで、   x=(x1,x2,…,xn)\mathbf{x} = (x_1,x_2,\ldots,x_n)x=(x1​,x2​,…,xn​)は送信された符号語です。

Belief Propagation(確率伝搬法)

LDPC復号では、二部グラフ上の
  • 変数ノード(Variable Node)
  • チェックノード(Check Node)
の間でメッセージを反復交換します。

1. チェックノード → 変数ノード

メッセージ更新式

  μcj→vi=2tanh⁡−1 ⁣(∏k∈Vj∖{i}tanh⁡(μvk→cj2))\mu_{c_j \rightarrow v_i} = 2 \tanh^{-1} \!\left( \prod_{k \in V_j \setminus \{i\}} \tanh \left( \frac{\mu_{v_k \rightarrow c_j}}{2} \right) \right)μcj​→vi​​=2tanh−1​k∈Vj​∖{i}∏​tanh(2μvk​→cj​​​)​

意味

  • cjc_j  cj​:チェックノード
  • viv_i  vi​:変数ノード
  • VjV_j  Vj​:チェックノード cjc_j  cj​ に接続している変数ノード集合

解釈

チェックノードは   ⨁i∈Vjxi=0\bigoplus_{i \in V_j} x_i = 0i∈Vj​⨁​xi​=0というパリティ条件を満たすように、
「他の変数ノードたちの意見を総合して、 この変数ノードはこうであるはずだ」
という推定結果を返します。

2. 変数ノード → チェックノード

メッセージ更新式

  μvi→cj=Lch(vi)+∑k∈Ci∖{j}μck→vi\mu_{v_i \rightarrow c_j} = L_{\mathrm{ch}}(v_i) + \sum_{k \in C_i \setminus \{j\}} \mu_{c_k \rightarrow v_i}μvi​→cj​​=Lch​(vi​)+k∈Ci​∖{j}∑​μck​→vi​​

意味

  Lch(vi)L_{\mathrm{ch}}(v_i)Lch​(vi​)通信路から得られる初期LLR(受信情報)
  CiC_iCi​変数ノード viv_ivi​ に接続するチェックノード集合

解釈

変数ノードは、   自分の観測情報+他のチェックノードからの意見\text{自分の観測情報} + \text{他のチェックノードからの意見}自分の観測情報+他のチェックノードからの意見を足し合わせて、新しい確信度を作ります。 ただし、送り先のチェックノード cjc_jcj​ 自身から受け取った情報は除外します。

情報更新の本質

変数ノードの更新式は、   新しい確信=受信信号+他の検証者の意見\text{新しい確信} = \text{受信信号} + \text{他の検証者の意見}新しい確信=受信信号+他の検証者の意見と解釈できます。 つまり、   μvi→cj=Lch(vi)+∑k∈Ci∖{j}μck→vi\mu_{v_i \rightarrow c_j} = L_{\mathrm{ch}}(v_i) + \sum_{k \in C_i \setminus \{j\}} \mu_{c_k \rightarrow v_i}μvi​→cj​​=Lch​(vi​)+k∈Ci​∖{j}∑​μck​→vi​​は、
「自分が実際に観測した証拠」と 「他の検証者から得た情報」を統合して、 相手へ伝える確信度を更新する
ことを意味します。

証人と検証者のたとえ

  • 変数ノード viv_i  vi​ :証人
  • チェックノード cjc_j  cj​ :検証者
と考えると、

検証者の処理

  μcj→vi=f(μv1→cj,…,μvn→cj)\mu_{c_j \rightarrow v_i} = f \left( \mu_{v_1 \rightarrow c_j}, \ldots, \mu_{v_n \rightarrow c_j} \right)μcj​→vi​​=f(μv1​→cj​​,…,μvn​→cj​​)他の証人全員の意見を集計して、
「パリティ条件から見て、この証人の発言は正しいか」
を判断します。

証人の処理

  μvi→cj=Lch(vi)+∑k∈Ci∖{j}μck→vi\mu_{v_i \rightarrow c_j} = L_{\mathrm{ch}}(v_i) + \sum_{k \in C_i \setminus \{j\}} \mu_{c_k \rightarrow v_i}μvi​→cj​​=Lch​(vi​)+k∈Ci​∖{j}∑​μck​→vi​​証人は、
「自分が見た事実」 + 「他の検証者の評価」
を合わせて、自分の証言の確信度を調整します。

反復復号

この情報交換を   t=1,2,…,Tt=1,2,\ldots,Tt=1,2,…,T回繰り返します。   μ(1)→μ(2)→⋯→μ(T)\mu^{(1)} \rightarrow \mu^{(2)} \rightarrow \cdots \rightarrow \mu^{(T)}μ(1)→μ(2)→⋯→μ(T)反復が進むにつれて各ビットのLLRが収束し、   Li=Lch(vi)+∑k∈Ciμck→viL_i = L_{\mathrm{ch}}(v_i) + \sum_{k \in C_i} \mu_{c_k \rightarrow v_i}Li​=Lch​(vi​)+k∈Ci​∑​μck​→vi​​が最終的な事後LLRとなります。

最終判定

  x^i={1(Li≥0)0(Li<0)\hat{x}_i= \begin{cases} 1 & (L_i \ge 0) \\ 0 & (L_i < 0) \end{cases}x^i​={10​(Li​≥0)(Li​<0)​また、   ∣Li∣|L_i|∣Li​∣が大きいほど、
「このビットは 0(または1)である」
という確信度が高いことを表します。

一行でまとめると

  \boxed{ \text{LDPC復号} = \text{「受信情報」と「近傍ノードの意見」を反復的に交換して確信度を高める処理} }LDPC復号=「受信情報」と「近傍ノードの意見」を反復的に交換して確信度を高める処理​と表現できます。

3. Polar Code (ポーラ符号)

イメージ: 「情報を『通りやすい道』と『通りにくい道』に整理し、大事な荷物だけを安全な道に通す」

通信路の結合と分離演算(Polarization / 偏極)によって、複数の平均的な通信路を「極めて高品質な極上ルート(容量 )」と「ノイズだらけの悪質ルート(容量 )」の極端な2群に分離します。

 元の通信路 (すべて同じ品質)       通信路偏極 (Channel Polarization)
  ┌──────┐                                 ┌────────────────────────┐
  │ W_1  │ ── (品質: 普通) ─┐              │  極上ルート (容量 ≒ 1) │ ─── データ bit
  └──────┘                  │              ├────────────────────────┤
  ┌──────┐                  ├──[偏極演算]─>│  極上ルート (容量 ≒ 1) │ ─── データ bit
  │ W_2  │ ── (品質: 普通) ─┤              ├────────────────────────┤
  └──────┘                  │              │  悪質ルート (容量 ≒ 0) │ ─── 0で固定 (Frozen bit)
  ┌──────┐                  │              ├────────────────────────┤
  │ W_3  │ ── (品質: 普通) ─┘              │  悪質ルート (容量 ≒ 0) │ ─── 0で固定 (Frozen bit)
  └──────┘                                 └────────────────────────┘

Polar符号の数式表現

Polar符号は、通信路の「良い部分」と「悪い部分」を人工的に作り出し、良い通信路だけに情報を載せる誤り訂正符号です。

1. 符号化

基本カーネル(Kernel)   F=[1011]F= \begin{bmatrix} 1 & 0\\ 1 & 1 \end{bmatrix}F=[11​01​]を用いて生成行列を構成します。

生成行列

  GN=BNF⊗nG_N = B_N F^{\otimes n}GN​=BN​F⊗nここで、   N=2nN=2^nN=2nです。

各記号の意味

  F⊗nF^{\otimes n}F⊗nカーネル行列 FFF の nnn 回クロネッカー積
  BNB_NBN​ビット反転(Bit-Reversal)置換行列
  GNG_NGN​Polar符号の生成行列

符号語の生成

情報ビット列   u=(u1,u2,…,uN)\mathbf{u} = (u_1,u_2,\ldots,u_N)u=(u1​,u2​,…,uN​)から符号語   x=(x1,x2,…,xN)\mathbf{x} = (x_1,x_2,\ldots,x_N)x=(x1​,x2​,…,xN​)を生成します。   x=uGN\mathbf{x} = \mathbf{u}G_Nx=uGN​

2. 通信路の極化(Channel Polarization)

通信路 WWW を繰り返し結合・分離すると、   W→WN(1),WN(2),…,WN(N)W \rightarrow W_N^{(1)},W_N^{(2)},\ldots,W_N^{(N)}W→WN(1)​,WN(2)​,…,WN(N)​という NNN 個の合成通信路が得られます。

バッタチャリアパラメータ

各通信路の信頼性は、   Z ⁣(WN(i))Z\!\left(W_N^{(i)}\right)Z(WN(i)​)によって評価されます。

バッタチャリアパラメータの解釈

  Z ⁣(WN(i))≈0Z\!\left(W_N^{(i)}\right)\approx 0Z(WN(i)​)≈0誤り確率が小さい   ⟹\Longrightarrow⟹安全な通信路
  Z ⁣(WN(i))≈1Z\!\left(W_N^{(i)}\right)\approx 1Z(WN(i)​)≈1誤り確率が大きい   ⟹\Longrightarrow⟹危険な通信路

極化定理

通信路数を無限大まで増やすと、   lim⁡N→∞Z ⁣(WN(i))∈{0,1}\lim_{N\to\infty} Z\!\left(W_N^{(i)}\right) \in \{0,1\}N→∞lim​Z(WN(i)​)∈{0,1}となります。 つまり、   0<Z<10<Z<10<Z<1の中途半端な通信路はほとんど消滅し、 すべての通信路は   非常に良い通信路\text{非常に良い通信路}非常に良い通信路または   非常に悪い通信路\text{非常に悪い通信路}非常に悪い通信路のいずれかへ極化されます。

3. 情報ビット配置

良い通信路集合を   AAAとします。 その補集合を   AcA^cAcとします。

ビット割り当て規則

  ui={di,i∈A0,i∈Acu_i= \begin{cases} d_i, & i\in A \\[8pt] 0, & i\in A^c \end{cases}ui​=⎩⎨⎧​di​,0,​i∈Ai∈Ac​

情報ビット

  i∈Ai\in Ai∈Aならば   ui=diu_i=d_iui​=di​を配置します。 ここで   did_idi​は実際に送りたい情報です。

Frozen Bit

  i∈Aci\in A^ci∈Acならば   ui=0u_i=0ui​=0を配置します。 これを   Frozen Bit\text{Frozen Bit}Frozen Bitと呼びます。

安全な道と危険な道の解釈

  A={i∣Z(WN(i))≈0}A = \left\{ i\mid Z(W_N^{(i)}) \approx 0 \right\}A={i∣Z(WN(i)​)≈0}安全な通信路の集合
  Ac={i∣Z(WN(i))≈1}A^c = \left\{ i\mid Z(W_N^{(i)}) \approx 1 \right\}Ac={i∣Z(WN(i)​)≈1}危険な通信路の集合
したがって、   情報→良い通信路\text{情報} \rightarrow \text{良い通信路}情報→良い通信路 固定値→悪い通信路\text{固定値} \rightarrow \text{悪い通信路}固定値→悪い通信路という配置を行います。

探偵の例での解釈

通信路を複数の探偵と考えると、
  • 優秀な探偵(信頼度が高い)
  • 信頼できない探偵(信頼度が低い)
に分かれていきます。 極化が進むと、   良い探偵⇒情報を担当\text{良い探偵} \Rightarrow \text{情報を担当}良い探偵⇒情報を担当 悪い探偵⇒答えを固定\text{悪い探偵} \Rightarrow \text{答えを固定}悪い探偵⇒答えを固定となります。 つまり Polar符号は、
「最も信頼できる通信路だけに重要な情報を載せ、信頼できない通信路は最初から既知の値に固定する」
という考え方に基づいています。

一行でまとめると

  Polar符号=通信路を極化し,良い通信路のみに情報を配置する符号\boxed{ \text{Polar符号} = \text{通信路を極化し,良い通信路のみに情報を配置する符号} }Polar符号=通信路を極化し,良い通信路のみに情報を配置する符号​さらに復号(SC復号・SCL復号)の数式も同じ体裁で整理すると、ターボ符号 → LDPC符号 → Polar符号が統一されたフォーマットで並べられます。

【解釈】 数学的に「安全」と証明されたインデックス集合 だけに送りたい情報を乗せ、危険な道 には受信側もあらかじめ知っているダミー値()を入れて捨て石にします。

各符号の数学的背景や、実際の使われ方(5Gなど)についてさらに深掘りできます:
Polar Code が 5G の制御信号で採用された理由を知りたい
ターボ復号の BCJR アルゴリズムの仕組みについて学ぶ
LDPC符号のタナーグラフと和積演算の具体的数値例を見る

もちろんです😊 ターボ符号(Turbo Codes)とLDPC符号(Low-Density Parity-Check Codes)は、通信業界では「シャノン限界に迫る夢の誤り訂正符号」として有名です。しかも、この2つには結構ドラマがあります。


まず、誤り訂正符号とは?

例えば、

「こんにちは」

を送ったとして、

通信中に

「こんぬちは」

になってしまうことがあります。

そこで、

「もし文字がおかしくなっても、元のデータを復元できる」

ように、余分な情報(冗長情報)を付けるのが誤り訂正符号です。


シャノン限界とは?

1948年にClaude Shannonが

「理論上、これ以上は無理という通信効率」

を数学的に証明しました。

これを

シャノン限界

と呼びます。

ところが長年、

「理論では可能でも、そんな符号は作れない」

と言われ続けていました。


1993年、通信業界がひっくり返る

ここで登場したのが

ターボ符号

開発者は

Claude Berrou と Alain Glavieux

1993年の国際会議で

「シャノン限界まであと0.5 dBくらいです」

という結果を発表。

会場は

「そんな馬鹿な」

という雰囲気。

論文の査読者も

「シミュレーションが間違ってる」

と思ったそうです。

しかし何度検証しても本当だった。

通信業界では

1993年ショック

みたいな扱いを受けます。


なぜTurboなの?

車のターボとは関係ありません(笑)

実は

復号器が

Decoder A
   ↓
Decoder B
   ↓
Decoder A
   ↓
Decoder B

という感じで、

何度も情報を交換しながら

性能がどんどん上がるため、

「ターボエンジンみたいだ」

ということでTurbo Codeになりました。


ターボ符号の面白いところ

普通の誤り訂正は

「一回だけ計算」

です。

しかしTurboは

たぶん0

↓

いや待てよ

↓

やっぱ1かも

↓

でも隣を見ると0だ

↓

じゃあ0だ!

みたいに

何十回も考え直します。

人間の推理に近いアルゴリズムです。


一方、LDPC符号

実はLDPCの歴史はもっと古いです。

1962年

Robert G. Gallager

がMITの博士論文で発表しました。

しかし当時は

計算量が多すぎる。

コンピュータも遅い。

誰も実装できない。

そこで

約30年間

ほぼ忘れられます。


そして1990年代

Turbo Codeが現れ、

世界中が

「反復復号って凄い!」

となりました。

そこで昔の論文を掘り返すと

GallagerのLDPCが

「これもっと良くない?」

となったのです。

ある意味、

30年間眠っていた天才アイデア

です。


LDPCって何?

Low Density

つまり

疎な行列

を使います。

例えば

普通なら

111011101101010111

みたいな行列ですが、

LDPCは

1000000100001000

みたいに

ほとんど0。

だから

計算量が少ない。


イメージすると

Turboは

二人の先生が

「この答え合ってる?」

「いや違う」

「じゃあこう」

と相談する方式

LDPCは

100人くらいが

「私はOK」

「ここ怪しい」

「ここも怪しい」

と多数決する方式

です。


なぜLDPCは強い?

LDPCは

グラフ理論

を使います。

ビット

○ ○ ○ ○ ○

   │

検査ノード

□ □ □ □

というネットワーク上で

メッセージを送り合います。

この

Belief Propagation(信念伝播)

が非常に強力です。

AIの確率推論や因子グラフにもつながる考え方で、「局所的な情報交換から全体のもっともらしい答えを見つける」という発想が共通しています。


業界ではどちらが人気?

昔

3G

Turbo一強

でした。

しかし

4G

Turboが主役
LDPCは一部

になり、

現在は

5G

データ通信

LDPC

制御信号

Polar Code

となっています。

つまり

Turboは引退気味です。


なぜTurboは負けた?

理由は

並列化できない

Turboは

A→B→A→B→A→B

という順番が重要。

CPUやGPUで大量並列化しにくい。

一方

LDPCは

□□□□□□□□□□

全部同時

と並列処理しやすい。

ASICやFPGAでも高速に実装でき、大容量通信との相性が良かったのです。


宇宙でも活躍

実は

LDPCは

衛星通信や深宇宙通信でも大人気です。

理由は

「少ない電力でも届く」

から。

宇宙探査機は

送信電力を増やせません。

だから

1ビットでも無駄なく送る技術

が命になります。


雑学①

Turbo Code登場後、

世界中の研究者が

「今までの研究は何だったんだ」

とショックを受けました。

1990年代後半は

Turbo関連論文が爆発的に増えました。


雑学②

Gallagerは

1962年に発明したLDPCが

30年以上経ってから世界標準になりました。

研究者の間では

「早すぎた天才」

の代表例として語られることがあります。


雑学③

現在の通信では

  • 5Gのデータチャネル:LDPC
  • 5Gの制御チャネル:Polar code
  • Wi-Fi 6/7:LDPC
  • 多くの衛星通信:LDPC

となっており、

LDPCは現代の高速・大容量通信を支える代表的な誤り訂正符号です。


ざっくり比較

項目 ターボ符号 LDPC符号
登場 1993年 1962年(本格普及は1990年代以降)
アイデア 2つの復号器が情報交換 グラフ上で多数のノードが協調
復号 反復復号 Belief Propagation
並列処理 やや苦手 とても得意
全盛期 3G・4G初期 4G後期〜5G・Wi-Fi・衛星通信
現在 一部で利用 現役の主力技術

通信の研究者の間では、「1990年代はターボ符号が『シャノン限界に近づける』ことを実証し、その流れの中で、Gallagerが1962年に提案していたLDPCが再評価され、現在の主役になった」という流れが、通信理論の歴史を語るうえで欠かせないエピソードとしてよく話題になります。


5Gの制御チャネル:Polar code とは?、 何ですか?、

いい質問です😊

実は**Polar Code(ポーラ符号)**は、通信理論では「シャノン限界を数学的に証明付きで達成した、初めての誤り訂正符号」として非常に有名です。

ターボ符号やLDPCとは少し思想が違います。


まず、なぜ5Gでは2種類の符号を使うの?

5Gでは

  • データ本体(動画・Web・ファイル) → LDPC
  • 制御情報 → Polar Code

という使い分けになっています。

なぜなら、

制御情報は

「1000文字送る」

ではなく

「今から通信開始」

「周波数を変更」

「この基地局へ接続して」

など、

短いデータだからです。


Polar Codeって何?

考え方は

通信路(チャネル)を

良い通信路

と

悪い通信路

に分けてしまいます。

だから

Polar(極端に分ける)

という名前です。


例えば

100本の通信路があるとします。

普通なら

全部そこそこ

ですが、

Polarでは

★★★★★
★★★★★
★★★★★

とても良い

----------------

★

★

★

とても悪い

こんな状態に変えてしまいます。

これを

チャネル分極(Channel Polarization)

と呼びます。


そして…

情報は

良い通信路だけに入れます。

悪い通信路には

0

など決め打ちの値を入れます。

これを

Frozen Bit(凍結ビット)

と呼びます。

つまり

良い場所

情報

情報

情報

------------

悪い場所

0

0

0

という構造になります。


なんでそんなことができるの?

ここが天才的です。

例えば

元データ

A

B

を

こんな演算で混ぜます。

A+B

B

(実際はXOR)

これを

何段も何段も繰り返します。

入力

↓

混ぜる

↓

混ぜる

↓

混ぜる

↓

出力

すると不思議なことに

通信路が

超良い

普通

悪い

超悪い

ではなく

超良い

超良い

超悪い

超悪い

みたいに

両極端になります。

これが

Polarization(分極)

です。


発明者は?

2008年

Erdal Arıkan

が発表しました。

しかも驚きなのは

論文の中で

「この方法ならシャノン限界を達成できる」

ことを数学的に証明しました。

これは通信理論では歴史的な成果でした。


TurboやLDPCとの違い

TurboやLDPCは

経験上

ものすごく性能がいい

という感じでした。

もちろん理論的な裏付けはありますが、

「この構成でシャノン限界に達する」という証明は簡単ではありません。

一方Polarは

数学で証明

↓

必ず近づく

という点が大きな違いです。


じゃあ最強?

実はそうでもありません(笑)

長いデータでは

LDPCの方が速い

ことが多いです。

逆に

短いデータでは

Polarが非常に強い。

だから5Gでは

短い制御

Polar

長いデータ

LDPC

という役割分担になりました。


なぜ制御チャネルに向いている?

基地局は

例えば

これから送るデータは

256ビットです

とか

この周波数を使って

など、

ほんの数十〜数百ビット程度の情報を送ります。

もしこれが壊れると

動画データが全部受信できなくなります。

つまり

制御情報は量は少ないけれど、非常に重要なのです。

Polar Codeは、このような比較的短いブロック長でも高い性能を発揮できるため、5Gの制御チャネルに採用されました。


業界の雑学

5Gの標準化(3GPP)では、

「制御チャネルにどの符号を採用するか」をめぐって、Polar CodeとLDPCを含む複数の候補が長く比較・議論されました。

最終的には、

  • 制御チャネル → Polar Code
  • データチャネル → LDPC

という住み分けに落ち着きました。

通信業界では、この決定は「両方式の得意分野を活かした設計」の好例として語られることがあります。


3つを一言でたとえると

  • ターボ符号:「二人の名探偵が何度も相談しながら真犯人を絞り込む」
  • LDPC符号:「大勢の証人が少しずつ情報を持ち寄り、多数の意見から正解を導く」
  • Polar Code:「情報を『通りやすい道』と『通りにくい道』に整理し、大事な荷物だけを安全な道に通す」

この3方式はアプローチこそ異なりますが、いずれも「ノイズで壊れた情報をできるだけ正確に復元する」という同じ目標に向かって発展してきた、現代通信技術の代表的な誤り訂正符号です。