OFDMの基本的な仕組みをExcelで確認してみる

2025年3月24日月曜日

19. OFDM(直交周波数分割多重)

t f B! P L

はじめに

携帯4G/5G、Wi-Fi、WiMAX、地デジなど、現在のデジタル通信にはOFDM(直交周波数分割多重)方式が採用されています。リアルワールドのマルチパスによるフェージングなど、電波伝搬の障害に対する耐性を上げながら、大容量・高速通信を実現するという相反する要求に応えた通信方式がOFDMです。

今回は「OFDMの基本的な仕組みをExcelを使って確認してみる」という試みです。

このブログでは、主にベースバンド信号の変調方式に限定し、符号化された情報を変調してキャリア(搬送波)に載せる処理と、受信側で復調して情報を取り出す処理をExcel上でシミュレーションしてみます。ベースバンド信号レベルでの基本的な処理の確認なので、RF信号の処理や電波伝搬などは扱いません。

ファイルのダウンロード

今回のExcelファイルはこちらからダウンロードできます。 → リンク
ファイル名は、OFDM.xlsm です。
Excelに実装されたFFTを使っているため、分析ツールをインストールしておく必要があります。
(ファイル→オプション→アドイン→設定 で【分析ツール】と【分析ツール-VBA】にチェック)

OFDMの仕組みをExcel上でシミュレーションして文字列を送受信しています。
RF送信波形を見る限り、どこがデジタル通信なの?って感じですが、情報を伝達できています。例えば、Wi-Fi IEEE802.11a/gでは、1回の通信波形(シンボル長)は3.2μsecですが、その信号をリアルタイムにIFFT/FFTして変調/復調してしまえ!という方式が実用化されていることに今更ですが驚きます。

IQ変調

さて、携帯やWi-Fi、地デジなどの無線通信はデジタル通信になっています。情報をデジタル化して伝えるわけですが、現在広く使われているのが位相変調です。情報を信号の位相に変換し送信します。

例えば、QPSK方式では、2bitの情報の伝達に位相が 90度(π/2)異なる \(\pm \cos\)と\(\pm \sin\) の4種類の信号が使われます。更に、\(\pm \cos\)と\(\pm \sin\) の信号を1つのキャリア(搬送波)に載せて送受信するのがIQ変調方式です。

IQ変調は、 Iチャンネルに\(\pm \cos\)の信号(位相情報)、Qチャンネルに\(\pm \sin\) の信号(位相情報)を載せ、両方の変調波を1つのキャリア(搬送波)に載せて送受信します。

90度位相が異なる信号(直交成分)は、合わせて送信しても受信側で同じ位相のキャリア信号を乗算すれば復調できるという原理により、受信側でIチャンネルとQチャンネルの位相情報をそれぞれ抽出できます。

送信処理

Iチャンネルのキャリアを \(\cos(ωt)\)、 Qチャンネルは位相が90度進んだ \(–\sin(ωt)\) をキャリアにします。Iチャンネル と Qチャンネル に載せる情報をK1、K2とすると

    Iチャンネル:    \(K1\cdot \cos(ωt)\)
 Qチャンネル: \(-K2\cdot \sin(ωt)\)

K1、K2の値は 1 または -1 であり、合わせた信号 

 \(K1\cdot \cos(ωt) - K2\cdot \sin(ωt) \)

を送信信号として送ります。

受信処理

受信側では、 Iチャンネル と Qチャンネル を分離(復調)するために同じ位相のキャリア信号を乗算します。

 Iチャンネルの復調: 
\( \cos(ωt)\cdot ( K1\cdot \cos(ωt)-K2\cdot \sin(ωt) ) \)
                \(= K1\cdot \cos(ωt)^2-K2\cdot \cos(ωt)\cdot \sin(ωt)\)
\(= 1/2\cdot (K1\cdot \cos(2ωt)+ K1\cdot \cos(ωt-ωt)) - 1/2\cdot K2\cdot \sin(2ωt)\)
                \(= 1/2\cdot K1 + 1/2\cdot K1\cdot \cos(2ωt) - 1/2\cdot K2\cdot \sin(2ωt)\)

\(1/2\cdot K1\cdot \cos(2ωt)\)と\(1/2\cdot K2\cdot \sin(2ωt)\)はキャリア信号の2倍の周波数であり、LPFでカットすると情報としては直流成分である \(1/2\cdot K1\) のみを抽出することができます。

 Qチャンネルの復調: 
