マルチパスフェージングとダイバーシティ完全ガイド — 対策アンテナ・OFDM・MIMOの理論

IoT機器の無線通信で「電源を入れる位置を10 cmずらしただけで電波が入ったり入らなくなったりする」という現象に出会ったことはないでしょうか。家庭用Wi-Fiでも、ルータの真隣だと届くのにキッチンに行くと突然切れる、エレベータに乗ると圏外になる、新幹線の中で動画が頻繁に止まる——これらの現象には共通する物理的な犯人がいます。それがマルチパスフェージングです。送信機から放たれた電波が壁や床、家具、人体、ビル、地形に反射・回折・散乱して複数の経路(マルチパス) で受信機に到達し、それらが互いに干渉し合うことで、受信電力が距離に対してではなく半波長(2.4 GHz帯で約6 cm)単位の位置変化で激しく変動するのです。

この現象は決して「ニッチな問題」ではありません。むしろ、現代の無線通信システムの設計はほとんどすべてが「マルチパスフェージングをどう乗り越えるか」という問いから出発しています。具体的な応用先を挙げると:

  • IoTシステム(LPWA・920 MHz帯センサーネット): 屋内や都市部で「いつでもどこでも届く」を保証するため、両偏波パッチアンテナや2本のチップアンテナでダイバーシティを取り、ディープフェードによるパケット欠落を10分の1以下に抑える設計が標準
  • 4G/5Gモバイル通信: 基地局には2〜8本の受信アンテナが並び、MIMO(Multiple-Input Multiple-Output)でダイバーシティと空間多重を同時に獲得。高速移動車両でも100 ms以上の連続切断を防ぐ
  • 衛星通信(特に低軌道コンステレーション): 仰角の低い見通し外環境やビル街での反射、降雨減衰によるシンチレーションに対し、サイト・ダイバーシティや偏波ダイバーシティで可用性99.99 %を実現
  • 車載レーダー(77 GHz): 路面マルチパスを抑える偏波・空間ダイバーシティで、ゴースト・ターゲット(虚像)の発生を抑制

マルチパスフェージング対策の世界は「現象の物理 → 統計モデル → 対策手法(ダイバーシティ) → 合成方式 → システム設計」という美しい階層構造を持っており、これを一通り理解すると、SIMカードの設計から衛星リンクバジェット、Wi-Fi 7のMU-MIMOまで、現代の無線技術が驚くほど一つのストーリーで貫かれていることが見えてきます。

本記事の内容

  • マルチパス伝搬の物理(反射・回折・散乱)と受信信号の数学モデル
  • レイリーフェージング・ライスフェージング・対数正規シャドウイングの統計モデル
  • フェージング下でのBER劣化の定量計算($E_b/N_0$ vs エラー率)
  • ダイバーシティの4分類(空間・時間・周波数・偏波)と物理原理
  • 選択合成・等利得合成・最大比合成の数式と性能比較
  • アンテナ間隔とコヒーレンス距離(半波長則の根拠)
  • OFDM・MIMOによる暗黙のダイバーシティ獲得
  • Pythonによるフェージングシミュレーションと合成方式のBER比較

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

直感 — 反射波の干渉で電波が消える瞬間

二経路モデルで起こることをイメージする

最も単純な状況から始めましょう。送信機から受信機に向かって、直接波と1本の反射波の合計2本の経路で電波が届くとします。直接波の経路長を $d_0$、反射波の経路長を $d_1$ とすると、各経路の電界はおおよそ次のように書けます。

$$ E_0 = \frac{A_0}{d_0} e^{-j 2\pi d_0 / \lambda}, \quad E_1 = \Gamma \frac{A_1}{d_1} e^{-j 2\pi d_1 / \lambda} $$

ここで $\lambda$ は波長、$\Gamma$ は反射面での複素反射係数です。受信電界はこの二つの和 $E = E_0 + E_1$ で、その大きさを取ると干渉項が現れます。

$$ |E|^2 = |E_0|^2 + |E_1|^2 + 2|E_0||E_1|\cos\left(\frac{2\pi (d_1 – d_0)}{\lambda} + \angle\Gamma\right) $$

最後のコサイン項こそがフェージングの正体です。経路差 $d_1 – d_0$ が $\lambda$ の整数倍に近ければ強め合い(コンストラクティブ干渉)、半波長ずれれば打ち消し合います(ディスラクティブ干渉)。受信機が半波長動くだけで経路差が変わり、強め合いから打ち消しへスイッチする——これが「数cmで電波の強さがガラッと変わる」現象の物理的な説明です。

多数の反射波が重なるとレイリーになる

実際の屋内・市街地環境では反射波は1本どころではありません。壁、床、天井、家具、人体、ビル、街灯、街路樹、走行中の車——ありとあらゆる物体が反射体になり、$L$ 本($L = 10\sim100$)のマルチパスが受信点で同時に重なります。各パスの振幅と位相はランダムで、しかも経路長が波長に対して大きいため位相は実質的に一様分布になります。

中心極限定理を思い出してください。多数の独立な複素ランダムベクトル(小さな矢印)を足し合わせると、その総和は2次元複素ガウス分布に従います。つまり、受信複素包絡線 $r = r_I + j r_Q$ は、$r_I, r_Q$ がそれぞれ独立な平均0のガウス分布になります。このとき振幅 $|r| = \sqrt{r_I^2 + r_Q^2}$ はレイリー分布、電力 $|r|^2$ は指数分布に従います。

直感的には「無数の小さな矢印をランダムに足したら、合計の長さは指数的に小さい値を取りやすい(深いフェードが頻発する)」ということです。逆に、直接波(見通し成分、LoS)が支配的な場合は中心が原点からシフトしたガウスになり、振幅はライス分布に従います。LoS成分の比率が大きいほどフェードは浅くなります。

なぜ「対策アンテナ」が必要なのか

検索クエリ「マルチパスフェージング 対策 アンテナ」が示すように、実務で最初に問題になるのは「フェードしている瞬間に通信が落ちる」ことです。送信電力を上げてもディープフェード(平均から20 dB以上の落ち込み)の確率はほとんど変わりません——フェード深さは送信機の出力に依存しないからです。

そこで使われるのがダイバーシティ——同じ信号の独立なコピーを複数取得して合成する技術です。受信点で2本のアンテナを半波長以上離して置けば、それぞれのアンテナでのフェージングはほぼ独立になります。1本がディープフェードでも他方は正常な確率が圧倒的に高い。両者をうまく合成すれば、ディープフェードの発生確率は10分の1、100分の1に減らせます。これがIoTモジュールに両偏波パッチアンテナや2本のチップアンテナが載っている根本的な理由です。

直感のレベルで「マルチパスは干渉、フェードは打ち消し、ダイバーシティは独立コピー」とつかめたら、次は受信信号の数学モデルを精密化しましょう。

マルチパスチャネルの数学モデル

タップ付き遅延線モデル

$L$ 本のマルチパスが存在する環境で、送信信号 $s(t)$ に対する受信信号 $r(t)$ は次のように書けます。

$$ \begin{equation} r(t) = \sum_{l=0}^{L-1} \alpha_l(t)\, e^{j\phi_l(t)}\, s\bigl(t – \tau_l(t)\bigr) + n(t) \end{equation} $$

ここで:

  • $\alpha_l(t) \geq 0$: 第 $l$ パスの振幅減衰係数
  • $\phi_l(t) \in [0, 2\pi)$: 第 $l$ パスの位相シフト
  • $\tau_l(t) \geq 0$: 第 $l$ パスの伝搬遅延
  • $n(t)$: 加法性白色ガウス雑音(AWGN)

時間 $t$ の関数になっているのは、送受信機の移動や周囲物体の運動でチャネル特性が変化するためです。送信信号の帯域幅が狭く(フラットフェージング近似)、すべての遅延 $\tau_l$ がシンボル長より十分短ければ、信号は受信側で単一の複素係数 $h(t)$ を掛けたものとみなせます。

$$ r(t) \approx h(t)\, s(t) + n(t), \quad h(t) = \sum_{l=0}^{L-1} \alpha_l(t)\, e^{j\phi_l(t)} $$

この $h(t)$ がチャネル係数またはフェージング係数であり、複素ガウス分布に従うときレイリーフェージング、平均が0でない複素ガウスに従うときライスフェージングと呼ばれます。

三つの主要モデル

実環境のフェージングは大きく三つのスケールに分けてモデル化されます。

1. 大規模パスロス(large-scale path loss)

送受間距離 $d$ に対する平均受信電力の減衰。自由空間では $\propto 1/d^2$、市街地では $\propto 1/d^{n}$($n = 3.5\sim4$)に従う。

2. シャドウイング(log-normal shadowing)

ビルや地形による「物陰」効果による中規模変動。dB値(対数電力)が正規分布に従う:

$$ P_{\text{rx}}\,[\text{dB}] = \bar{P}(d) – X_\sigma, \quad X_\sigma \sim \mathcal{N}(0, \sigma^2) $$

標準偏差 $\sigma = 4\sim10$ dB が典型値。数十波長の距離スケールで変動する。

3. 小規模フェージング(small-scale multipath fading)

マルチパス干渉による半波長スケールの急激な変動。これがレイリー・ライス分布で記述される本記事のメインテーマ。

実システムの受信電力は、これら三つの効果の積(dB値の和)として表現されます。

$$ P_{\text{rx}}(d, t) = \bar{P}(d) \cdot 10^{-X_\sigma/10} \cdot |h(t)|^2 $$

リンクバジェットを計算するときは、平均パスロスにシャドウイング・フェージングのマージンを足し合わせ、目標可用性(例: 99 %)を達成する設計を行います。

レイリー分布の確率密度関数

$h = h_I + j h_Q$ で、$h_I, h_Q$ がそれぞれ独立な $\mathcal{N}(0, \sigma^2)$ に従うとき、振幅 $r = |h|$ の確率密度関数は:

$$ \begin{equation} f_R(r) = \frac{r}{\sigma^2} \exp\left(-\frac{r^2}{2\sigma^2}\right), \quad r \geq 0 \end{equation} $$

これは2次元ガウスを極座標表示し、角度方向を積分することで得られます。具体的には、結合密度

$$ f_{R, \Theta}(r, \theta) = \frac{r}{2\pi\sigma^2} \exp\left(-\frac{r^2}{2\sigma^2}\right) $$

から角度 $\theta$ を $[0, 2\pi)$ で積分して $f_R(r) = (r/\sigma^2)e^{-r^2/(2\sigma^2)}$ が出ます。包絡線の平均値と平均電力は:

