10. サンプリング定理

10.1 サンプリングされた信号から元の連続時間信号を復元できるか

やらない夫
これまでは,連続時間信号は連続時間信号,離散時間信号は離散時間信号と別々に考えてきた.今回は,両者の間の関係を考えてみたい.

やる夫
関係っていうと,連続時間信号を一定時間おきにサンプリングして,離散時間信号を作った場合にどうなるかとか,そういうことかお.

やらない夫
そういうことだな.例えば電気信号にしろ,音声信号にしろ,現実世界にある多くの信号は連続時間信号だ.それをコンピュータで処理するために,サンプリングして離散時間信号にする.そうやってコンピュータで処理している離散時間信号が,元の現実世界の信号をどのくらい反映しているか,元の信号が持っている情報を失わずに保っているのか,そういったことを把握しておくのは重要だ.

やる夫
そんなこと言っても,サンプリングされた時刻と時刻の間の情報は捨てちゃっているわけだお.サンプリング周期を短くすればするほど現実世界の信号に近くはなるだろうけど,情報が失われるのは避けようがないお.

やらない夫
本当にそうだろうか.

やる夫
そりゃそうだお.例えば時刻 $ n$$ n+1$ の信号のサンプル値が与えられていたとして,その間の連続信号が捨てられていたら,捨てられてしまった部分のことは知りようがないお.元の信号がどんなものだったか復元しようとしても,時刻 $ n$$ n+1$ のサンプル間を結ぶ経路はいくらでもあるし,仮に「全部の点を滑らかに結ぶこと」みたいな制約をつけたとしたって,やっぱり無数の可能性があるお.だから,元の連続時間信号を知ることは絶対にできないお.


\includegraphics[scale=0.5]{fig_sampling/interpolation.eps}

やらない夫
一般論としては,まあその通りだな,常識的に考えて….

だが実は,元の信号に割と現実的な制約条件を考えてやることで,その常識的な想像を覆すことができる.つまり,サンプリングされた信号から,元の連続時間信号を完全に復元することができる.シャノンのサンプリング定理,あるいは標本化定理と呼ばれる有名な結果だ.

連続時間信号 $ x(t)$ の帯域が $ \Omega_\textnormal{c}$ に制限されていたとする.すなわち $ X(\Omega) = {\cal F}[x(t)]$

$\displaystyle X(\Omega) = 0   $   for $\displaystyle \vert\Omega\vert \geq \Omega_\textnormal{c}$ (10.1)

を満たすとする.

このとき,サンプリング周波数 $ \Omega_\textnormal{s}= \frac{2\pi}{T_\textnormal{s}}$

$\displaystyle \Omega_s > 2 \Omega_\textnormal{c}$ (10.2)

を満たせば,サンプリング後の離散時間信号 $ x_\textnormal{d}[n] = x(t)\vert _{t =
nT_\textnormal{s}}$ から,元の信号 $ x(t)$ を完全に復元できる.

つまり,元の信号の帯域の 2 倍を超える周波数でサンプリングしておけば,完全復元が可能ということだ.

やる夫
えっと,どういうことだお.捨ててしまったサンプル間の信号が取り返せるってことかお?

やらない夫
そういうことだ.ただし条件として,元の信号が帯域制限されていることが要求される. $ x_\textnormal{d}[n]$ $ x_\textnormal{d}[n+1]$ の間を結ぶ方法は無数にあるけど,復元された信号が $ \Omega_\textnormal{c}$ 以上の周波数成分を含まないように結ぼうと思うと,一意に定まってしまうってことだな.

やる夫
ああ,そう言われると,原理上無理な話でもないってのは理解できるお.しかし本当にそんなことできるのかお.

やらない夫
というわけで,どうすればそんなことができるのかを丁寧に見ていこうと思う.帯域制限なんていう周波数領域での条件が関与していることからわかるとおり,鍵になるのは周波数領域での検討だ.

元の連続時間信号を $ x(t)$ としよう.周波数領域で見ると $ X(\Omega)$ だ.

$\displaystyle X(\Omega) = {\cal F}[x(t)]$ (10.3)


\includegraphics[scale=0.5]{fig_sampling/orig_sig.eps}

これをサンプリング周波数 $ \Omega_\textnormal{s}$,つまりサンプリング周期 $ T_\textnormal{s}= 2\pi/\Omega_\textnormal{s}$ でサンプリングして離散時間信号 $ x_\textnormal{d}[n]$ を得たとしよう.

$\displaystyle x_\textnormal{d}[n] = x(t) \vert _{t = nT_\textnormal{s}}$ (10.4)


\includegraphics[scale=0.5]{fig_sampling/sampling_xt.eps}

やる夫
時刻 $ t = nT_\textnormal{s}$ のところの値をサンプルしてくるわけだお.

やらない夫
これを周波数領域で見るには,離散時間信号だから離散時間フーリエ変換するわけだ.

$\displaystyle X_\textnormal{d}(\omega)$ $\displaystyle =$   DTFT$\displaystyle [x_\textnormal{d}[n]]$ (10.5)
  $\displaystyle = \sum_{n = -\infty}^{\infty} x(n T_\textnormal{s}) e^{-j\omega n}$ (10.6)