\(-\sin(ωt)\cdot ( K1\cdot \cos(ωt)-K2\cdot \sin(ωt) )\)

Iチャンネルと同様に、2倍の周波数の成分をLPFでカットすると情報としては直流成分である \(1/2\cdot K2\) のみを抽出することができます。

IQ変調を確認してみる

ということで、 IQ変調で本当に復調できるのかを確認してみるところから始めてみます。
Excelファイルの【IQmodulation】シートになります。

上部のセル【D4】【D5】にIチャンネル、 Qチャンネルに載せる情報K1、K2があります。
K1、K2の値は 1 または -1 です。

K1、K2の情報は、 Iチャンネル、 Qチャンネルのキャリアの位相に反映され、2つのキャリアを合成したRF信号として受信側に渡されます。

受信側では、復調処理として受信したRF信号に、Iチャンネルの抽出には cos(ωt) 、 Qチャンネルの抽出には –sin(ωt) を掛け、信号の分離が行われます。
分離した信号には、キャリアの2倍の周波数を含みますが、LPF(今回は平均値)で取り除くとIチャンネル、 Qチャンネルでそれぞれ直流成分である ±0.5 を抽出できます。

K1、K2の値を変更(1 or -1)してみると情報が伝達できるのが分かります。

【FFT】ボタンがありますが、Excelに実装されたFFT(分析ツールのフーリエ解析)は複素FFTです。複素FFTでは、\( \sin\)と\( \cos\) が混合した信号を扱えるため、【FFT】ボタンを押すと RF信号 から直接 Iチャンネル と Qチャンネル の情報を抽出できます。

OFDMは、IQ変調した多数(数十〜数千本)の搬送波を、互いに干渉しないよう(直交させて)隙間なく束ねて送る通信方式で、IQ変調・復調とFFTによる情報抽出を併用します。ということで、次はOFDMについて説明します。

OFDM(直交周波数分割多重)方式

OFDMでは、通信帯域を複数のサブキャリアに分割します。具体的な例として、Wi-Fi  IEEE 802.11a/g では、20MHzの帯域を312.5kHzごとに64本のサブキャリアに分割しています。
また、1回の通信波形(シンボル)は3.2μsecで、ガードインターバル0.8μsecを合わせて4.0μsecごとに通信波形(シンボル)を切り替えます。

各サブキャリアには符号化した信号を割り当てます。さらに、全てのサブキャリアの信号を足し合わせた結果の実数部と虚数部を実際のRF信号のキャリアのIチャンネルとQチャンネルに載せて送信します。

各サブキャリアに載せる通信波形(シンボル)は、一定の時間で区切った信号のため、そのスペクトル分布は下図のような sinc関数( \( \sin \theta/\theta \) )になります。そのサブキャリアをスペクトルの干渉がないように重ね合わせます。

OFDMはFFTを使って情報抽出を行うため、帯域とサブキャリア数が決まれば、サンプリングレートとサンプルポイントが決まります。例えば、Wi-Fi  IEEE 802.11a/g では、サンプリングレート20MHz、サンプルポイント64になります。また、ガードバンドがあり、サブキャリア64本のうち52本がデータ送受信に使われます。

確認したいこと ~その1

312.5kHzごとのサブキャリア52本が同時にデータ送信して問題ないのでしょうか?

IQ変調での直交性は、 90度位相が異なる信号(cosと-sin)によるものでした。OFDMでもIQ変調と同じように、各サブキャリアにcosとsin信号を載せるので、

 オイラーの公式:\( e^{j\theta}=\cos \theta + j\sin \theta \)

より、各サブキャリアの信号を  \( e^{j\theta} \)  で表現し、OFDMのサブキャリアの間隔をΔfとすると、 

 m番目のサブキャリア:\(s_m(t)=e^{j2π(f0+mΔf)t}\)
 n番目のサブキャリア :\(s_n(t)=e^{j2π(f0+nΔf)t}\)

\( T=1/Δf\) として、1周期の内積(複素共役との積の積分)を求めてみると\[\int _{0}^{T} e^{j2π(f0+mΔf)t}\cdot e^{-j2π(f0+nΔf)t}\,dt = \int _{0}^{T} e^{j2π(m-n)Δft)}\,dt \] \[= \int _{0}^{T} (\cos (2π(m-n)Δft)+j\sin (2π(m-n)Δft) )\,dt\](m-n)周期cosとsinを積分した結果は0なので、各サブキャリアの周波数は直交性があるということみたいです。各サブキャリアは直交しているといっても、全部のサブキャリアを重畳した時間波形は相当グチャグチャになりそうです。フーリエ変換を信じないわけではないですが、本当に情報の伝達ができるのか確認したくなります。