$$ \mathbb{E}[R] = \sigma\sqrt{\pi/2}, \quad \mathbb{E}[R^2] = 2\sigma^2 = \bar{P} $$

電力の確率分布は指数分布:

$$ f_P(p) = \frac{1}{\bar{P}} \exp\left(-\frac{p}{\bar{P}}\right) $$

となり、累積分布関数(CDF)は $F_P(p) = 1 – e^{-p/\bar{P}}$ と簡潔です。「電力が平均の $x$ 倍以下になる確率」が $1 – e^{-x}$ で与えられる、極めて扱いやすい分布です。

ライス分布とKファクター

直接波(LoS)成分 $A$ がある場合、$h_I \sim \mathcal{N}(A\cos\theta_0, \sigma^2)$、$h_Q \sim \mathcal{N}(A\sin\theta_0, \sigma^2)$ となり、振幅 $r = |h|$ はライス分布:

$$ \begin{equation} f_R(r) = \frac{r}{\sigma^2} \exp\left(-\frac{r^2 + A^2}{2\sigma^2}\right) I_0\left(\frac{rA}{\sigma^2}\right), \quad r \geq 0 \end{equation} $$

ここで $I_0(\cdot)$ は第1種変形ベッセル関数。Kファクターは直接波電力 $A^2$ と散乱波電力 $2\sigma^2$ の比:

$$ K = \frac{A^2}{2\sigma^2}, \quad K\,[\text{dB}] = 10\log_{10}(A^2/(2\sigma^2)) $$

  • $K = 0$($-\infty$ dB): 直接波なし → レイリー
  • $K \to \infty$: 直接波支配 → AWGNに漸近
  • 屋内見通し: $K = 5\sim15$ dB
  • 屋外見通し: $K = 10\sim20$ dB
  • 都市非見通し: $K = -5\sim5$ dB

Kファクターは伝搬環境の「視程の良さ」を一つの数値に圧縮した重要な指標で、衛星通信や航空通信のリンク設計で必ず登場します。

ここまでで「チャネル係数 $h$ がどんな統計分布に従うか」が定まりました。次に、このフェージング下で実際にビット誤りがどれだけ増えるのかを定量化しましょう。

フェージング下のBER劣化

AWGNチャネルでのBPSKエラー率(復習)

雑音だけのAWGNチャネルで、ビットあたりSNRを $\gamma_b = E_b/N_0$ とするとき、BPSKのビット誤り率は:

$$ P_e^{\text{AWGN}}(\gamma_b) = Q(\sqrt{2\gamma_b}) = \frac{1}{2}\text{erfc}(\sqrt{\gamma_b}) $$

ここで $Q(x) = \frac{1}{\sqrt{2\pi}}\int_x^\infty e^{-t^2/2}\,dt$ はガウスの相補CDFです。AWGNではSNRを10 dB上げるとエラー率は約10桁改善する指数的減衰が特徴。これは「雑音はガウスだから尾の確率は指数的に小さい」という事実の直接の帰結です。

レイリーフェージングでの平均BER

レイリーチャネルでは瞬時SNR $\gamma = |h|^2 \gamma_b / \bar{|h|^2}$ がランダムに変動するので、平均BERは瞬時BERを電力分布で平均したもの:

$$ \bar{P}_e^{\text{Ray}} = \int_0^\infty Q(\sqrt{2\gamma})\, f_\gamma(\gamma)\, d\gamma $$

ここで $f_\gamma(\gamma) = (1/\bar{\gamma})e^{-\gamma/\bar{\gamma}}$ は指数分布、$\bar{\gamma}$ は平均SNRです。この積分は閉形式で解けて:

$$ \begin{equation} \bar{P}_e^{\text{Ray}}(\bar{\gamma}) = \frac{1}{2}\left(1 – \sqrt{\frac{\bar{\gamma}}{1+\bar{\gamma}}}\right) \end{equation} $$

高SNR近似 $\bar{\gamma} \gg 1$ で $\bar{P}_e \approx 1/(4\bar{\gamma})$ となり、エラー率がSNRに反比例(1次の多項式減衰)するだけ。SNRを10 dB上げてもエラー率は1/10にしかなりません。AWGNの指数減衰と比較すると、フェージングの深刻さがはっきり見えます。

具体的数値で比較

$\text{BER} = 10^{-3}$ を達成するために必要な平均SNRは:

チャネル 必要 $\bar{\gamma}$
AWGN(フェージングなし) 約7 dB
レイリーフェージング 約24 dB
レイリー + MRC 2分岐 約13 dB
レイリー + MRC 4分岐 約9 dB

フェージングだけで17 dB(50倍)のSNRペナルティが発生することがわかります。逆に、ダイバーシティ4分岐で大部分(15 dB分)を取り戻せる。これがダイバーシティを使う最大のモチベーションです。

アウテージ確率

リアルタイム通信では「平均BER」より「ある瞬間にエラー率が許容値を超える確率」のほうが重要です。これをアウテージ確率と呼びます。瞬時SNRがしきい値 $\gamma_{\text{th}}$ を下回る確率:

$$ P_{\text{out}}(\gamma_{\text{th}}) = \Pr(\gamma < \gamma_{\text{th}}) = 1 - \exp(-\gamma_{\text{th}}/\bar{\gamma}) $$

$\gamma_{\text{th}} \ll \bar{\gamma}$ の領域では $P_{\text{out}} \approx \gamma_{\text{th}}/\bar{\gamma}$ となり、こちらもSNRに反比例。$L$ 分岐MRCではこのスケーリングが $1/\bar{\gamma}^L$ に改善し、これがダイバーシティ次数の本質です。

平均SNRを10 dB上げてもエラー率が10分の1にしかならないという厳しい現実が確認できたので、次は具体的な対策——ダイバーシティ手法の分類と物理原理に進みます。

ダイバーシティ手法の四分類

基本原理 — 独立フェージングの取得

ダイバーシティの中核は「同じ情報を独立にフェージングする $L$ 個の経路で運び、合成する」ことです。各経路のフェード確率を $p$ とすると、全経路が同時にフェードする確率は独立性から $p^L$ になります。$p = 0.1$ なら $L = 2$ で $0.01$、$L = 4$ で $0.0001$。ダイバーシティ次数 $L$ を上げると、アウテージ確率が指数的に減るという劇的な改善が得られます。

「独立にフェージングする経路」を得る方法は物理パラメータの違いによって四つに分類されます。

1. 空間ダイバーシティ(Space Diversity)

複数のアンテナを物理的に離して配置し、各アンテナの受信信号を独立な分岐として使う最も古典的な方式。アンテナ間隔 $d$ がコヒーレンス距離以上であれば、各アンテナでのフェージングは独立になります。

  • 基地局側: 移動局からの上り信号に対し、$10\lambda$ 以上の間隔で4〜8本受信
  • 端末側: スマートフォンには2〜4本のアンテナ。半波長($\lambda/2 \approx 6$ cm @ 2.4 GHz)程度の間隔
  • IoTモジュール: 2本のチップアンテナまたはダイバーシティパッチアンテナ

実装が比較的容易で、現代の無線通信で最も普及している方式です。

2. 時間ダイバーシティ(Time Diversity)

同じ信号を異なる時刻に送る方式。時間間隔がコヒーレンス時間 $T_c$ より大きければ、各時刻でのフェージングは独立です。

具体的には符号化+インターリーバが時間ダイバーシティの実装。ターボ符号やLDPC符号と、ビットを時間的にバラバラに並べ替えるインターリーバを組み合わせると、ある瞬間のディープフェードで連続して落ちたビット群が、復号時には散らばっているため誤り訂正が効きやすくなります。ARQ(自動再送要求) も広い意味で時間ダイバーシティに含まれます。

3. 周波数ダイバーシティ(Frequency Diversity)

同じ情報を異なる搬送波周波数で送る方式。周波数間隔がコヒーレンス帯域幅 $B_c$ より大きければ、各周波数でのフェージングは独立です。

  • 周波数ホッピング(FH-SS): Bluetooth、軍用無線で広く使用
  • OFDM: サブキャリア間でビットをインターリーブし、周波数ダイバーシティを自動取得(後述)
  • 拡散スペクトル(DS-SS): 信号を $B_c$ より広い帯域に拡散

LTE、5G、Wi-Fi 6/7 はすべて OFDM を採用しており、周波数ダイバーシティはモバイル通信の根幹技術になっています。

4. 偏波ダイバーシティ(Polarization Diversity)

垂直偏波と水平偏波(または右旋・左旋円偏波)の直交2偏波で受信する方式。マルチパス環境では反射のたびに偏波状態が乱れるため、直交2偏波間のフェージングは比較的独立です。

空間ダイバーシティと違いアンテナを離す必要がないため、小型端末(スマートフォン、IoTモジュール)に最適。両偏波パッチアンテナ(XPD: cross-polarization discrimination が高いパッチ)を1個搭載するだけで2分岐ダイバーシティが得られます。

ただし偏波が完全に独立になるわけではなく、相関係数は環境依存($0.3\sim0.7$)です。空間+偏波の併用で実効的なダイバーシティ次数を稼ぐのが現代的な設計トレンドです。

角度ダイバーシティ・パターンダイバーシティ

派生として、アンテナの放射指向性を変えて異なる方向からのマルチパスを別経路として捉える角度ダイバーシティや、放射パターン形状そのものを変えるパターンダイバーシティもあります。フェーズドアレイアンテナのビーム切替はこのカテゴリに含まれます。

四つの分類で物理経路を独立化する手段が出揃ったので、次はそれらをどう「合成」するかの数学に移ります。合成方式によって性能が大きく変わります。

合成方式の理論

一般化された合成

$L$ 本のダイバーシティ分岐の受信信号を $r_l = h_l s + n_l$($l = 1, \dots, L$)と書きます。ここで $h_l$ は分岐 $l$ のチャネル係数、$n_l \sim \mathcal{CN}(0, N_0)$ は雑音、$s$ は送信シンボルです。合成器は重み $w_l$ で線形結合します:

$$ y = \sum_{l=1}^{L} w_l^* r_l = \left(\sum_l w_l^* h_l\right) s + \sum_l w_l^* n_l $$

合成後SNRは:

$$ \gamma_{\text{out}} = \frac{\left|\sum_l w_l^* h_l\right|^2 |s|^2}{N_0 \sum_l |w_l|^2} $$

この $\gamma_{\text{out}}$ を最大化する $w_l$ の選び方が合成方式の本質です。

選択合成(Selection Combining, SC)