これからやるのは,端的に言うと,この $ X_\textnormal{d}(\omega)$ から $ X(\Omega)$ を完全に復元できるかという問題を考えようということだ.

やる夫
えっと,$ X(\Omega)$ が元の信号のスペクトルで, $ \Omega = -\infty$$ \infty$ で与えられているんだお.それに対して $ X_\textnormal{d}(\omega)$ はサンプリングされた信号のスペクトルだから,周期 $ 2\pi$ で周期的なスペクトル形状になるんだお.

やらない夫
そうだな.今 $ X(\Omega)$ は形状がわかっているとしようか.一方 $ X_\textnormal{d}(\omega)$ の形状はわからないけど,周期 $ 2\pi$ の周期関数だということだけはわかっている.この両者の関係を考えよう.


\includegraphics[scale=0.5]{fig_sampling/xd_omega.eps}

やる夫
あれ? $ X(\Omega)$ は非正規化周波数 $ \Omega$ で, $ X_\textnormal{d}(\omega)$ は正規化周波数 $ \omega$ で表されているんだお.関係を考えるのがちょっとややこしいお.

やらない夫
そうそう,このままじゃ比べにくいので,非正規化周波数に統一して考えることにしよう.

やる夫
えっと,正規化周波数と非正規化周波数の間の関係は式 (4.3) の

$\displaystyle \omega$ $\displaystyle = \Omega  T_\textnormal{s}$ (4.3)

だったお.

やらない夫
ああ. $ X_\textnormal{d}(\omega)$$ \omega$ $ \Omega T_\textnormal{s}$ で置き換えて考えていけばいいってことだな.


$ t = nT_\textnormal{s}$ であることにも注意しておこう. $ e^{-j\omega n}$ $ e^{-j(\Omega T_\textnormal{s})n}$ と置き換え可能で,これは $ e^{-j\Omega t}$ と同じものを指す.それから,正規化周波数の $ 2\pi$ が,非正規化周波数では $ 2\pi / T_\textnormal{s}= \Omega_\textnormal{s}$ に対応していることも確認しておこう.


\includegraphics[scale=0.5]{fig_sampling/xd_omega_nonnorm.eps}

やる夫
うーん,置き換えるのはわかったお.でも,何か全然 $ X(\Omega)$ との関係が見えてこないお.

やらない夫
$ X(\Omega)$ は連続時間のフーリエ変換,つまり積分で与えられているからな.一方 $ X_\textnormal{d}(\Omega T_\textnormal{s})$ は離散時間フーリエ変換なので,総和で計算される.同じ土俵に乗せるために, $ X_\textnormal{d}(\Omega T_\textnormal{s})$ の方も積分の「フーリエ変換」で表示してみよう.

やる夫
えーっと,…どういうことかお?

やらない夫
離散時間フーリエ変換を導入したときのことを思い出してくれ.各時刻の値に複素指数関数をかけて総和を取るのが離散時間フーリエ変換だったが,それは,各時刻の値にデルタ関数をかけてフーリエ変換したのと同じことだった.そのテクニックをここでも使ってやろう.つまり式 (10.7) は

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = \int_{-\infty}^{\infty} \left\{\sum_{n = -\infty}^{\infty}\delta(t - nT_\textnormal{s})\right\} x(t)e^{-j\Omega t} dt$ (10.8)

と書き直せる.

やる夫
あー,確かにやったお.デルタ関数は積分すると1になるから,あらかじめ各時刻の値にかけておくと,総和の代わりに積分で表せるんだったお.

やらない夫
これが何を表しているかというと

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = {\cal F}\left[\left\{\sum_{n = -\infty}^{\infty}\delta(t - nT_\textnormal{s})\right\} x(t)\right]$ (10.9)

ということだな.デルタ関数を $ T_\textnormal{s}$ おきに並べたもの $ \sum_{n = -\infty}^{\infty}\delta(t - nT_\textnormal{s})$ を元の連続時間信号 $ x(t)$ にかけて,それをフーリエ変換したもの,それがサンプリングされた信号のスペクトルだ.


\includegraphics[scale=0.5]{fig_sampling/xd_omega_comb.eps}

ここで右辺にたたみこみと積の関係 (式(8.29)) を使うと,

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = \frac{1}{2\pi}{\cal F}\left[\sum_{n = -\infty}^{\infty}\delta(t - nT_\textnormal{s})\right] * X(\Omega)$ (10.10)

が得られる.

やる夫
あっ,ついに $ X(\Omega)$ が出てきたお!

やらない夫
これでようやく,元の信号のスペクトル $ X(\Omega)$ とサンプリングした信号のスペクトル $ X_\textnormal{d}(\Omega T_\textnormal{s})$ を関係づけることができたわけだ.

ここまでの話をざっくりまとめると,サンプリングするということは,すなわち $ \sum_{n}\delta(t - nT_\textnormal{s})$ をかけることに相当している.これを周波数領域で見ると, $ \sum_{n}\delta(t - nT_\textnormal{s})$ のフーリエ変換をたたみこむことを意味する.

やる夫
うーん, $ \sum_{n}\delta(t - nT_\textnormal{s})$ がかなり重要っぽいお.