確認したいこと ~その2

例えば、Wi-Fi  IEEE 802.11a/gでは、64本の中の52本のサブキャリアを使って送受信します。サンプリングレート20MHz、サンプルポイント64点でIFFT/FFTして変調・復調します。

でも、 64本のサブキャリアの周波数をサンプルポイント64点でFFTすると、サンプリング定理から32本のサブキャリアの情報しか分析できないのでは?と思ったりしますが、複素FFTでは、サンプルポイント64点でも64本のサブキャリアの周波数を扱えるらしいです。

サブキャリア1とサブキャリア63の信号を見てみると

 サブキャリア1:         \( s_1(n) = e^{j2\pi n/64} = \cos (2\pi n/64) + j\sin (2\pi n/64) \)

 サブキャリア63:              \(s_{63}(n) = e^{j2\pi (63n/64)} = e^{j2\pi ((64-1)n/64)}= e^{j2\pi n} \cdot e^{-j2\pi n/64} \)                         \( = e^{-j2\pi n/64} = \cos (2\pi n/64) - j \sin (2\pi n/64) \)

サブキャリア63はサブキャリア1に対し、回転方向が逆(負の周波数)になっています。ベースバンド処理では、実際に 33~63番目のサブキャリアは負の周波数として扱っており、複素FFTでは負の周波数を独立に扱うことができます。

とはいうものの、サブキャリア63で本当に情報の伝達ができるのか確認したくなります。

サブキャリア 1と63による情報伝送

サブキャリア1と63の伝達情報をそれぞれ \(X_1, X_{63}\)、\( θ = 2\pi n/64 \) とすると、
\[s(n)=X_1\cdot e^{jθ}+X_{63}\cdot e^{-jθ}= X_1\cdot (\cosθ+j\sinθ)+X_{63}\cdot (\cosθ-j\sinθ)\]各サブキャリアはQPSKとし、2bitの情報を載せます。
\(X_1=k1+jk2\)    \(X_{63}=k3+jk4\) (各knは1または-1)とすると、送信データは

        \(s(n)=(k1+jk2)\cdot (\cosθ+j\sinθ)+(k3+jk4)\cdot (\cosθ-j\sinθ)\)

            \(=k1\cdot \cosθ-k2\cdot \sinθ+k3\cdot \cosθ+k4\cdot \sinθ\)
               \(+ j(k1\cdot \sinθ+k2\cdot \cosθ-k3\cdot \sinθ+k4\cdot \cosθ)\)

            \(=(k1+k3)\cdot \cosθ+(k4-k2)\cdot \sinθ\)
                       \(+j((k2+k4)\cdot \cosθ+(k1-k3)\cdot \sinθ)\)

になります。さらに、実数部と虚数部をIQ変調して、Iチャンネル(cos)とQチャンネル(-sin)で送信します。

IQ変調の周波数は、ベースバンドの周波数よりも高い周波数で、それを φ とすると送信信号は

        \(\cos\phi((k1+k3)\cdot \cosθ + (k4-k2)\cdot \sinθ) \)
                    \(- \sin\phi((k2+k4)\cdot \cosθ + (k1-k3)\cdot \sinθ) \)

になります。
IQ変調で説明したように、受信側では、この信号にIチャンネルは\(\cos \phi\)を掛け、Qチャンネルは\(-\sin \phi\)を掛けて情報を抽出します。

送信信号の式を見ると、こんなに混ざってしまって、本当に受信側で \(k1,k2,k3,k4\) の情報を抽出できるのだろうかと思ってしまいます。

OFDMの確認

OFDMで本当に復調できるのかを確認してみます。

Excelファイルの【OFDM】シートになります。【OFDM】シートでは、サブキャリア 1と63、2と62、3と61を使って、12bitの情報をOFDMで送信してみます。

送信処理

送信データは、【 C4 】 セルの文字を8bitのコードに変換したものと、文字コードの上位4bitと下位4bitを加算した結果の下位4bitをチェックサム値として送信します。