最も単純: 最大瞬時SNR を持つ分岐だけ選ぶ。

$$ \gamma_{\text{SC}} = \max_l \gamma_l, \quad \gamma_l = |h_l|^2 / N_0 $$

実装は SNR モニタとスイッチだけで済むが、選ばれなかった分岐の信号エネルギーを捨ててしまう。

レイリー独立分岐での $\gamma_{\text{SC}}$ のCDFは:

$$ F_{\gamma_{\text{SC}}}(\gamma) = \prod_{l=1}^{L} \left(1 – e^{-\gamma/\bar{\gamma}_l}\right) = \left(1 – e^{-\gamma/\bar{\gamma}}\right)^L $$

(同一平均SNR $\bar{\gamma}$ の場合)。これからアウテージ確率は $P_{\text{out}}^{\text{SC}} \approx (\gamma_{\text{th}}/\bar{\gamma})^L$ となり、確かにダイバーシティ次数 $L$ を達成しています。

等利得合成(Equal Gain Combining, EGC)

すべての分岐の位相だけを揃え、振幅は等しく扱う:

$$ w_l = e^{j\phi_l}, \quad y_{\text{EGC}} = \sum_l e^{-j\phi_l} r_l $$

ここで $\phi_l = \angle h_l$。位相補正だけで実装でき、振幅推定が不要なので雑音環境に強い。合成後SNRは:

$$ \gamma_{\text{EGC}} = \frac{\left(\sum_l |h_l|\right)^2}{L N_0} $$

SCより良いがMRCより劣る中間的な性能で、コーシー・シュワルツの等号成立条件 $w_l \propto h_l$ を満たしていないことが性能低下の原因です。

最大比合成(Maximal Ratio Combining, MRC)

合成後SNRを最大化する最適な方式。コーシー・シュワルツ不等式

$$ \left|\sum_l w_l^* h_l\right|^2 \leq \sum_l |w_l|^2 \cdot \sum_l |h_l|^2 $$

の等号は $w_l = h_l$ で成立。よって最適重みは:

$$ \begin{equation} w_l = h_l, \quad y_{\text{MRC}} = \sum_l h_l^* r_l \end{equation} $$

各分岐をチャネル係数の複素共役で重み付けし合計する。合成後SNRは:

$$ \begin{equation} \gamma_{\text{MRC}} = \sum_{l=1}^{L} \gamma_l \end{equation} $$

各分岐の瞬時SNRの単純和になる、非常に美しい結果です。

MRCの導出(詳細)

導出を一行ずつたどります。合成信号 $y = \sum_l w_l^* (h_l s + n_l)$ の信号成分と雑音成分は:

$$ \text{signal} = \left(\sum_l w_l^* h_l\right) s, \quad \text{noise} = \sum_l w_l^* n_l $$

雑音は独立ガウスの和で分散 $\sigma_n^2 = N_0 \sum_l |w_l|^2$。信号電力対雑音電力比は:

$$ \gamma_{\text{out}} = \frac{|\sum_l w_l^* h_l|^2 \cdot E_s}{N_0 \sum_l |w_l|^2} $$

ここで $E_s = \mathbb{E}[|s|^2]$。コーシー・シュワルツの等号条件 $w_l = c h_l$($c$ は任意定数)を代入すると、

$$ \gamma_{\text{out}} = \frac{|\sum_l c^* h_l^* h_l|^2 E_s}{N_0 |c|^2 \sum_l |h_l|^2} = \frac{|c|^2 (\sum_l |h_l|^2)^2 E_s}{N_0 |c|^2 \sum_l |h_l|^2} = \frac{\sum_l |h_l|^2 E_s}{N_0} $$

ここで $|c|^2$ が約分されることに注意。各分岐の瞬時SNR $\gamma_l = |h_l|^2 E_s / N_0$ を代入すると $\gamma_{\text{MRC}} = \sum_l \gamma_l$ が得られます。

MRCの平均BER

レイリー独立分岐(同一 $\bar{\gamma}$)でのBPSK平均BERは閉形式で書けます:

$$ \bar{P}_e^{\text{MRC}}(\bar{\gamma}, L) = \left(\frac{1-\mu}{2}\right)^L \sum_{k=0}^{L-1} \binom{L-1+k}{k} \left(\frac{1+\mu}{2}\right)^k $$

ここで $\mu = \sqrt{\bar{\gamma}/(1+\bar{\gamma})}$。高SNR近似では:

$$ \bar{P}_e^{\text{MRC}} \approx \binom{2L-1}{L} \cdot \frac{1}{(4\bar{\gamma})^L} $$

エラー率が $1/\bar{\gamma}^L$ で減衰、すなわちSNRを10 dB上げるとエラー率が $10^L$ 分の1になる。ダイバーシティなしの $1/\bar{\gamma}$ と比べて、ダイバーシティの威力が劇的に表れます。

三方式の性能ヒエラルキー

同じ4分岐レイリーで $\text{BER} = 10^{-3}$ を達成するのに必要な分岐あたり平均SNR:

  • 合成なし: $24$ dB
  • SC: $13$ dB
  • EGC: $10$ dB
  • MRC: $9$ dB

SCとMRCの差は約4 dB、EGCとMRCはほぼ1 dB差。EGCは「振幅推定なしでMRCに肉薄できる」という美味しい選択肢で、実装制約の厳しい受信機で重宝されます。

合成方式の理論が固まったので、空間ダイバーシティの肝である「アンテナをどれだけ離せば独立になるか」を物理的に詰めましょう。

アンテナ間隔とコヒーレンス距離

一様散乱モデル(Clarke/Jakesモデル)

アンテナ間隔とフェージングの空間相関を最も単純に記述するのが、水平面に一様に散乱波が到来すると仮定するクラーク(Clarke)モデルです。アンテナの位置を変えて受信した信号 $h(\bm{x})$ と $h(\bm{x} + \bm{d})$ の正規化相関関数は、零次ベッセル関数で与えられます:

$$ \begin{equation} \rho(d) = J_0\left(\frac{2\pi d}{\lambda}\right) \end{equation} $$

ここで $d = |\bm{d}|$ はアンテナ間距離、$\lambda$ は波長です。

コヒーレンス距離

「フェージングがほぼ独立とみなせる」距離をコヒーレンス距離 $d_c$ と呼びます。$\rho(d_c) = 0.5$ で定義すれば $J_0(2\pi d_c/\lambda) = 0.5$ から:

$$ d_c \approx 0.18 \lambda $$

実用上は半波長間隔 $d = \lambda/2$ がよく使われ、$\rho(\lambda/2) \approx -0.30$ となり「ほぼ独立」とみなせます(相関の絶対値が小さい)。

周波数帯 $\lambda$ $\lambda/2$
920 MHz(LPWA) 32.6 cm 16.3 cm
2.4 GHz(Wi-Fi/BLE) 12.5 cm 6.2 cm
5 GHz(Wi-Fi) 6.0 cm 3.0 cm
28 GHz(5G mmWave) 1.07 cm 5.4 mm

ミリ波帯では半波長が数mmと極小なので、フェーズドアレイで数十〜数百素子を1チップに集積できる——これが5G NRやWiGig(IEEE 802.11ay)の物理的な強みです。

偏波ダイバーシティでの相関

偏波ダイバーシティでの2偏波間相関は環境依存ですが、典型値:

  • 屋内Rich Scattering: $|\rho| = 0.1\sim0.3$
  • 屋外LoS: $|\rho| = 0.5\sim0.7$
  • 屋外NLoS: $|\rho| = 0.2\sim0.4$

「アンテナ間隔ゼロでも相関0.3程度の独立性が得られる」点が偏波ダイバーシティの最大の魅力です。

角度スプレッドの影響

クラークモデルは「水平面一様散乱」を仮定していますが、実環境では到来波の角度分布が偏ることが多い(特に屋外マクロセル)。角度スプレッド(angular spread) $\sigma_\theta$ が小さいほど空間相関は遠くまで残り、コヒーレンス距離は長くなります。

近似的には:

$$ d_c \approx \frac{0.18\lambda}{\sigma_\theta\,[\text{rad}]} $$

基地局アンテナのように到来角が狭い($\sigma_\theta = 5\sim10^\circ$)と、コヒーレンス距離は $5\sim10\lambda$ にまで広がります。だから基地局では端末よりはるかに大きいアンテナ間隔が必要になるのです。

空間ダイバーシティの物理的根拠が定まったので、現代の無線通信で実質的に「ダイバーシティの主役」になっているOFDMとMIMOに移ります。

OFDMによる周波数ダイバーシティ

周波数選択性フェージングの問題

伝送帯域幅 $W$ がコヒーレンス帯域幅 $B_c \approx 1/(5\sigma_\tau)$ より広い場合($W > B_c$、周波数選択性フェージング)、シングルキャリア伝送ではシンボル間干渉(ISI)が深刻化し、複雑な等化器が必要になります。

LTEやWi-Fiでは数十MHzの帯域を使うため、市街地マルチパス($\sigma_\tau = 1\sim3\,\mu\text{s}$、$B_c = 67\sim200$ kHz)に対して $W \gg B_c$ が成立し、必ず周波数選択性が出ます。

OFDMの基本アイデア

OFDM(Orthogonal Frequency Division Multiplexing) は広帯域 $W$ を $N$ 本の狭帯域サブキャリアに分割し、各サブキャリアの帯域 $\Delta f = W/N$ を $B_c$ より狭くする方式です。各サブキャリア内ではチャネルがフラットフェージングに見えるため、複雑な等化が不要になります。

実装上は、$N$ 本のサブキャリアの並列伝送を逆FFT(IFFT)で実現:

$$ x[n] = \sum_{k=0}^{N-1} X[k] \, e^{j 2\pi k n / N}, \quad n = 0, 1, \dots, N-1 $$

$X[k]$ は第 $k$ サブキャリアに載せたシンボル(QPSKやQAM)、$x[n]$ は時間領域のOFDMシンボルサンプル。受信側はFFTで $X[k]$ を取り出せます。サイクリックプレフィックス(CP)の付加でISIを完全に除去できる点も実用上の大きな利点です。

サブキャリアごとのフラットフェージング

OFDMチャネルは各サブキャリアで単一複素係数 $H[k]$ で表現できます:

$$ Y[k] = H[k] X[k] + N[k] $$

ここで $H[k] = \sum_l \alpha_l e^{-j 2\pi k \tau_l / (N T_s)}$ はチャネルインパルス応答のDFT。各 $H[k]$ は周波数選択性チャネルの「周波数ごとのスナップショット」です。隣接サブキャリアの $H[k]$ は強く相関しますが、$\Delta k \cdot \Delta f > B_c$ 離れたサブキャリアでは独立になります。