やらない夫
だな.重要なので名前をつけて呼びたいんだが,実は教科書によって呼び方がまちまちだったりする.メジャーなのとしては,くし型関数 (comb function) とか,デルタ列 (delta train) なんてのがある.ここではくし型関数と呼ぶことにしよう.記号もいろいろな書き方があるんだが,

$\displaystyle \delta_{T_\textnormal{s}}(t) = \sum_{n = -\infty}^{\infty}\delta(t - nT_\textnormal{s})$ (10.11)

と書くことにしよう.デルタの下付き添え字が「くし歯」の間隔を表すことにする.

やる夫
くしって,髪をとかすあの「くし」かお.まー,よくそんな名前思いついたもんだお.

やらない夫
さっきの話をこの記法で書き直すと,


となる.残る問題は,くし型関数のフーリエ変換 $ {\cal F}[\delta_{T_\textnormal{s}}(t)]$ はどういうスペクトルになるか,それをたたみこむというのはどういう操作か,の2つだ.これらを順番に見ていこう.

10.2 くし型関数のフーリエ変換

やらない夫
というわけで,まずはくし型関数のフーリエ変換からだ.最終的には数式で示そうと思うが,その前にちょっとだけ直観的な把握をしておこうと思う.

やる夫
その方がありがたいお.

やらない夫
まず最初に,くし型関数 $ \delta_{T_\textnormal{s}}(t)$ が周期 $ T_\textnormal{s}$ の周期関数だってことに注意しよう.ということは,周波数領域ではどうなる?

やる夫
何度も出てきた話だお.周波数領域では $ \Omega_\textnormal{s}= 2\pi/T_\textnormal{s}$ おきに飛び飛びの値を持つ離散的なスペクトルになるお.

やらない夫
次に,くし型関数 $ \delta_{T_\textnormal{s}}(t)$ $ T_\textnormal{s}$ おきにしか値を持たない離散的な信号でもあることにも注意しよう.ということは,周波数領域ではどうなる?

やる夫
お? あ,そうか.てことは,周波数領域では周期 $ \Omega_\textnormal{s}$ で周期的ってことになるはずだお.

やらない夫
今の話の両方を考慮するとどうなる?

やる夫
んーと,同じ間隔 $ \Omega_\textnormal{s}$ で周期的でもあって,なおかつ離散的でもあるわけだお.結局, $ \Omega_\textnormal{s}$ おきにしか値を持たなくて,しかも各点での値は同じになるしかないんだお.


\includegraphics[scale=0.5]{fig_sampling/fourier_comb_question.eps}

やらない夫
そうなるな.さらに,パーセバルの等式 (9.2) が成り立たなきゃいけないことを考慮しよう.もしも周波数領域の各点の値が有限値だとすると,二乗して積分しても 0 になってしまうわけだ.一方,時間領域はくし型関数なので,0 にはならない.

やる夫
…ということは,結局,周波数領域も各点が無限大の高さを持つしかなさそうだお.ん? それってやっぱりくし型関数にならないかお?

やらない夫
ご明察.くし型関数のフーリエ変換はやっぱりくし型になる.

ちゃんと計算で示しておこうと思う.ただし,ちょっと技巧的になるけどな.まず,くし型関数 $ \delta_{T_\textnormal{s}}(t)$ が周期 $ \Omega_\textnormal{s}$ の周期関数であることに注意して,フーリエ級数展開しておく.

$\displaystyle \delta_{T_\textnormal{s}}(t)$ $\displaystyle = \sum_{k = -\infty}^{\infty} \left[ \frac{1}{T_\textnormal{s}} \...
...\delta(t) e^{-j\Omega_\textnormal{s}kt} dt \right] e^{j\Omega_\textnormal{s}kt}$ (10.13)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} e^{j\Omega_\textnormal{s}kt}$ (10.14)

やる夫
…えーっと? あ,大カッコ $ [ ]$ の中はフーリエ係数なんだお.くし型関数のくし 1 本分だけが積分区間に含まれているので,デルタ関数で置き換えていいんだお.

やらない夫
その上で,各項をフーリエ変換するという手順を取る.このとき,式 (3.51) の関係 $ e^{j\Omega_1 t} \stackrel{\cal F}{\longrightarrow}
2\pi\delta(\Omega - \Omega_1)$ を使う.

$\displaystyle \delta_{T_\textnormal{s}}(t)$ $\displaystyle = \frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} e^{j\Omega_\textnormal{s}kt}$ (10.15)
  $\displaystyle \stackrel{\cal F}{\longrightarrow}\frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} 2\pi \delta(\Omega - k\Omega_\textnormal{s})$ (10.16)
  $\displaystyle = \frac{2\pi}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} \delta(\Omega - k\Omega_\textnormal{s})$ (10.17)
  $\displaystyle = \Omega_\textnormal{s}\delta_{\Omega_\textnormal{s}}(\Omega)$ (10.18)

やる夫
つまり,時間領域で間隔 $ T_\textnormal{s}$ のくし型関数は,周波数領域では間隔 $ \Omega_\textnormal{s}= 2\pi/T_\textnormal{s}$ で高さが $ \Omega_\textnormal{s}$ 倍されたくし型関数になるってことだお.