\(k1~k12\) が送信コードです。\( \theta = 2\pi n/64 \)とすると送信信号は

サブキャリア 1と63
    Ich:   \(\cos\phi((k1+k3)\cdot \cosθ + (k4-k2)\cdot \sinθ) \)
    Qch: \(- \sin\phi((k2+k4)\cdot \cosθ + (k1-k3)\cdot \sinθ) \)

サブキャリア 2と62
    Ich:  \(\cos\phi((k5+k7)\cdot \cos2θ + (k8-k6)\cdot \sin2θ) \)
    Qch: \(- \sin\phi((k6+k8)\cdot \cos2θ + (k5-k7)\cdot \sin2θ) \)

サブキャリア 3と61
    Ich:  \(\cos\phi((k9+k11)\cdot \cos3θ + (k12-k10)\cdot \sin3θ) \)
    Qch: \(- \sin\phi((k10+k12)\cdot \cos3θ + (k9-k11)\cdot \sin3θ) \)

RF送信信号は、上記の6本のサブキャリアを足し合わせた信号で、波形は中央のグラフの赤のラインです。デジタル通信の波形ですって言われても見た感じは、どこがデジタルなの?というような波形です。

IQ変調のキャリアの周波数(角速度φ)は、ベースバンドの周波数の4倍にしています。
【 J21 】セルの値を変えるとキャリアの周波数を変更できますが、 IQ変調のキャリアの周波数(角速度φ)はサブキャリアの周波数(角速度θ)よりも高い必要があるので4~28の間で設定可能です。

実際のOFDMでは、各サブキャリア信号の生成はIFFT(逆フーリエ変換)で行われ、DACでアナログ化した後、IQミキサ(直交ミキサ)回路でキャリア周波数の cosφ と –sinφ が乗算され、合成して RF信号になりますが、このブログではOFDMの基本原理を確認するため、全てExcel上で計算しています。

受信処理

受信側では受信したRF信号に、Iチャンネルは\(\cos \phi \)を掛け、Qチャンネルは\(-\sin \phi \)を掛けて分離します。中央のグラフの青破線、緑破線が受信側で分離したIチャンネルとQチャンネルの波形です。
実際のOFDMでは、受信したRF信号に対して、ダウンコンバータ回路でキャリア周波数の \(\cos \phi \) と \(-\sin \phi \) が乗算され、ADCでデジタル信号化されます。このブログではOFDMの基本原理を確認するため全てExcel上で計算しています。

次に、【FFT & Decode】ボタンを押してFFTを実行することで送信情報を抽出し、Ich/Qchの実数値と虚数値の組み合わせから送信コードやCS値に変換しています。

Excel【OFDM】シートでは、受信した文字コードを文字に変換。また、受信した文字コードから算出したチェックサム値と、受信したチェックサム値を比較し情報が正確に受信できたか確認しています。

サブキャリア63でも情報の伝達ができており、相当グチャグチャな時間波形でも情報の伝達ができるのが確認できました。

文字列の送信

1文字の送受信ができたので、次は文字列の送受信をやってみたくなります。
ワークシート【Check with String】では、ボタン【Check with String】を押すと、送信文字のセルに格納した文字を、セル【C5】の文字数だけ順次送信していきます。(最初の動画)


こんなRF送信波形でよく情報が伝送できるものだと感じます。最初にも書きましたが、リアルタイムにIFFT/FFTして、変調/復調してしまえという方式が実用化され、こんなにも日常的に使われていることに驚きます。
一方で、通信技術は技術開発だけでなく、権利化、規格化、標準化の競争やロビー活動、さらに市場での覇権争いと想像しただけで大変そうです。

OFDMの原型は1966年に発表

1966年のベル研究所 Robert W. Changによる「多チャネルデータ伝送のための帯域制限直交信号の合成」がOFDM の原型となる“直交多重化”の原理を示した最初の論文とのことです。それから約20年後に、フランスの放送通信研究所CCETTで規格化され実用化されたという流れです。

カルマンフィルタや現代制御の基礎となる論文、適応フィルタのLMSアルゴリズムの提案、Hough変換のアイデア、みんな1960年代ですが、OFDMもそうなんですねぇ。(高速フーリエ変換(FFT)の考案も1965年です。)

最後までお読みいただきありがとうございました。浅学ゆえ間違いにお気付きの方は末尾のコメント欄からご指摘いただけると幸いです。

QooQ