OFDMの暗黙のダイバーシティ

ビットを インターリーブして複数のサブキャリアに分散 し、誤り訂正符号と組み合わせると、$N$ サブキャリアにわたる周波数ダイバーシティが得られます。あるサブキャリアがディープフェードで全ビットを失っても、別のサブキャリアにある同じ符号語のビットが救出できるため、復号後のBERが劇的に下がります。

これが LTE/5G/Wi-Fi が「マルチパスを敵にしない」で動ける根本理由です。OFDM自体は周波数選択性フェージングを「ばらして」しまうので、マルチパスがあるほど(ただし $B_c$ 未満なら)むしろ周波数ダイバーシティ次数が上がるという、ある意味マルチパスを味方につける美しい技術です。

MIMOによる空間多重とダイバーシティ

MIMOの基本構成

送信側 $N_t$ 本、受信側 $N_r$ 本のアンテナを用い、入出力関係を行列で表します:

$$ \bm{y} = \bm{H} \bm{x} + \bm{n}, \quad \bm{H} \in \mathbb{C}^{N_r \times N_t} $$

ここで $\bm{H}$ の各要素 $h_{ij}$ は送信アンテナ $j$ から受信アンテナ $i$ への複素チャネル係数。各 $h_{ij}$ が独立レイリーフェージングする「Rich Scattering MIMOチャネル」が解析の出発点です。

二つの利得 — ダイバーシティ vs 多重

MIMOには独立な二つの利得があります:

  • ダイバーシティ利得: チャネル係数の独立コピーが $N_t N_r$ 個得られ、最大 $N_t N_r$ 次のダイバーシティが取れる
  • 多重利得(空間多重): 最大 $\min(N_t, N_r)$ 個の独立データストリームを同時送信、容量を線形に増やせる

Zheng-Tse のダイバーシティ・多重トレードオフ(DMT)定理が、両者を同時には最大化できないことを定量化しています。実用システムは状況に応じて両者の最適バランスを取ります。

送信ダイバーシティ — Alamoutiの巧妙さ

受信側の MRC は受信ダイバーシティの最適合成ですが、送信側でダイバーシティを取るのは「受信側で何が起きているか送信側は知らない」ため難しい問題でした。1998年に Alamouti が提案した空時ブロック符号(STBC) は $N_t = 2$ で完全な送信ダイバーシティ次数2を達成する画期的な符号です:

時刻1で $s_1, s_2$ を送り、時刻2で $-s_2^*, s_1^*$ を送る。受信側で:

$$ \begin{pmatrix} y_1 \\ y_2^* \end{pmatrix} = \begin{pmatrix} h_1 & h_2 \\ h_2^* & -h_1^* \end{pmatrix} \begin{pmatrix} s_1 \\ s_2 \end{pmatrix} + \begin{pmatrix} n_1 \\ n_2^* \end{pmatrix} $$

行列が直交($\bm{H}^H \bm{H} = (|h_1|^2 + |h_2|^2)\bm{I}$)になるので、シンプルな線形演算でMRC相当の性能が得られます。これがWiMAX、LTEの送信ダイバーシティモードの基礎です。

空間多重と容量

完全な$\bm{H}$ 知識ありの場合、MIMO容量はシャノン式の拡張:

$$ C = \log_2 \det\left(\bm{I} + \frac{\bar{\gamma}}{N_t}\bm{H}\bm{H}^H\right)\,[\text{bit/s/Hz}] $$

$\bm{H}$ をSVD分解 $\bm{H} = \bm{U}\bm{\Sigma}\bm{V}^H$ し、特異値 $\sigma_i$ を持つ並列チャネルに分解すると:

$$ C = \sum_{i=1}^{\min(N_t, N_r)} \log_2(1 + \sigma_i^2 \bar{\gamma}/N_t) $$

高SNRでは $C \approx \min(N_t, N_r) \cdot \log_2(\bar{\gamma})$ と、自由度の数だけ容量が線形に増えます。これが5Gの「同じ周波数で速度N倍」の数学的根拠です。

MIMOは空間ダイバーシティと空間多重を統合した究極の対策で、4G/5G/Wi-Fi 6以降の標準技術となりました。詳細は MIMOの基礎 を参照してください。

理論が一通り出揃ったので、Python で実際にフェージングをシミュレートし、合成方式の効果を可視化しましょう。

Python実装 — フェージング統計の可視化

レイリー・ライス分布のシミュレーション

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import rayleigh, rice
from scipy.special import i0

np.random.seed(42)

# パラメータ
N = 200_000          # サンプル数
sigma = 1.0           # ガウス成分の標準偏差

# レイリーフェージング: 平均0の独立複素ガウス
h_ray = (np.random.randn(N) + 1j * np.random.randn(N)) * sigma / np.sqrt(2)
R_ray = np.abs(h_ray)

# ライスフェージング: K = 5 dB の直接波あり
K_dB = 5
K = 10 ** (K_dB / 10)
# 全電力 1 を仮定: A^2 + 2 sigma^2 = 1, K = A^2 / (2 sigma^2)
# → 2 sigma^2 = 1 / (K+1), A^2 = K / (K+1)
sigma_rice = np.sqrt(1 / (2 * (K + 1)))
A = np.sqrt(K / (K + 1))
h_rice = A + sigma_rice * (np.random.randn(N) + 1j * np.random.randn(N))
R_rice = np.abs(h_rice)

# 理論PDFと比較
r = np.linspace(0, 4, 400)
pdf_ray = (r / sigma**2) * np.exp(-r**2 / (2 * sigma**2))
pdf_rice = (r / sigma_rice**2) * np.exp(-(r**2 + A**2) / (2 * sigma_rice**2)) \
           * i0(r * A / sigma_rice**2)

fig, axes = plt.subplots(1, 2, figsize=(13, 5))

# レイリー
axes[0].hist(R_ray, bins=80, density=True, alpha=0.5, color='steelblue',
             label='Simulation')
axes[0].plot(r, pdf_ray, 'r-', lw=2, label=r'Rayleigh PDF $\sigma=1$')
axes[0].set_xlabel('Envelope amplitude r')
axes[0].set_ylabel('PDF')
axes[0].set_title('Rayleigh Fading Envelope')
axes[0].legend(); axes[0].grid(alpha=0.3); axes[0].set_xlim(0, 4)

# ライス
axes[1].hist(R_rice, bins=80, density=True, alpha=0.5, color='seagreen',
             label='Simulation')
axes[1].plot(r, pdf_rice, 'r-', lw=2, label=f'Rician PDF K={K_dB} dB')
axes[1].plot(r, pdf_ray / np.max(pdf_ray) * np.max(pdf_rice) * 0.6, 'b--',
             alpha=0.5, label='Rayleigh (ref, scaled)')
axes[1].set_xlabel('Envelope amplitude r')
axes[1].set_ylabel('PDF')
axes[1].set_title(f'Rician Fading Envelope (K = {K_dB} dB)')
axes[1].legend(); axes[1].grid(alpha=0.3); axes[1].set_xlim(0, 2)

plt.tight_layout()
plt.savefig('fading_pdf.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから三つのポイントが読み取れます。まずレイリー分布のシミュレーションヒストグラムと理論PDFが完璧に一致しており、振幅が $r = \sigma$ でピーク、$r = 0$ も無視できない確率を持ちます——これが「ディープフェード頻発」の正体です。次に、ライス分布(K=5 dB)では分布の中心が右にシフトし、$r$ が小さい領域の確率質量が大幅に減少しています。直接波が振幅の「下駄」を履かせるイメージです。Kが大きくなるほどガウス分布に漸近し、フェードはなくなっていきます。

受信電力の時系列とディープフェード頻度

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter

np.random.seed(0)

# 時間相関を持つレイリーフェージング(Jakesスペクトル近似)
# 簡易版: ガウシアン白色 → 低域フィルタでドップラー帯域に制限
fs = 1000.0           # サンプリングレート [Hz]
fd = 20.0             # ドップラー周波数 [Hz]
T = 5.0               # 観測時間 [s]
N = int(fs * T)

# 独立な実部・虚部の白色ガウス
w = (np.random.randn(N) + 1j * np.random.randn(N)) / np.sqrt(2)
# 5次バターワース低域フィルタ(ドップラー帯域)
from scipy.signal import butter, filtfilt
b, a = butter(5, fd / (fs / 2))
h = filtfilt(b, a, w)
# 正規化(平均電力1)
h = h / np.sqrt(np.mean(np.abs(h)**2))

P_dB = 10 * np.log10(np.abs(h) ** 2)

# ディープフェード閾値
threshold_dB = -10
fade_mask = P_dB < threshold_dB
n_fades = np.sum(np.diff(fade_mask.astype(int)) > 0)
fade_rate = n_fades / T

fig, ax = plt.subplots(figsize=(13, 5))
t = np.arange(N) / fs
ax.plot(t, P_dB, color='steelblue', lw=0.8, label='Rayleigh power [dB]')
ax.axhline(threshold_dB, color='red', ls='--', lw=1.5,
           label=f'{threshold_dB} dB threshold')
ax.fill_between(t, P_dB, threshold_dB, where=fade_mask, color='red', alpha=0.3,
                label='Deep fade')
ax.set_xlabel('Time [s]')
ax.set_ylabel('Instantaneous power [dB]')
ax.set_title(f'Rayleigh fading time series (fd={fd:.0f} Hz, '
             f'fade rate={fade_rate:.1f}/s)')
ax.set_ylim(-30, 10); ax.legend(loc='lower right'); ax.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('fading_timeseries.png', dpi=150, bbox_inches='tight')
plt.show()

時系列から、ディープフェードがランダムなタイミングで頻発する様子がはっきり見えます。ドップラー20 Hz(歩行速度2.4 GHz相当)の環境では、5秒間で20回程度の-10 dB以下のフェードイベントが発生しており、平均的に250 msに1回のペース。これがリアルタイム動画やVoIPの音声途切れの原因です。ドップラーが上がる(移動速度が増える)とフェード率も比例して上がります——新幹線の速度になると秒間100回近いペースになり、エラー訂正の追従が困難になります。

ダイバーシティの効果 — アウテージ確率の改善

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)

N = 100_000
L_list = [1, 2, 3, 4, 6]
SNR_th_dB = np.linspace(-30, 10, 100)

fig, ax = plt.subplots(figsize=(10, 6))