$\displaystyle \delta_{T_\textnormal{s}}(t) \stackrel{\cal F}{\longrightarrow}\Omega_\textnormal{s}\delta_{\Omega_\textnormal{s}}(\Omega)$ (10.19)


\includegraphics[scale=0.5]{fig_sampling/fourier_comb.eps}

やらない夫
これが,サンプリング定理を導出するための1個めの鍵だ.

10.3 くし型関数をたたみこむ

やらない夫
そもそも何の話をしてたかというと,式(10.12) の関係

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = \frac{1}{2\pi}{\cal F}[\delta_{T_\textnormal{s}}(t)] * X(\Omega)$ (10.12)

について考えてるんだった.今わかったことは,これが

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = \frac{1}{2\pi} \Omega_\textnormal{s}\delta_{\Omega_\textnormal{s}}(\Omega) * X(\Omega)$ (10.20)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \delta_{\Omega_\textnormal{s}}(\Omega) * X(\Omega)$ (10.21)

と書けるということだ.

やる夫
サンプリングされた信号のスペクトル $ X_\textnormal{d}(\Omega T_\textnormal{s})$ は,元の信号のスペクトル $ X(\Omega)$ にくし型関数をたたみこんだものになるってことだお.

やらない夫
その結果どうなるかってのは,まあ計算してみれば簡単だ.やってみるといい.

やる夫
簡単ならやってみますお.

$\displaystyle \frac{1}{T_\textnormal{s}} \delta_{\Omega_\textnormal{s}}(\Omega) * X(\Omega)$ $\displaystyle = \frac{1}{T_\textnormal{s}}\left[\sum_{k = -\infty}^{\infty} \delta(\Omega - k\Omega_\textnormal{s})\right] * X(\Omega)$ (10.22)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \int_{-\infty}^{\infty} \left[\sum_{k = -\infty}^{\infty} \delta(W - k\Omega_\textnormal{s})\right] X(\Omega - W)dW$ (10.23)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} \int_{-\infty}^{\infty} \delta(W - k\Omega_\textnormal{s}) X(\Omega - W)dW$ (10.24)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} X(\Omega - k\Omega_\textnormal{s})$ (10.25)

ってことかお.いや,できたけど,そんなに簡単でもなかったお….この計算ちゃんと合ってるのかお?

やらない夫
自信ないか? じゃあ,ちょっと意味を考えてみようか.たたみこみってそもそもどういう現象を表現しているんだった?

やる夫
この間やった話だお.インパルス応答が $ h(t)$ の線形時不変システムに入力 $ x(t)$ を入れたときに出てくる出力が, $ h(t) * x(t)$ になるんだったお.

やらない夫
じゃあ,入力として $ x(t) = \delta(t - T_1)$ を入れたら?

やる夫
ん,定数 $ T_1$ だけ時間シフトしたデルタ関数ってことかお.そりゃ時不変システムなんだから,インパルス応答を $ T_1$ だけ時間シフトしたものが出てくるお.

$\displaystyle h(t) * \delta(t - T_1) = h(t - T_1)$ (10.26)


\includegraphics[scale=0.5]{fig_sampling/response_shift.eps}

やらない夫
そうだな.$ t = T_1$ にインパルスが立っているデルタ関数 $ \delta(t -
T_1)$ をたたみこむってことは,たたみこまれる関数 $ h(t)$ をそのインパルスの位置までずらしてやるってことだ.

じゃあ,入力として $ x(t) = \delta_{T_1}(t)$ を入れた場合はどうなる?

やる夫
くし型関数だから,デルタ関数が時間 $ T_1$ おきに並んでやって来るんだお.出力は,そのインパルス1個1個への応答の重ね合わせなので,たくさんのインパルス応答 $ h(t)$$ T_1$ ずつずらしたものの足し合わせが出て来るはずだお.

$\displaystyle h(t) * \delta_{T_1}(t) = \sum_{n = -\infty}^{\infty} h(t - nT_1)$ (10.27)


\includegraphics[scale=0.5]{fig_sampling/response_comb.eps}

やらない夫
ああ.さっきの式 (10.25) の辺りでやる夫がやった計算も,これを周波数領域でやっただけだ.

やる夫
ああ,そうか.$ X(\Omega)$ を周波数領域のインパルス応答みたいなものだと考えて,そういうシステムにくし型関数を入力したんだお.だから, $ X(\Omega)$ $ \Omega_\textnormal{s}$ ずつずらしながら重ね合わせたものになってるんだお.辻褄は合ってるお.

やらない夫
というような,デルタ関数とかくし型関数をたたみこむ操作はよく出てくるので,ちゃんとイメージできるようになっておくのがよいだろう.基本的には今みたいにシステムの時間領域の応答を考えるのがわかりやすいと思う.周波数領域だとイメージはしにくいが,全く同じことだ.

10.4 連続時間信号の復元

やらない夫
今のがサンプリング定理を導出するための2つめの鍵だ.これでほとんど導出できたようなもんだ.

やる夫
そんなもんですかお.えーと,結局,サンプリングされた信号のスペクトルは

