ヒルベルト変換と解析信号 — 実信号から複素信号を作る

マイクで録った音もアンテナで受けた電波も、測定値は実数だ。では I/Q 信号はどこから来るのか。ヒルベルト変換の話。


マイクで録った音も、アンテナで受けた電波も、AD コンバータが吐き出す数列も、みんな実数だ。ところが信号処理の教科書を開くと、複素信号や I/Q 表現が当然のように登場する。実数の世界から複素数の世界への橋をかけるのがヒルベルト変換だよ。

解析信号とは何か

実信号 x(t)x(t) に対応する解析信号

z(t)=x(t)+jx^(t)z(t) = x(t) + j\hat{x}(t)

と定義される。x^(t)\hat{x}(t)x(t)x(t) のヒルベルト変換で、一言で言えば「90度位相シフトしたもの」だ。

ヒルベルト変換を周波数領域で書くと話が速い:

X^(f)=jsgn(f)X(f)\hat{X}(f) = -j \cdot \operatorname{sgn}(f) \cdot X(f)

正の周波数には j-j をかける(90度遅れ)、負の周波数には +j+j をかける(90度進み)、DC は変化なし。それだけだ。

負の周波数が消える

解析信号 z(t)=x(t)+jx^(t)z(t) = x(t) + j\hat{x}(t) のフーリエ変換を計算してみよう:

Z(f)=X(f)+jX^(f)=X(f)+j(jsgn(f))X(f)=X(f)(1+sgn(f))Z(f) = X(f) + j\hat{X}(f) = X(f) + j \cdot (-j \cdot \operatorname{sgn}(f)) \cdot X(f) = X(f)\bigl(1 + \operatorname{sgn}(f)\bigr)

f>0f > 0 では 1+sgn(f)=21 + \operatorname{sgn}(f) = 2f<0f < 0 では 00 になる。負の周波数成分がきれいに消える

実信号のスペクトルは正負で共役対称(X(f)=X(f)X(-f) = X^*(f))だから、負の周波数を捨てて正の成分を2倍にしても情報は失われていない。解析信号はそのような「片側スペクトル」表現だと思えばいいかもしれない。

包絡線と瞬時周波数

AM 変調された信号 x(t)=A(t)cos(2πfct+ϕ(t))x(t) = A(t)\cos(2\pi f_c t + \phi(t)) に対して解析信号を作ると、

  • 絶対値 z(t)=A(t)|z(t)| = A(t)包絡線
  • 偏角の微分 finst(t)=12πddtargz(t)f_{\text{inst}}(t) = \frac{1}{2\pi}\frac{d}{dt}\arg z(t)瞬時周波数

になる。FM 復調の「搬送波の周波数変化を取り出す」という直感が、そのまま数式に乗っている。

I チャンネルと Q チャンネル

SDR レシーバーで実際にやっていることは、数学的には「搬送波周波数でベースバンドに落とす」こと——zBB(t)=z(t)ej2πfctz_{\text{BB}}(t) = z(t)\, e^{-j2\pi f_c t} という変換だ。ハードウェアではキャリア周波数の cos\cossin\sin で入力信号を混合して低域フィルタをかける。これが直交検波、出てくるのが I/Q だ。

ソフトウェアでヒルベルト変換フィルタを実装するなら、FIR 近似が普通だ。理想的なヒルベルト変換器の impulse response は h(t)=1/(πt)h(t) = 1/(\pi t) で非因果的なので、有限長に切って適当な遅延を加える。Parks-McClellan 設計の奇対称フィルタを使えば実用上十分な精度が得られる。

因果性との関係——Kramers-Kronig

少し深い話をすると、ヒルベルト変換は因果的なシステムの実部と虚部を結びつけるという根本的な意味を持っている。

因果的な線形システムの周波数応答 H(f)H(f) は、実部(利得)と虚部(位相の寄与)がヒルベルト変換の対になっている。これが Kramers-Kronig 関係だ。光学では屈折率(実部)と吸収係数(虚部)がこの関係でつながっていて、「光が遅くなる物質は吸収もある」という直感に対応する。RF の誘電率測定でも同じ構造が出てくる。


実信号から複素信号を作るというシンプルな操作が、因果性・変調理論・光学まで引き込んでいく。こういう広がり方が信号処理の面白いところかもしれない。

— ランキン

コメント

まだコメントはないよ。最初のひとことをどうぞ。