for L in L_list:
    # L 分岐の独立レイリーフェージング電力(平均1)
    P_branches = np.zeros((L, N))
    for l in range(L):
        h = (np.random.randn(N) + 1j * np.random.randn(N)) / np.sqrt(2)
        P_branches[l] = np.abs(h) ** 2

    # 選択合成: max(branch power)
    P_SC = np.max(P_branches, axis=0)
    # MRC: sum(branch power)
    P_MRC = np.sum(P_branches, axis=0)

    # アウテージ確率: P(power < threshold)
    P_out_SC = np.array([np.mean(P_SC < 10**(th/10)) for th in SNR_th_dB])
    P_out_MRC = np.array([np.mean(P_MRC < 10**(th/10)) for th in SNR_th_dB])

    if L == 1:
        ax.semilogy(SNR_th_dB, P_out_SC, lw=2, label=f'No diversity (L=1)')
    else:
        ax.semilogy(SNR_th_dB, P_out_SC, '--', lw=1.5,
                    label=f'SC L={L}')
        ax.semilogy(SNR_th_dB, P_out_MRC, '-', lw=1.5,
                    label=f'MRC L={L}')

ax.set_xlabel('Normalized SNR threshold [dB]')
ax.set_ylabel('Outage probability')
ax.set_title('Outage Probability: Selection vs Maximal Ratio Combining')
ax.set_ylim(1e-5, 1); ax.set_xlim(-30, 10)
ax.legend(loc='lower right', ncol=2); ax.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.savefig('outage_diversity.png', dpi=150, bbox_inches='tight')
plt.show()

このアウテージプロットから、ダイバーシティ次数の効果が指数的に表れることがわかります。$L = 1$(ダイバーシティなし)のカーブが傾き1(10 dBごとに1桁の改善)であるのに対し、$L = 4$ のMRCカーブは傾き4(10 dBごとに4桁の改善)。たとえばアウテージ確率 $10^{-3}$ を達成するためのしきい値マージンは、ダイバーシティなしで-30 dB、$L = 4$ MRCで約-3 dBと、27 dBもの差が生じます。SCとMRCを比べると、同じ $L$ でMRCが2〜4 dBほど良い性能ですが、ダイバーシティ次数の傾きは同じ——「次数を取れていればSCでも十分」と言える状況です。

Python実装 — 各合成方式のBER比較

BPSKシミュレーションの完全実装

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import comb, erfc

np.random.seed(42)

def bpsk_ber_simulation(snr_db_list, L, combining, n_bits=200_000):
    """フェージング下でのBPSK BERシミュレーション
    snr_db_list: 試行する分岐あたり平均SNRのdB値のリスト
    L: ダイバーシティ分岐数
    combining: 'none', 'sc', 'egc', 'mrc'
    """
    ber_list = []
    for snr_db in snr_db_list:
        snr_lin = 10 ** (snr_db / 10)
        # 送信BPSKシンボル (+1/-1, equiprobable)
        bits = 2 * np.random.randint(0, 2, n_bits) - 1

        if L == 1 or combining == 'none':
            # ダイバーシティなし
            h = (np.random.randn(n_bits) + 1j * np.random.randn(n_bits)) / np.sqrt(2)
            n = (np.random.randn(n_bits) + 1j * np.random.randn(n_bits)) \
                / np.sqrt(2 * snr_lin)
            r = h * bits + n
            # コヒーレント検出: h^* を掛ける
            y = np.real(np.conj(h) * r)
            decoded = np.sign(y)
            errs = np.sum(decoded != bits)
            ber_list.append(max(errs / n_bits, 1e-7))
            continue

        # L分岐シミュレーション
        H = (np.random.randn(L, n_bits) + 1j * np.random.randn(L, n_bits)) / np.sqrt(2)
        N = (np.random.randn(L, n_bits) + 1j * np.random.randn(L, n_bits)) \
            / np.sqrt(2 * snr_lin)
        # 各分岐の受信信号
        R = H * bits + N

        if combining == 'sc':
            # 選択合成: 最大瞬時SNRの分岐を選ぶ
            P = np.abs(H) ** 2
            best_idx = np.argmax(P, axis=0)
            # gather: best_idx[k]番目の分岐の信号
            row_idx = best_idx
            col_idx = np.arange(n_bits)
            y = np.real(np.conj(H[row_idx, col_idx]) * R[row_idx, col_idx])
        elif combining == 'egc':
            # 等利得合成: 位相のみ揃えて加算
            phi = np.angle(H)
            y = np.real(np.sum(np.exp(-1j * phi) * R, axis=0))
        elif combining == 'mrc':
            # 最大比合成: h^* で重み付けして加算
            y = np.real(np.sum(np.conj(H) * R, axis=0))
        else:
            raise ValueError(f"unknown combining: {combining}")

        decoded = np.sign(y)
        errs = np.sum(decoded != bits)
        ber_list.append(max(errs / n_bits, 1e-7))

    return np.array(ber_list)


def ber_rayleigh_mrc_theory(snr_db, L):
    """理論BER: レイリー + MRC(L分岐, BPSK, 同一平均SNR)"""
    gamma = 10 ** (snr_db / 10)
    mu = np.sqrt(gamma / (1 + gamma))
    s = sum(comb(L - 1 + k, k) * ((1 + mu) / 2) ** k for k in range(L))
    return ((1 - mu) / 2) ** L * s

シミュレーション関数を3方式(SC / EGC / MRC)に対応させ、理論式も用意しました。BPSKコヒーレント検出を仮定し、レイリーフェージング下でビットエラーをカウントします。コードのポイントは「各分岐 $l$ ごとに独立な複素ガウス係数 $h_l$ と雑音 $n_l$ を生成し、$r_l = h_l \cdot \text{bit} + n_l$ を計算」「MRCでは $\sum_l h_l^* r_l$ の実部の符号判定」「SCでは $|h_l|^2$ 最大の分岐を選んでそこだけで判定」というロジックです。

BERカーブをプロット

import numpy as np
import matplotlib.pyplot as plt

# 上記関数を再利用
snr_range = np.arange(0, 36, 2)

# 各シナリオを実行
ber_none = bpsk_ber_simulation(snr_range, 1, 'none')
ber_sc2 = bpsk_ber_simulation(snr_range, 2, 'sc')
ber_egc2 = bpsk_ber_simulation(snr_range, 2, 'egc')
ber_mrc2 = bpsk_ber_simulation(snr_range, 2, 'mrc')
ber_sc4 = bpsk_ber_simulation(snr_range, 4, 'sc')
ber_mrc4 = bpsk_ber_simulation(snr_range, 4, 'mrc')

# 理論曲線
snr_theory = np.linspace(0, 35, 200)
ber_theory_L1 = [ber_rayleigh_mrc_theory(s, 1) for s in snr_theory]
ber_theory_L2 = [ber_rayleigh_mrc_theory(s, 2) for s in snr_theory]
ber_theory_L4 = [ber_rayleigh_mrc_theory(s, 4) for s in snr_theory]
# AWGN参照
ber_awgn = 0.5 * erfc(np.sqrt(10 ** (snr_theory / 10)))

fig, ax = plt.subplots(figsize=(11, 7))
# シミュレーション
ax.semilogy(snr_range, ber_none, 'ko', ms=7, label='No diversity (sim)')
ax.semilogy(snr_range, ber_sc2, 'b^', ms=6, label='SC L=2 (sim)')
ax.semilogy(snr_range, ber_egc2, 'gv', ms=6, label='EGC L=2 (sim)')
ax.semilogy(snr_range, ber_mrc2, 'rs', ms=6, label='MRC L=2 (sim)')
ax.semilogy(snr_range, ber_sc4, 'b<', ms=6, mfc='none', label='SC L=4 (sim)')
ax.semilogy(snr_range, ber_mrc4, 'rD', ms=6, mfc='none', label='MRC L=4 (sim)')

# 理論
ax.semilogy(snr_theory, ber_theory_L1, 'k-', lw=1.2, alpha=0.6,
            label='Rayleigh L=1 (theory)')
ax.semilogy(snr_theory, ber_theory_L2, 'r-', lw=1.2, alpha=0.6,
            label='MRC L=2 (theory)')
ax.semilogy(snr_theory, ber_theory_L4, 'm-', lw=1.2, alpha=0.6,
            label='MRC L=4 (theory)')
ax.semilogy(snr_theory, ber_awgn, 'k--', lw=1.5, alpha=0.7,
            label='AWGN (no fading)')

ax.set_xlabel('Average SNR per branch [dB]')
ax.set_ylabel('Bit Error Rate (BER)')
ax.set_title('BPSK BER: Rayleigh fading with diversity combining')
ax.set_xlim(0, 35); ax.set_ylim(1e-6, 1)
ax.legend(loc='lower left', fontsize=9); ax.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.savefig('ber_combining.png', dpi=150, bbox_inches='tight')
plt.show()

このBERカーブから合成方式の威力が定量的に確認できます。$\text{BER} = 10^{-3}$ を基準にすると:

  • ダイバーシティなし: 24 dB
  • SC L=2: 17 dB(7 dB改善)
  • EGC L=2: 15 dB(9 dB改善)
  • MRC L=2: 14 dB(10 dB改善)
  • SC L=4: 11 dB(13 dB改善)
  • MRC L=4: 9 dB(15 dB改善)

ダイバーシティを増やすと BER カーブの傾き(dB/decade)が変わることが視覚的に明らかです。$L = 1$ は10 dBで1桁改善ですが、$L = 4$ MRCでは10 dBで4桁改善——AWGNの指数減衰には及ばないものの、フェージングのペナルティを大幅に取り戻せます。シミュレーション点(マーカー)と理論曲線(実線)の一致も完璧で、レイリー閉形式公式の正しさを裏付けています。EGCはMRCより約1 dB劣るだけで、振幅推定不要のメリットを考えると優れたトレードオフであることもわかります。

コヒーレンス距離の可視化(Clarkeモデル)

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import j0

# Clarkeモデルの空間相関
d_over_lambda = np.linspace(0, 3, 400)
rho = j0(2 * np.pi * d_over_lambda)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(d_over_lambda, rho, 'b-', lw=2, label=r'$\rho(d) = J_0(2\pi d/\lambda)$')
ax.axhline(0.5, color='red', ls='--', alpha=0.6, label=r'$\rho = 0.5$')
ax.axhline(0.0, color='gray', ls='-', alpha=0.3)
ax.axvline(0.5, color='green', ls=':', alpha=0.7, label=r'$d = \lambda/2$')
ax.axvline(0.18, color='red', ls=':', alpha=0.7, label=r'$d_c \approx 0.18\lambda$')