$\displaystyle X_\textnormal{d}(\Omega T_\textnormal{s})$ $\displaystyle = \frac{1}{T_\textnormal{s}} \delta_{\Omega_\textnormal{s}}(\Omega) * X(\Omega)$ (10.21)
  $\displaystyle = \frac{1}{T_\textnormal{s}} \sum_{k = -\infty}^{\infty} X(\Omega - k\Omega_\textnormal{s})$ (10.28)

てな風に,元の信号のスペクトルを $ \Omega_\textnormal{s}$ ずつずらして並べたのを足し合わせたものになるってのがここまでの結論だお.


\includegraphics[scale=0.5]{fig_sampling/convolved_x_omega.eps}

やらない夫
今,元の信号のスペクトル $ X(\Omega)$ $ \Omega_\textnormal{s}/2$ 以下に帯域制限されているとしよう.

このときのサンプリング後のスペクトル $ X_\textnormal{d}(\Omega T_\textnormal{s})$ はどんな形になる?

やる夫
帯域制限されているってことは, $ -\Omega_\textnormal{s}/2$ $ \Omega_\textnormal{s}/2$ の範囲以外は 0 だってことだお.てことは,あ,重ならずに並べられるんだお.


\includegraphics[scale=0.5]{fig_sampling/convolved_x_omega_bandlimit.eps}

やらない夫
そうだ.だから, $ -\Omega_\textnormal{s}/2$ $ \Omega_\textnormal{s}/2$ の部分だけ抜き出してくるような処理をしてやれば,元のスペクトル $ X(\Omega)$ が完全に取り出せることになる.数式で書くならこうだな.


ただし $ H_\textnormal{r}(\Omega) = T_\textnormal{s}G_{-\Omega_\textnormal{s}/2,\Omega_\textnormal{s}/2}(\Omega)$ で, $ G_{-\Omega_\textnormal{s}/2,\Omega_\textnormal{s}/2}(\Omega)$ は式(3.27) の矩形関数とする.

$\displaystyle G_{-\Omega_\textnormal{s}/2,\Omega_\textnormal{s}/2}(\Omega)$ $\displaystyle = \left\{ \begin{array}{ll} 1, & \vert\Omega\vert \leq \Omega_\textnormal{s}/ 2 0, & \text{otherwise} \end{array}\right.$ (10.30)


\includegraphics[scale=0.5]{fig_sampling/reconst_in_freq.eps}

やる夫
つまり,サンプリング後の信号 $ x_\textnormal{d}[n]$ を,離散時間フーリエ変換して,角周波数 $ -\Omega_\textnormal{s}/2$ $ \Omega_\textnormal{s}/2$ の範囲以外の成分をカットして,残った成分を $ T_\textnormal{s}$ 倍して,それを逆フーリエ変換すれば元の信号 $ x(t)$ になるってことかお.

やらない夫
そういうことだな.周波数スペクトルに $ H_\textnormal{r}(\Omega)$ をかけるというのは,低周波のみを残す作用を意味しているわけで,そういう作用をするシステムを一般に低域通過フィルタ,英語でローパスフィルタと呼んだりする.特に今のように,指定された周波数 $ \Omega_\textnormal{s}/2$ より高い成分をすっぱりカットして, $ \Omega_\textnormal{s}/2$ より低い成分を完全に残すものは,理想的低域通過フィルタと呼ぶ.結局,サンプリングされた信号から元の信号を復元する方法とは,理想的低域通過フィルタを通すことに他ならない.

やる夫
周波数領域でそうなるのはわかったお.でも,まだいまいちピンと来ないお.最初に, $ x_\textnormal{d}[n]$ $ x_\textnormal{d}[n+1]$ を結ぶ方法は無数にあるけど,帯域制限を満たすようにすると一意に定まってしまうって言ってたお.結局,どうやって結ぶことになるんだお?

やらない夫
時間領域でどうなるかってことだな.その場合は逆フーリエ変換して考えることになる.

やる夫
んーと,どういうことだお?

やらない夫
周波数領域で $ H_\textnormal{r}(\Omega)$ をかけるってことは,時間領域では $ h_\textnormal{r}(t) = {\cal F}^{-1}[H_\textnormal{r}(\Omega)]$ をたたみこむってことだ.それが時間領域でサンプル間の結び方を与えることになる.

ちょっと面倒ではあるんだが,ゆっくり考えてみようか.式(10.29) を時間領域で考えると

$\displaystyle x(t)$ $\displaystyle = h_\textnormal{r}(t) * {\cal F}^{-1}[X_\textnormal{d}(\Omega T_\textnormal{s})]$ (10.31)
  $\displaystyle = h_\textnormal{r}(t) * \left( \sum_n x_\textnormal{d}[n] \delta(t - nT_\textnormal{s}) \right)$ (10.32)

になる.

やる夫
ん,えーと,たたみこみと積の関係のことを言っているのはわかるお.でもデルタ関数が出てくるのはどういうことだお?

やらない夫
$ X_\textnormal{d}(\Omega T_\textnormal{s})$ $ x_\textnormal{d}[n]$ の離散時間フーリエ変換だからな.仮に離散時間フーリエ逆変換するとしたら $ x_\textnormal{d}[n]$ に戻るんだが,今は $ {\cal F}^{-1}$,つまりフーリエ逆変換しているので, $ x_\textnormal{d}[n]$ の各点にデルタ関数をかけたものに戻ることになる.


\includegraphics[scale=0.5]{fig_sampling/relation_dtft_ft.eps}

やる夫
あー,いつものトリックだお.

やらない夫
で,この計算が何をしているかというと,とりあえず $ x_\textnormal{d}[n]$ のところを無視したとすると,くし型関数のたたみこみなわけだ.つまり $ h_\textnormal{r}(t)$ $ T_\textnormal{s}$ 間隔でずらっと並べて足し合わせることになる.ただし実際には係数 $ x_\textnormal{d}[n]$ があるから,ずらっと並んだそれぞれの高さを $ x_\textnormal{d}[n]$ 倍にしておかないといけない.

つまり $ h_\textnormal{r}(t)$ $ nT_\textnormal{s}$ だけシフトして $ x_\textnormal{d}[n]$ 倍したものを全 $ n$ について足し合わせたのが $ x(t)$ だ.これもある種のたたみこみととらえればいいんだが,離散信号 $ x_\textnormal{d}[n]$ と連続信号 $ h_\textnormal{r}(t)$ の離散たたみこみになっているのがややこしいところだ.

やる夫
んー,想像しにくいお.

やらない夫
$ h_\textnormal{r}(t)$ の具体的な形を考える方がいいかもな. $ H_\textnormal{r}(\Omega)$ を逆フーリエ変換することで求めておこう.式(3.31) の結果を使えばいい.

やる夫
あ,そういえば, $ G_{-\Omega_\textnormal{s}/2,\Omega_\textnormal{s}/2}(\Omega)$ の逆フーリエ変換は前に一度計算してるんだお.えーと,

$\displaystyle {\cal F}^{-1}[H_\textnormal{r}(\Omega)]$ $\displaystyle = T_\textnormal{s}{\cal F}^{-1}[G_{-\Omega_\textnormal{s}/2,\Omega_\textnormal{s}/2}(\Omega)]$ (10.33)
  $\displaystyle = T_\textnormal{s}\frac{1}{\pi t} \sin{\frac{\Omega_\textnormal{s}t}{2}}$ (10.34)
  $\displaystyle = \frac{\sin{\frac{\pi t}{T_\textnormal{s}}}}{\frac{\pi t}{T_\textnormal{s}}}$ (10.35)

そうそう,sinc 関数になるんだったお.

やらない夫
この sinc 関数の形状についてちょっと確認しておこう.式(3.36) の「正規化sinc関数」と見比べると,$ t$ $ t / T_\textnormal{s}$ で置き換えたものになっているだろ.

やる夫
なってるお.正規化 sinc 関数は $ t = \pm 1, \pm 2, \pm 3, \cdots$ で 0 になるように正規化されていたので,今たたみこむ sinc 関数は $ t = \pm T_\textnormal{s}, \pm 2T_\textnormal{s}, \pm 3T_\textnormal{s}, \cdots$ で 0 になるような形になるお.


\includegraphics[scale=0.5]{fig_sampling/norm_sincs.eps}

やらない夫
分子の sin がサンプル間でちょうど半周期進むようになっているわけだな.そして $ t = 0$ のところの高さが 1 であることにも気をつけて,式(10.32) のたたみこみを考えると,例えばこんな感じになる.青い点が各サンプルの値だ.赤い曲線が1個1個の sinc 関数で,それらすべてを足し合わせたものが元の信号の復元結果になる.


\includegraphics[scale=0.5]{fig_sampling/reconst_in_time.eps}

やる夫
あー,各サンプルの点を頂点とするような sinc 関数を並べて,全部足し合わせるって感じかお.うーん.結構ややこしい仕組みでサンプル間を結ぶことになるんだお.

やらない夫
ややこしいのもそうだが,sinc 関数が $ t \rightarrow \pm\infty$ まで無限に続くものだというのが実用上は大きな困難だ.元の信号を復元するときに,あるサンプルの値の影響は無限時間先までえんえんと及ぼしてやる必要があるわけだ.だから実際には「理想的」じゃない何らかの低域通過フィルタで代用してやる必要がある.

10.5 エイリアシング

やる夫
ってことは,完全に復元できるってのは単に理論上の話ってことかお.じゃあサンプリング定理の条件を満たすか満たさないかは,実用上は,あまり重要じゃないってことかお?

やらない夫
そういうわけでもないぞ.後から復元する/しないに関わらず,サンプリング定理の条件を満たさずにサンプリングを行ったときに,どういう影響が出てくるかを考えておこう.

やる夫
条件を満たさないってのは,サンプリング周波数が元の信号の帯域の 2 倍に達しない場合だお.その場合は,サンプリング後の信号のスペクトルは,こんな風に $ X(\Omega)$ のすそ同士が重なり合うことになるお.


\includegraphics[scale=0.5]{fig_sampling/xd_omega_undersampled.eps}

やらない夫
その図だとすそ同士をかさねて描いてあるが,実際には重なったところは足し算になるという点に注意して欲しい.その結果,元の信号の異なる周波数が混ざってしまって区別できなくなるわけだ.例えば元の信号の帯域が 100 Hz だったとしよう.この信号を 150 Hz でサンプリングしたとする.

やる夫
100 Hz の 2 倍に達していないから,サンプリング定理の条件は満たしていないお.

やらない夫
そのときどうなるかというと,75 Hz を境にして 75 $ \pm \alpha$ Hz の信号が互いと混ざってしまう.80 Hz の成分は 70 Hz と混ざるし,90 Hz の成分は 60 Hz の成分と混ざり,見分けがつかなくなるんだな.


\includegraphics[scale=0.5]{fig_sampling/xd_omega_undersampled_150hz.eps}

やる夫
丁度 75 Hz で折り返されたような感じだお.

やらない夫
そういうわけで,サンプリング定理の条件を満たさないような周波数でサンプリングすると,本来の信号とは違う周波数成分が現れてしまう.このことを折り返し雑音とか,エイリアシングとか呼んだりする.

やる夫
そっか,最終的に元の信号を復元しようがしまいが,サンプリング定理の条件が満たされていないと,サンプリングした時点で本来無かったはずの信号成分が現れてしまったりするんだお.確かにそれはまずいお.

折り返しってのは今の 75 Hz で折り返す意味の折り返しかお.

やらない夫
その通り.本当は 70 Hz の信号成分なんか無かったのに,80 Hz の成分が折り返されてきて 70 Hz に見えたりするわけで,これを折り返し雑音と呼ぶ.エイリアシングってのは直訳するなら「別名づけ」ってところかな. 80 Hz の信号成分が,70 Hz にも 80 Hz にも見えるわけで,そういうところから来た名前だろうな.

やる夫
サンプリングするときは,ちゃんと元の信号の帯域の2倍以上のサンプリング周波数を確保することが重要だってことがわかったお.

やらない夫
そうだな.で,重要な概念にはだいたい名前がついている.ただし,かなり紛らわしい2つの用語が混在しているので注意だ.

ナイキストレート (Nyquist rate)
信号の帯域 $ \Omega_\textnormal{c}$ が与えられたとき,その信号の情報を失うことなくサンプリングできるサンプリング周波数 (サンプリングレート) の下限 $ 2\Omega_\textnormal{c}$
ナイキスト周波数 (Nyquist frequency)
サンプリング周波数 $ \Omega_\textnormal{s}$ が与えられたとき,情報を失わずにサンプリングできるような信号が含む周波数成分の上限 $ \Omega_\textnormal{s}/2$

やる夫
えっ,な,何? ナイキストレートとナイキスト周波数で意味が違うのかお?

やらない夫
英語の標準的な教科書,例えば Oppenheim & Schafer (1998) とかだと明確に使い分けられているようだな.日本語の文献だとしばしば混乱がある.

レートも周波数も本質的には同じ概念を指す言葉だが,レートの方が使える文脈が限られているんだな.つまり「単位時間あたり何回サンプルできるか」という意味のサンプリング周波数の代わりに「サンプリングレート」という言葉を使うことはできるが,「信号が 100 Hz の周波数成分を含む」という代わりに「100 Hz のレート成分を含む」とはちょっと言い難い.ということを考えると,「ナイキストレート」という言葉は「サンプリングレートの下限」の方にしか使えなさそうってのはまあ納得のいくところだ.

やる夫
でも,逆に「ナイキスト周波数」って言葉であればどっちの意味で使ってもそんなに違和感ないと思うお.

やらない夫
そうだな.そういう意味で微妙な用語だなとは思う.ともかく「ナイキスト何とか」と言われたら,(誤用の可能性も含めて) この2種類の概念を指し得るということ知っておくといい.実際にどっちの意味で使われているかは,ほとんどの場合は文脈から判断できる.

10.6 くし型関数で理解する4種類のフーリエ変換の関係

やらない夫
今回の話は,サンプリング定理自体が重要なのも確かだが,その導出の過程で出てきた考え方が重要だ.

やる夫
何かいっぱい出てきて大変だったお.

やらない夫
まず,連続信号をサンプリングするという操作を,くし型関数をかけることで表すという考え方だ.

やる夫
そこがちょっとまだピンと来てないお.くし型関数をかけるといろいろうまく行くのはわかったし,離散時間フーリエ変換とかを導出するときにも同じような考え方をしたけど,やっぱりもっと普通に $ x(t)$ のうち $ t = \cdots,
-T_\textnormal{s}, 0, T_\textnormal{s}, 2T_\textnormal{s}, \cdots$ のところの値を単純に抜き出してくる方がサンプリングらしい気がするお.

やらない夫
いや,別にそれがダメってわけじゃないんだぞ? サンプリング後の信号をどうやって操作するかによって,便利な表現が変わるってことだ.その辺をクリアに理解するためには,連続時間信号と離散時間信号が別物だってことをはっきり意識しておくことが重要だ.

やる夫
えーっと,意識しているつもりではいるんだけど,どういうことかお?

やらない夫
連続時間信号 $ x(t)$ をサンプリングして $ x_\textnormal{d}[n] = x(t)\vert _{t =
nT_\textnormal{s}}$ を作る,っていうときの $ x_\textnormal{d}[n]$ は正真正銘の離散時間信号だ.このときはデルタ関数をかけたりしないし,かけることに意味が無い.デルタ関数は連続時間の関数だからな.

やる夫
それはわかるお.

やらない夫
ややこしいのは,連続時間信号をサンプリングして,でもそれを連続時間の関数として扱いたいときだ.今回みたいに,連続時間のフーリエ変換で操作したいときなんかがその例だな.その場合,単純に

$\displaystyle x_\textnormal{d1}(t) = \left\{\begin{array}{ll} x(t), & t = \cdot...
...ormal{s}, ,2T_\textnormal{s}\cdots 0, & \text{otherwise} \end{array}\right.$ (10.36)

という風にするのが一概に間違いというわけじゃない.ただし,例えばこれをフーリエ変換しようと思うと,ゼロになってしまって困るというのは何度も見てきた通りだ.

やる夫
だからくし型関数をかけよう,って話だったお.

やらない夫
そうだな.そういうときは

$\displaystyle x_\textnormal{d2}(t) = x(t)\sum_n \delta(t - nT_\textnormal{s})$ (10.37)

にするわけだった.

やる夫
そこが気持ち悪いお. $ x_\textnormal{d1}(t)$ $ x_\textnormal{d2}(t)$ は明らかに違う関数なんだお.どっちも $ x(t)$ をサンプリングしたものである $ x_\textnormal{d}[n]$ と同じもののはずなのに,どうして別の関数になるんだお?

やらない夫
その「同じもののはず」というのが幻想だ.離散時間信号は離散時間信号,連続時間信号は連続時間信号,全くの別物だ.同じものではあり得ない.

やる夫
えーっ,そうなんかお.え,あの,同じじゃないんだったら,一体何なんだお.

やらない夫
単に「そのように対応づけると約束する」ということだな.同一視するといってもいい.約束するだけだからどんな表現でもアリっちゃアリなんだが,何らかの意味で現実をうまく表しているものが便利なわけだ.

だから $ x_\textnormal{d1}(t)$ にしろ $ x_\textnormal{d2}(t)$ にしろ, $ t = nT_\textnormal{s}$ のところでのみ値を持ってほかは 0,という表現を共通して選んでいるわけだ.サンプリングという操作の表現としてはまあ自然なものだろう.

やる夫
まあ,そうだお.

やらない夫
値を持つところ,つまり $ t = nT_\textnormal{s}$ のところの瞬時の値自体を重視して,それが $ x(t)$ と一致するように取ったのが $ x_\textnormal{d1}(t)$ の表現だ.ただしそうすると,積分が常にゼロになってしまう.代わりに,積分したものが $ x_\textnormal{d}[n]$ の総和と一致するように取ったのが $ x_\textnormal{d2}(t)$ の表現だ.代償として,瞬時値自体は $ x(t)$ と一致しない,というか,無限大なんていう厄介な代物になってしまう.

やる夫
それで,フーリエ変換を考えるときは $ x_\textnormal{d2}(t)$ の方が都合がよいってわけかお.

やらない夫
ということだな.そしてこの「サンプリング = くし型関数をかける」を理解すると,今までやってきた4種類のフーリエ変換の関係の見通しがよくなる.

やる夫
どういうことだお?

やらない夫
普通のフーリエ変換から始めよう.時間領域でくし型関数をかけることでサンプリングする.


\includegraphics[scale=0.5]{fig_sampling/sampling_xt_by_comb.eps}

これを周波数領域で見るとどうなる?

やる夫
えーと,積のフーリエ変換はフーリエ変換のたたみこみになるんだお.で,くし型関数のフーリエ変換はくし型関数なので,周波数領域ではくし型関数をたたみこむことになるお.

やらない夫
くし型関数をたたみこむと,元のスペクトルを「くし歯」の間隔で並べて足し合わせることになるんだった.その結果,周期的なスペクトルが得られる.これが,離散時間フーリエ変換だ.


\includegraphics[scale=0.5]{fig_sampling/dtft_by_comb.eps}

やる夫
お? おお.

やらない夫
時間領域の周期信号を考えよう.これは,1周期 $ T_0$ の分だけからなる信号に,くし歯の間隔が $ T_0$ のくし型関数をたたみこんだものだと見ることができる.

やる夫
すると,周波数領域ではくし型関数をかけることになるんだお.そうか,これがフーリエ級数展開だお.なるほど,離散的なスペクトルになる理由がよくわかるお.


\includegraphics[scale=0.5]{fig_sampling/fs_by_comb.eps}

やらない夫
残る離散フーリエ変換も同様だ.離散時間フーリエ変換からスタートして,時間領域が周期的の場合を考える.1周期分からなる信号にくし型関数をたたみこむことで表すことができる.すると周波数領域ではくし型関数がかけられることになって離散的になる.

あるいは,フーリエ級数展開からスタートしてもいい.

やる夫
えーと,フーリエ級数展開を考えて,時間領域でくし型関数をかけてサンプリングするんだお.すると,周波数領域ではくし型関数がたたみこまれて,周期的なスペクトルが現れるお.

やらない夫
時間領域と周波数領域で,周期性と離散性は表裏の関係にあるとこれまで何度も話してきた.その関係が,くし型関数を使って考えるとこんなにすっきり説明できるわけだ.

swk(at)ic.is.tohoku.ac.jp
2016.01.08