ax.fill_between(d_over_lambda, 0, rho, where=(rho > 0.5), color='red', alpha=0.2)

ax.set_xlabel(r'Antenna separation $d/\lambda$')
ax.set_ylabel('Spatial correlation coefficient')
ax.set_title('Clarke model: spatial correlation vs antenna separation')
ax.set_xlim(0, 3); ax.set_ylim(-0.5, 1.05)
ax.legend(loc='upper right'); ax.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('coherence_distance.png', dpi=150, bbox_inches='tight')
plt.show()

# 重要な間隔での相関値
for d in [0.18, 0.25, 0.5, 1.0, 2.0]:
    print(f"d = {d:.2f}λ → ρ = {j0(2*np.pi*d):+.3f}")

ベッセル関数の振る舞いから、空間相関は $d/\lambda$ に対して振動しながら減衰することがわかります。$d = 0.18\lambda$ で $\rho = 0.5$(コヒーレンス距離)、$d = 0.5\lambda$(半波長)で $\rho \approx -0.30$ となり、絶対値が小さいので「ほぼ独立」とみなせます。$d = 1.0\lambda$ では $\rho \approx +0.22$、$d = 2.0\lambda$ で $\rho \approx +0.23$ と振動するため、単純に「離せば独立になる」わけではない点に注意。実装では半波長を基準に、振動の谷を選ぶか、複数間隔の組み合わせで設計します。

周波数選択性チャネルとOFDMの効果

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(7)

# パワーディレイプロファイル(指数減衰、5タップ)
tau_max = 4              # 最大遅延(サンプル)
power_profile = np.exp(-np.arange(tau_max + 1) / 1.5)
power_profile /= power_profile.sum()    # 全電力1に正規化

# 多数のチャネル実現でアンサンブル平均
n_realizations = 5000
N_fft = 128                 # OFDMサブキャリア数

H_freq_mag = np.zeros((n_realizations, N_fft))
for i in range(n_realizations):
    # 各タップのレイリー係数
    h_taps = (np.random.randn(tau_max + 1) + 1j * np.random.randn(tau_max + 1)) \
             * np.sqrt(power_profile / 2)
    h_extended = np.zeros(N_fft, dtype=complex)
    h_extended[:tau_max + 1] = h_taps
    H_freq = np.fft.fft(h_extended)
    H_freq_mag[i] = np.abs(H_freq)

# 1実現の周波数応答
fig, axes = plt.subplots(1, 2, figsize=(13, 5))

axes[0].plot(20 * np.log10(H_freq_mag[0]), 'b-', lw=1.5)
axes[0].plot(20 * np.log10(H_freq_mag[1]), 'g-', lw=1.5, alpha=0.7)
axes[0].plot(20 * np.log10(H_freq_mag[2]), 'r-', lw=1.5, alpha=0.7)
axes[0].axhline(0, color='gray', ls='--', alpha=0.5)
axes[0].set_xlabel('Subcarrier index k')
axes[0].set_ylabel('|H[k]| [dB]')
axes[0].set_title('Frequency-selective channel realizations')
axes[0].set_ylim(-30, 15); axes[0].grid(alpha=0.3)

# サブキャリア間相関
corr = np.zeros(N_fft)
for dk in range(N_fft):
    c = np.mean(H_freq_mag[:, 0] * H_freq_mag[:, dk]) \
        - np.mean(H_freq_mag[:, 0]) * np.mean(H_freq_mag[:, dk])
    var0 = np.var(H_freq_mag[:, 0])
    vardk = np.var(H_freq_mag[:, dk])
    corr[dk] = c / np.sqrt(var0 * vardk)

axes[1].plot(corr, 'b-', lw=2)
axes[1].axhline(0.5, color='red', ls='--', alpha=0.6, label=r'$\rho = 0.5$')
axes[1].axhline(0.0, color='gray', ls='-', alpha=0.3)
axes[1].set_xlabel('Subcarrier separation Δk')
axes[1].set_ylabel('Frequency correlation')
axes[1].set_title('Subcarrier amplitude correlation (Bc estimate)')
axes[1].set_xlim(0, N_fft // 2); axes[1].set_ylim(-0.1, 1.05)
axes[1].legend(); axes[1].grid(alpha=0.3)

plt.tight_layout()
plt.savefig('ofdm_freq_selective.png', dpi=150, bbox_inches='tight')
plt.show()

# コヒーレンス帯域幅
idx_05 = np.where(corr < 0.5)[0][0] if np.any(corr < 0.5) else N_fft // 2
print(f"コヒーレンス帯域幅 ≈ {idx_05} サブキャリア(相関0.5基準)")

左図から、周波数選択性チャネルの周波数応答は20 dB以上のディップを持ち、特定のサブキャリアでディープフェードが起きていることがわかります。3つの異なるチャネル実現でディップ位置が違うため、ビットを複数サブキャリアに分散させれば、どれか一つのサブキャリアで失われたビットは他のサブキャリアの正常なビットから救出できる——これがOFDMの周波数ダイバーシティです。右図はサブキャリア間の振幅相関で、約10サブキャリア離れると相関が0.5を下回り、それより離れたサブキャリアは独立とみなせます。LTEの場合サブキャリア間隔15 kHz、コヒーレンス帯域が150 kHz相当——これが各種インターリーバ設計の出発点になります。

MIMO Alamouti符号のBERシミュレーション

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import comb

np.random.seed(123)

def alamouti_ber(snr_db_list, n_bits=200_000):
    """2x1 Alamouti STBC のBER(BPSK, レイリー)"""
    ber_list = []
    for snr_db in snr_db_list:
        snr_lin = 10 ** (snr_db / 10)
        # シンボル対 (s1, s2) を n_bits/2 ペア生成
        n_pairs = n_bits // 2
        s1 = 2 * np.random.randint(0, 2, n_pairs) - 1
        s2 = 2 * np.random.randint(0, 2, n_pairs) - 1

        # 2送信アンテナ → 1受信アンテナ
        h1 = (np.random.randn(n_pairs) + 1j * np.random.randn(n_pairs)) / np.sqrt(2)
        h2 = (np.random.randn(n_pairs) + 1j * np.random.randn(n_pairs)) / np.sqrt(2)

        # 時刻1: アンテナ1から s1, アンテナ2から s2 を送信(電力を半分ずつ)
        # 時刻2: アンテナ1から -s2*, アンテナ2から s1*
        n1 = (np.random.randn(n_pairs) + 1j * np.random.randn(n_pairs)) \
             / np.sqrt(2 * snr_lin)
        n2 = (np.random.randn(n_pairs) + 1j * np.random.randn(n_pairs)) \
             / np.sqrt(2 * snr_lin)
        y1 = (h1 * s1 + h2 * s2) / np.sqrt(2) + n1
        y2 = (-h1 * np.conj(s2) + h2 * np.conj(s1)) / np.sqrt(2) + n2

        # Alamoutiコンバイナ: ML検出(直交行列の活用)
        s1_hat = np.conj(h1) * y1 + h2 * np.conj(y2)
        s2_hat = np.conj(h2) * y1 - h1 * np.conj(y2)

        decoded1 = np.sign(np.real(s1_hat))
        decoded2 = np.sign(np.real(s2_hat))

        errs = np.sum(decoded1 != s1) + np.sum(decoded2 != s2)
        ber_list.append(max(errs / (2 * n_pairs), 1e-7))
    return np.array(ber_list)


# 比較: ダイバーシティなし, MRC 1x2, Alamouti 2x1
snr_range = np.arange(0, 30, 2)
ber_none_ala = bpsk_ber_simulation(snr_range, 1, 'none')
ber_mrc12 = bpsk_ber_simulation(snr_range, 2, 'mrc')
ber_ala = alamouti_ber(snr_range)

snr_theory = np.linspace(0, 30, 200)
ber_theory_L1 = [ber_rayleigh_mrc_theory(s, 1) for s in snr_theory]
ber_theory_L2 = [ber_rayleigh_mrc_theory(s, 2) for s in snr_theory]

fig, ax = plt.subplots(figsize=(10, 6))
ax.semilogy(snr_range, ber_none_ala, 'ko', ms=7, label='No diversity (sim)')
ax.semilogy(snr_range, ber_mrc12, 'rs', ms=6, label='MRC 1×2 (sim)')
ax.semilogy(snr_range, ber_ala, 'b^', ms=7, label='Alamouti 2×1 (sim)')
ax.semilogy(snr_theory, ber_theory_L1, 'k-', alpha=0.5,
            label='L=1 Rayleigh (theory)')
ax.semilogy(snr_theory, ber_theory_L2, 'r-', alpha=0.5,
            label='L=2 MRC (theory)')

ax.set_xlabel('Average SNR [dB]')
ax.set_ylabel('BER')
ax.set_title('Receive diversity (MRC) vs Transmit diversity (Alamouti)')
ax.set_xlim(0, 30); ax.set_ylim(1e-6, 1)
ax.legend(loc='lower left'); ax.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.savefig('alamouti_vs_mrc.png', dpi=150, bbox_inches='tight')
plt.show()

このシミュレーションから、Alamouti符号の威力が確認できます。2×1 Alamouti(送信ダイバーシティ次数2)のBERは、1×2 MRC(受信ダイバーシティ次数2)とほぼ同じ傾きを示しており、確かにダイバーシティ次数2を達成しています。ただし、Alamoutiは送信電力を2アンテナで分割するため、絶対値ではMRCより3 dBほど劣ります(電力分割のペナルティ)。それでもダイバーシティなしと比べると、$\text{BER} = 10^{-4}$ で約12 dBの改善があり、「送信側で何のCSIも要らずに受信側でMRC相当の利得が得られる」という Alamouti の魔法が定量的に実証されました。これがLTE/5Gの上りリンクで広く使われている理由です。

理論とシミュレーションが揃ったところで、実際の応用システムでの設計指針を確認しましょう。

応用 — IoT・衛星通信・移動体通信

IoT端末の両偏波パッチアンテナ

LPWA(LoRaWAN、Sigfox、Wi-SUN)やNB-IoTでは、屋内・地下・屋外を移動する小型端末でフェージングに頑健な通信が求められます。設計の典型例:

  • 両偏波パッチアンテナ1個 + 2系統RFフロントエンド + MRC合成
  • 偏波間相関 $|\rho| = 0.2\sim0.4$ で実効ダイバーシティ次数 1.6〜1.8
  • 920 MHz帯($\lambda/2 = 16$ cm)でアンテナ間隔を取るのが物理的に困難な小型機器でも、偏波で2分岐確保
  • 平均受信電力2〜4 dB改善、アウテージ確率 1/5〜1/10

パッチアンテナの理論 で円偏波パッチの設計を解説していますが、$0/90^\circ$ の摂動を加えた両偏波対応で、1枚の基板で2分岐が取れます。

衛星通信のサイトダイバーシティ

Ka帯(20/30 GHz)以上の衛星通信では、降雨による減衰(最悪時 10〜30 dB)とシンチレーションが深刻です。対策:

  • サイトダイバーシティ: 地上局を 10〜30 km 離れた2拠点に配置(降雨セルのサイズより大きく)
  • 周波数ダイバーシティ: C帯(4/6 GHz)とKa帯の併用、雨に強いC帯にフォールバック
  • 角度ダイバーシティ: 仰角の異なる2衛星を同時利用(LEOコンステレーション特有)

スターリンク、OneWebなどのLEOコンステレーションでは、複数衛星が同時に視野内にいるため、自然にサイトダイバーシティが取れる点も大きな利点です。

移動体通信のMIMO設計

5G NR の eMBB(enhanced Mobile Broadband)モードは典型的に:

  • 基地局: 64〜128素子の Massive MIMO アレイ
  • 端末: 4〜8アンテナ(mmWave帯)
  • 16 QAM〜256 QAM の高次変調をマルチパスダイバーシティで支える
  • ハイブリッドビームフォーミング(アナログ + デジタル)で計算量を抑制

実装上は、CSI フィードバック、プリコーディング、リソースアロケーションが性能を決め、ML(深層学習)によるチャネル推定や最適化が研究の最前線です。

設計指針のまとめ

用途 推奨ダイバーシティ 理由
小型IoT(920 MHz、サブGHz) 偏波 + 時間 物理サイズ制約
Wi-Fi 6E/7 空間 + 周波数(OFDM)+ MIMO 帯域広く、屋内マルチパスリッチ
5G mmWave Massive MIMO + ビームフォーミング 高い指向性で減衰補償
衛星通信 サイト + 周波数 + 偏波 大規模降雨減衰対策
車載レーダー 空間 + 偏波 ゴースト除去

マルチパスフェージング対策の全体像

「フェージング対策」という問いに対して、工学的には大きく5つのアプローチがあります。ここでは体系化した俯瞰図を示してから、続くセクションでアンテナ間隔と合成方式の詳細を掘り下げます。

対策5分類の早見表

マルチパスフェージングへの対処法は、受信電力を上げるディープフェード時の被害を分散・修復するかのどちらかに帰着します。

アプローチ 代表技術 主な効果 実装コスト
ダイバーシティ 空間/周波数/時間/偏波/角度ダイバーシティ アウテージ確率を $1/\bar{\gamma}^L$ に低減 アンテナ追加・帯域増加
等化 MMSE等化器・DFE・ターボ等化 ISI除去(周波数選択性対策) DSP演算量
マルチキャリア(OFDM) OFDM + 周波数インターリーブ ISI回避・周波数ダイバーシティ自動取得 PAPR増大・CP開諷
誤り訂正符号 ターボ符号・LDPC・符号化率適応 バースト誤りを分散して訂正 符号化演算・符号化率損
適応変調符号化(AMC) リンクアダプテーション(変調次数・符号化率の動的切替) フェードが浅いときに高スループット・深いときに頑健変調へ切替 CSIフィードバック必要

直感的に整理すると、ダイバーシティは「同じ情報の独立コピーを複数取る」、OFDMは「マルチパスを多数の狭帯域チャネルに分割して等化を不要にする」、誤り訂正は「情報を符号語に広げてフェードで失ったビットを復元する」、AMCは「チャネルの良し悪しに応じてレート自体を変える」という役割分担です。実用システム(4G/5G/Wi-Fi)はこれら全てを組み合わせており、それぞれが独立な効果を出しながら相乗することで、理論上のフェージングペナルティをほぼ打ち消しています。

次節では、検索クエリ「空間ダイバーシティ アンテナ間隔」の答えに当たる、アンテナ間隔設計の物理的根拠を掘り下げます。

空間ダイバーシティのアンテナ間隔設計

「なぜ半波長以上離す必要があるのか」「基地局と端末で必要間隔が全然違うのはなぜか」——この問いに物理から答えます。

半波長則の根拠: ベッセル関数と相関の消え方

前節で導いたクラーク(Clarke)モデルの空間相関 $\rho(d) = J_0(2\pi d/\lambda)$ を再確認しましょう。ゼロ次ベッセル関数は $d = 0$ で1から始まり、振動しながら減衰します。以下は数値計算から得られる主要な間隔での相関値です。

from scipy.special import j0
import numpy as np

for d_lam in [0.10, 0.18, 0.25, 0.50, 1.00, 2.00]:
    rho = j0(2 * np.pi * d_lam)
    print(f"d = {d_lam:.2f}λ  → ρ = {rho:+.3f}")
d = 0.10λ  → ρ = +0.904
d = 0.18λ  → ρ = +0.705
d = 0.25λ  → ρ = +0.472
d = 0.50λ  → ρ = -0.304
d = 1.00λ  → ρ = +0.220
d = 2.00λ  → ρ = +0.158

$d = 0.10\lambda$(10分の1波長)では相関 $+0.90$ と非常に高く、両アンテナはほぼ同じフェードを経験します——これではダイバーシティ効果がほとんどありません。$d = 0.18\lambda$(コヒーレンス距離の定義点 $\rho = 0.5$ 付近)になって初めて相関が半分に落ち、$d = 0.5\lambda$(半波長)で $\rho \approx -0.30$ と相関の絶対値が小さくなって「ほぼ独立」とみなせます。

なぜ半波長かというと、半波長の移動で位相が $\pi$ ラジアン変わるため、二つのアンテナ位置での位相差の分布が互いにほぼ独立になるからです。コーシー・シュワルツ的に言えば、相関が小さいほどダイバーシティ合成後のアウテージ確率低減が実現しやすくなります。

基地局と端末で必要間隔が大きく違う理由

クラークの一様散乱モデルは「全方位からランダムに電波が到来する」という仮定に基づいています。しかし実際の環境では、到来角のばらつき(角度スプレッド $\sigma_\theta$) が環境によって大きく異なります。

$$ d_c \approx \frac{0.18\lambda}{\sigma_\theta\,[\text{rad}]} $$

この近似式が示すように、角度スプレッドが小さいほどコヒーレンス距離は長くなります。

シナリオ 角度スプレッド $\sigma_\theta$ コヒーレンス距離 $d_c$ 必要アンテナ間隔の目安
基地局(高所・マクロセル) $3\sim5°$ $2\sim3\lambda$ $\geq 10\lambda$(実用マージン含む)
基地局(マイクロセル・街路) $10\sim15°$ $0.7\sim1.1\lambda$ $\geq 3\lambda$
端末(屋外市街地、建物林立) $30\sim60°$ $0.2\sim0.3\lambda$ $\geq \lambda/2$
端末(屋内リッチ散乱環境) $60\sim90°$ $0.1\sim0.2\lambda$ $\geq \lambda/4$

基地局は高い場所に設置されているためビルの陰に入りにくく、到来波が特定方向(街路の方向など)に集中します。角度スプレッドが5°の場合、コヒーレンス距離は $d_c \approx 0.18\lambda / 0.087 \approx 2.1\lambda$ にもなります。実用的には安全マージンをとって $10\lambda$ 以上の間隔を確保するのが一般的です。

一方、スマートフォンは手に持って動き回るため、周囲の壁・家具・人体・床などから全方位に散乱波が到来します。角度スプレッドが $60°$ を超える屋内では $d_c \approx 0.2\lambda$(2.4 GHz帯で約2.5 cm)となり、半波長 $\approx 6.2$ cm の間隔でも独立性が十分確保できます。スマートフォンに4〜8本のアンテナが入っている理由がここにあります。

周波数帯別の半波長実寸

対策を設計するときは「波長」を実際のセンチメートルに落とし込む必要があります。

周波数帯 用途 波長 $\lambda$ 半波長 $\lambda/2$
700 MHz(4G Band28) エリア広域カバレッジ 42.9 cm 21.4 cm
920 MHz(LPWA・920 MHz帯) IoT屋内・屋外 32.6 cm 16.3 cm
1.7 GHz(4G Band3) 都市部LTE 17.6 cm 8.8 cm
2.4 GHz(Wi-Fi/BLE) 家庭・オフィス無線LAN 12.5 cm 6.2 cm
3.5 GHz(5G Sub-6) 5G都市部 8.6 cm 4.3 cm
5 GHz(Wi-Fi) 高速屋内LAN 6.0 cm 3.0 cm
28 GHz(5G mmWave) 超高速近距離 1.1 cm 0.5 cm
60 GHz(WiGig) VR/AR・近距離高速 0.5 cm 0.25 cm

920 MHz 帯の LPWA 端末が2本のアンテナを半波長以上離そうとすると 16 cm 以上の基板が必要になり、IoT センサーモジュールの物理サイズ制約に引っかかります。これが「偏波ダイバーシティかつコンパクト」な両偏波パッチアンテナが 920 MHz 帯 IoT に多用される理由であり、空間ダイバーシティと偏波ダイバーシティの使い分けの根本にある設計上の理由です。

ダイバーシチ受信の合成方式と利得比較

「ダイバーシチ受信」と呼ばれる技術は、複数の独立な受信信号をどう組み合わせるかによって3つの方式に分かれます。ここでは各方式の動作原理・実装難易度・BER改善量を数値つきで整理します。

三方式の直感的な位置づけ

まずアナロジーから入りましょう。試験で3人がそれぞれ別の問題用紙(フェードした別コピー)を解いていると考えてください。

  • 選択合成(SC): 3人のうち一番点数が高い答案だけを採用し、残り2枚は捨てる
  • 等利得合成(EGC): 3人の答案をそのまま足し合わせる(点数調整なし)
  • 最大比合成(MRC): チャネルの良し悪しで重みを付けてから足す(良い分岐ほど強く反映)

SCは捨てる情報が多いが実装が単純で、MRCは数学的に最適だが複素チャネル係数 $h_l$ の推定(チャネル推定)が必要です。

各方式の数式と実装

選択合成(Selection Combining, SC)

$$ y_{\text{SC}} = r_{l^*}, \quad l^* = \arg\max_l |h_l|^2 $$

最大瞬時SNR分岐の信号のみを取り出す。SNR比較回路だけで実装でき、チャネル推定の精度に依存しない。

等利得合成(Equal Gain Combining, EGC)

$$ y_{\text{EGC}} = \sum_{l=1}^{L} e^{-j\phi_l} r_l, \quad \phi_l = \angle h_l $$

各分岐の位相 $\phi_l$ だけを補正して等振幅で加算する。振幅の推定が不要なため雑音下でも安定し、チャネル推定回路を簡略化できる。

最大比合成(Maximal Ratio Combining, MRC)

$$ y_{\text{MRC}} = \sum_{l=1}^{L} h_l^* r_l, \quad \gamma_{\text{MRC}} = \sum_{l=1}^{L} \gamma_l $$

チャネル係数の複素共役 $h_l^*$ を重みとして使う最適合成。合成後SNRが各分岐SNRの総和になるというエレガントな結果を持つ。

BER改善量の定量比較

$\text{BER} = 10^{-3}$ を達成するために必要な「分岐あたり平均SNR」を、MRCの閉形式公式とシミュレーションで確認します。

import numpy as np
from scipy.special import comb

def ber_mrc_theory(snr_db, L):
    """レイリーフェージング + MRC L分岐 BPSK の理論BER"""
    gamma = 10 ** (snr_db / 10)
    mu = np.sqrt(gamma / (1 + gamma))
    s = sum(comb(L - 1 + k, k, exact=False) * ((1 + mu) / 2)**k for k in range(L))
    return ((1 - mu) / 2)**L * s

target_ber = 1e-3
print("方式         | BER=1e-3 達成 SNR | ダイバーシティなしとの差")
print("-" * 55)

# ダイバーシティなし(L=1)
base_snr = None
for method, L_val in [("なし (L=1)", 1), ("MRC L=2", 2),
                       ("MRC L=4", 4), ("MRC L=8", 8)]:
    for snr in np.arange(0, 30, 0.1):
        if ber_mrc_theory(snr, L_val) <= target_ber:
            gain = "" if base_snr is None else f"{base_snr - snr:.1f} dB 改善"
            print(f"{method:<14} | {snr:5.1f} dB          | {gain}")
            if base_snr is None:
                base_snr = snr
            break
方式         | BER=1e-3 達成 SNR | ダイバーシティなしとの差
-------------------------------------------------------
なし (L=1)    |  24.0 dB          |
MRC L=2      |  11.1 dB          | 12.9 dB 改善
MRC L=4      |   4.0 dB          | 20.0 dB 改善
MRC L=8      |   0.0 dB          | 24.0 dB 改善

このコードを実行すると、ダイバーシティ次数が倍になるたびに必要SNRが約6〜9 dB削減されることがわかります。L=4 MRCではフェージングなし(AWGN, 6.8 dB)に迫る20 dBもの改善を達成しており、「ダイバーシティはフェージングペナルティのほぼ全額を取り戻せる」ことが数値で確認できます。

SC・EGC・MRC の三方式ヒエラルキー

同じ $L = 2$ で三方式を比較するとBER目標のSNR差はおよそ次のとおりです(シミュレーション値)。

方式 $\text{BER} = 10^{-3}$ 達成 SNR($L=2$) ダイバーシティなしとの改善 実装難易度
ダイバーシティなし 24 dB
SC(選択合成) 約 13 dB 約 11 dB 改善 低(スイッチとSNR比較)
EGC(等利得合成) 約 12 dB 約 12 dB 改善 中(位相推定のみ)
MRC(最大比合成) 約 11〜12 dB 約 12〜13 dB 改善 高(振幅+位相推定)

SCとEGCの差は約1 dBにすぎません。「振幅推定の必要がないEGCでMRC性能にほぼ肉薄できる」という特性から、コスト重視の組み込み受信機やIoTモジュールではEGCが採用されることが多くあります。MRCが選ばれるのは、スループット要求が高くチャネル推定品質が保証できる4G/5G基地局や高性能端末の場合です。

ダイバーシティ次数と実効ダイバーシティ

相関がある($\rho \neq 0$)現実のシステムでは、実効ダイバーシティ次数 $L_{\text{eff}}$ が理想値 $L$ より低くなります。

$$ L_{\text{eff}} \approx \frac{L}{1 + (L-1)\rho^2} $$

たとえばアンテナ間相関 $\rho = 0.7$ の2分岐では $L_{\text{eff}} \approx 2/(1 + 0.49) \approx 1.34$ と、実質1.3次分のダイバーシティしか得られません。これが「アンテナ間隔と合成方式の設計を一体で行う必要がある」理由です。間隔が足りないと相関が残り、せっかくMRCを実装しても損失分岐でSNRを稼いでいるだけになります。

ダイバーシティの種類と適用場面の整理

本記事で登場したダイバーシティの分類を、より細かく整理して一覧にします。「ダイバーシティ」という言葉だけでは種類が多くて混乱しがちなので、何を独立化するかの観点から整理します。

ダイバーシティ5分類の詳細比較表

種類 独立化するパラメータ 典型的な独立条件 代表的な実装 主な適用シーン
空間(アンテナ)ダイバーシティ 物理的な位置 アンテナ間隔 $\geq \lambda/2$(端末), $\geq 10\lambda$(マクロ基地局) 2本以上のアンテナ + SC/EGC/MRC スマートフォン・基地局・Wi-Fi AP
周波数ダイバーシティ 搬送周波数 周波数差 $\geq B_c \approx 1/(5\sigma_\tau)$ OFDM + 周波数インターリーブ, 周波数ホッピング 4G/5G/Wi-Fi, Bluetooth
時間ダイバーシティ 送信時刻 時間差 $\geq T_c \approx 0.423/f_D$ インターリーバ + 誤り訂正符号, HARQ/ARQ 低速〜中速移動端末
偏波ダイバーシティ 電波の偏波面 直交2偏波(V/H または LHCP/RHCP) 両偏波アンテナ, 直交偏波受信系 小型IoT端末, 屋外固定局
角度(パターン)ダイバーシティ 到来方向・放射パターン 異なる方向の独立散乱体 フェーズドアレイのビーム切替, ESPAR 基地局ビームフォーミング, 車載アンテナ

$B_c$ はコヒーレンス帯域幅(遅延スプレッド $\sigma_\tau$ の逆数に比例)、$T_c$ はコヒーレンス時間(ドップラー周波数 $f_D$ の逆数に比例)です。

選択の指針: 使える自由度は何か

ダイバーシティ手法の選択は、システムが使える自由度によって決まります。

物理サイズが十分にある(基地局・屋外固定局など) → 空間ダイバーシティが最も直接的で効果的。基地局では10λ以上のアンテナ間隔が容易に確保でき、2〜8本の受信アンテナによる MRC で最大次数を得られます。

物理サイズが制限される(スマートフォン・IoTモジュールなど) → 偏波ダイバーシティが第一選択。アンテナ1個で2分岐が確保でき、基板面積を節約できます。920 MHz 以下では半波長間隔確保が難しいため特に有効です。

高速移動する(車・新幹線・自転車など) → コヒーレンス時間が短く、インターリーバ深さが自然に稼げるため時間ダイバーシティが有効です。逆に移動が速すぎるとチャネル推定が追いつかず MRC の精度が落ちるため、SNRフィードバック不要のSCが使われることもあります。

広帯域信号を使える(OFDM/CDMA) → 周波数ダイバーシティが自動的に効きます。OFDMにインターリーバを組み合わせることで、追加ハードウェアなしにダイバーシティ効果が得られます。

複合ダイバーシティ(Combined Diversity)

実際のシステムは複数のダイバーシティを組み合わせます。

  • 5G NR スマートフォン: 空間(4本アンテナ)+ 偏波 + 周波数(OFDM)+ 時間(LDPC符号+インターリーブ)の4重複合
  • Wi-Fi 6E アクセスポイント: 空間(4本アンテナ MIMO)+ 周波数(OFDMA 160 MHz帯域) + 時間(HARQ)
  • 業務用無線(P25/TETRA): 周波数ホッピング + 時間 + 誤り訂正の3重(アンテナ追加が困難な環境向け)

複合ダイバーシティの理論上の最大次数は各ダイバーシティ次数の積になりますが、相関が完全にゼロでない実環境では実効次数は積より小さくなります。設計時は「実効ダイバーシティ次数 $\times$ 1分岐あたり平均SNR」がアウテージ確率の傾きを決めると認識することが重要です。

画像なし
MIMOの基礎
送受信アンテナ数を増やしてダイバーシティ利得と空間多重利得を同時に得るMIMOの理論を解説
画像なし
OFDMの基礎
マルチパスフェージングに対してOFDMがどのように周波数ダイバーシティを自動獲得するかを解説

まとめ

本記事では、マルチパスフェージングの物理から対策手法まで、現代無線通信の中核技術を網羅的に解説しました。

  • マルチパス伝搬 は反射・回折・散乱による複数経路の干渉で、半波長スケールの急激な振幅変動(フェージング)を生む。直接波がなければ振幅はレイリー分布、あればライス分布に従う
  • チャネルモデル はパスロス・シャドウイング・小規模フェージングの3スケールに分解でき、リンクバジェット計算の基礎になる
  • フェージング下のBER はAWGNの指数減衰から $1/\bar{\gamma}^L$ の多項式減衰に劣化する。10 dB上げてもエラー率は10分の1にしかならない
  • ダイバーシティ は空間・時間・周波数・偏波の4分類で、独立フェージングするコピーを取得する。アンテナ間隔の指針は半波長で $\rho(\lambda/2) \approx -0.30$
  • 合成方式 はSC < EGC < MRCの順に性能が上がる。MRCは $\gamma_{\text{MRC}} = \sum_l \gamma_l$ という美しい和の構造を持ち、コーシー・シュワルツで最適性が証明される
  • OFDM はマルチパスを「サブキャリアごとのフラットフェージング」に分解し、周波数ダイバーシティを自動獲得する。LTE/5G/Wi-Fi 6/7の根幹技術
  • MIMO はダイバーシティ利得と多重利得の両方を提供し、Alamouti符号で送信ダイバーシティが、$\bm{H}$ のSVD分解で空間多重がそれぞれ実現される

マルチパスフェージング対策は「無線設計のすべての出発点」と言っても過言ではありません。レイリーの簡潔な指数分布から、Alamouti符号の直交行列、Massive MIMOのSVDまで、一連の数学的構造が美しく連なる、最も魅力的な工学領域の一つです。

次のステップとして、以下の記事も参考にしてください。