第10章

サンプリング定理

この章のねらい

  • サンプリングがスペクトルの周期的な複製を生むことを、くし型関数を使って式で導けるようになる
  • サンプリング定理とナイキスト周波数を自分の言葉で説明できるようになる
  • エイリアシング(折り返し)がいつ・どのように起きるかを予測できるようになる

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

やる夫

ずっと引っかかってたことがあるんだお。第4章でアナログ信号をサンプリングして離散時間信号にしたとき、サンプル点のの値は全部捨てたんだお。あれ、本当に捨てちゃってよかったのかお?

やらない夫

いい引っかかりだ。この章はその伏線を全部回収する回だ。問題をはっきり書いておこう。

連続時間信号 x(t)x(t) を、間隔 TT で測った値の列 x(nT)x(nT) だけが手元にある。この数列だけから、元の x(t)x(t) を完全に取り戻せるか?

やる夫

無理に決まってるお。サンプル点とサンプル点の間の埋め方なんて無数にあるお。点の上では同じ値を取って、間でこっそり暴れる別の信号がいくらでも作れるお。グラフの点つなぎだって、人によって違う絵になるんだお。

やらない夫

常識的に考えればそのとおりだ。実際、何の条件もなければ復元は不可能だ。お前の言うとおり、同じサンプル値を通る連続信号は無限にある。

ところが驚くべきことに、信号にある条件を課すと、その無数の候補の中から正解がただ1つに絞れる。サンプル値だけから元の連続時間信号が一意に、完全に復元できるんだ。

やる夫

ただ1つに!? 点の間を見てもいないのに、点の間の値が当てられるのかお!?

やらない夫

当てられる。その条件と理由を導くのがこの章、サンプリング定理だ。結論だけ先に言っておくと「信号に含まれる最高周波数の2倍より速くサンプリングしていれば完全復元できる」。ディジタル信号処理という分野がそもそも成立する根拠だから、ここは本教材のクライマックスだと思って付き合え。

やる夫

クライマックスかお…。気合いを入れるお。

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

やらない夫

まず道具を1つ用意する。間隔 TT でデルタ関数を無限に並べた関数だ。

δT(t)=n=δ(tnT)(10.1)\delta_T(t) = \sum_{n=-\infty}^{\infty} \delta(t - nT) \tag{10.1}

形が櫛の歯に似ているのでくし型関数と呼ぶ。

やる夫

デルタ関数の行進だお。こんなトゲトゲ、何に使うんだお。

やらない夫

次の節でサンプリングという操作そのものを表すのに使う。だがその前に、こいつのフーリエ変換を求めておきたい。

着眼点はこうだ。δT(t)\delta_T(t) は周期 TT で同じ形が繰り返す、つまり周期関数だ。周期関数なら第2章の複素フーリエ級数で展開できる。基本角周波数を ωs=2π/T\omega_s = 2\pi/T と書くと、フーリエ係数は

ck=1TT/2T/2δT(t)ejkωstdt=1TT/2T/2δ(t)ejkωstdt=1T(10.2)c_k = \frac{1}{T} \int_{-T/2}^{T/2} \delta_T(t)\, e^{-jk\omega_s t}\, dt = \frac{1}{T} \int_{-T/2}^{T/2} \delta(t)\, e^{-jk\omega_s t}\, dt = \frac{1}{T} \tag{10.2}
やる夫

ちょっと待つお、自力で確かめるお。積分区間は T/2-T/2 から T/2T/2 で、この中に入ってる櫛の歯は t=0t=0 の1本だけ…。あとは第3章のつまみ出し性質で、ejkωste^{-jk\omega_s t}t=0t=0 での値、つまり e0=1e^0 = 1 がつまみ出される…。だから kk によらず全部 1/T1/T かお!

やらない夫

完璧だ。くし型関数はすべての高調波を均等に含む。第3章で「δ(t)\delta(t) のスペクトルは定数1」とやったのと同じ匂いがするだろ。

あとは第3章の式 (3.8)、「周期信号のフーリエ変換は重み 2πck2\pi c_k のデルタ列」に流し込むだけだ。

δT(t)    2πTk=δ(ωkωs)=ωsk=δ(ωkωs)(10.3)\delta_T(t) \;\longleftrightarrow\; \frac{2\pi}{T} \sum_{k=-\infty}^{\infty} \delta(\omega - k\omega_s) = \omega_s \sum_{k=-\infty}^{\infty} \delta(\omega - k\omega_s) \tag{10.3}
やる夫

出てきたのもくし型だお! 時間側で間隔 TT のくし型をフーリエ変換すると、周波数側で間隔 ωs=2π/T\omega_s = 2\pi/T のくし型になるのかお。

やらない夫

そうだ。「くし型のフーリエ変換はくし型」。これがこの章の主役の道具だ。歯の間隔に注目しておけ。時間側の間隔 TT と周波数側の間隔 2π/T2\pi/T逆数の関係だ。細かくサンプリングするほど、周波数側の歯はまばらになる。この逆数関係があとで効いてくる。

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

やらない夫

では本題だ。「サンプリングする」という操作を数式にする。信号 x(t)x(t) にくし型関数を掛け算してみろ。

xs(t)=x(t)δT(t)=n=x(nT)δ(tnT)(10.4)x_s(t) = x(t)\, \delta_T(t) = \sum_{n=-\infty}^{\infty} x(nT)\, \delta(t - nT) \tag{10.4}
やる夫

えーと…デルタ関数は t=nTt = nT 以外で 0 だから、x(t)x(t) のうち t=nTt = nT での値だけが各デルタの重みとして生き残る…。お、サンプル値 x(nT)x(nT) の列ができてるお! 点の間の情報はこの瞬間に消えたんだお。

やらない夫

そうだ。この xs(t)x_s(t) がサンプリング後の信号のモデルだ。知りたいのはこいつのスペクトル Xs(ω)X_s(\omega) だな。ここで第8章でやった性質を引っ張り出す。時間領域の積は、周波数領域ではスペクトルのたたみこみになる

f(t)g(t)    12πF(ω)G(ω)(10.5)f(t)\, g(t) \;\longleftrightarrow\; \frac{1}{2\pi} F(\omega) * G(\omega) \tag{10.5}
やる夫

たたみこみと積のペアだお。畳む側がひっくり返るやつだお。

やらない夫

それだ。式 (10.4) に当てはめる。x(t)x(t) のスペクトルが X(ω)X(\omega)、くし型のスペクトルが式 (10.3) だから

Xs(ω)=12πX(ω)ωsk=δ(ωkωs)=ωs2πk=X(ωkωs)(10.6)X_s(\omega) = \frac{1}{2\pi}\, X(\omega) * \omega_s \sum_{k=-\infty}^{\infty} \delta(\omega - k\omega_s) = \frac{\omega_s}{2\pi} \sum_{k=-\infty}^{\infty} X(\omega - k\omega_s) \tag{10.6}

ここで2つの性質を使った。1つは「デルタ関数とのたたみこみは、デルタの立っている位置への平行移動コピー」、つまり X(ω)δ(ωkωs)=X(ωkωs)X(\omega) * \delta(\omega - k\omega_s) = X(\omega - k\omega_s)。もう1つは、定数 ωs/2π\omega_s/2\pi がたたみこみの外にそのまま出せること。

そして前に出た係数 ωs2π\dfrac{\omega_s}{2\pi} を片付けよう。くし型の歯の間隔は ωs=2π/T\omega_s = 2\pi/T(式 10.3 で確認したとおり)だったから、これを代入すると

ωs2π=2π/T2π=1T\frac{\omega_s}{2\pi} = \frac{2\pi/T}{2\pi} = \frac{1}{T}

と、2π2\pi がきれいに打ち消し合って 1/T1/T になる。よって

Xs(ω)=1Tk=X(ωkωs)(10.6’)X_s(\omega) = \frac{1}{T} \sum_{k=-\infty}^{\infty} X(\omega - k\omega_s) \tag{10.6'}

たたみこみの 1/2π1/2\pi と、くし型の重み ωs\omega_s が、ωs=2π/T\omega_s = 2\pi/T を通じてちょうど相殺し、残るのは 1/T1/T だけ——この一手がこの式の地味だが大事な急所だ。

やる夫

X(ωkωs)X(\omega - k\omega_s)kk について全部足されてる…。つまり元のスペクトル X(ω)X(\omega) が、ωs\omega_s おきに無限にコピーされて並んでるのかお!?

やらない夫

そういうことだ。この一行が章の心臓部だから、言葉でもう一度言う。

信号をサンプリングすると、そのスペクトルは「元のスペクトルを間隔 ωs\omega_s でずらしながら無限に複製して足し合わせたもの」になる。

時間側でくし型を掛けたら、周波数側ではくし型がたたみこまれた。たたみこみの相手がデルタの列だから、結果は複製の列。下のデモで目に焼き付けろ。緑が元のスペクトル、水色が複製だ。

SAMPLING — SPECTRUM REPLICAS INTERACTIVE
再生ボタンを押すと ωs が自動で 20→4 へ下がる(手動で下げてもよい)。水色の複製がじりじり寄ってきて、8(=2ωmax)を切った瞬間に隣の複製と重なり、ピンクの合計が元の緑と違う形に崩れる=これがエイリアシングの正体で、基本帯域に偽物の成分が足し込まれた状態。
やる夫

おお…ωs\omega_s を下げると、コピーの群れがじりじり寄ってくるお。なんか怖いお。で、ωs=8\omega_s = 8 を切ったらピンクの線が出てきて「エイリアシング発生!」って言われたお。

やらない夫

その「重なるかどうか」が運命の分かれ目だ。まずは重なっていない平和な場合から片付けよう。

10.4 連続時間信号の復元

やらない夫

元の信号のスペクトルが ωωmax|\omega| \le \omega_{\max} の範囲にしかない、つまり帯域制限されているとしよう。デモの三角形なら ωmax=4\omega_{\max} = 4 だ。複製は ωs\omega_s おきに並ぶから、隣の複製とぶつからない条件は

ωs2ωmax\omega_s \ge 2\omega_{\max}

だ。このとき式 (10.6’) の和のうち、ω<ωs/2|\omega| < \omega_s/2 の範囲には k=0k=0 の項、つまり元の X(ω)X(\omega) がそのまま(1/T1/T 倍されただけで)無傷で残っている

やる夫

無傷で残ってるなら…そこだけ切り出せば元に戻るんじゃないかお? 真ん中だけ通すフィルタで。

やらない夫

それが答えだ。理想ローパスフィルタを用意する。

H(ω)={T(ω<ωs/2)0(ωωs/2)(10.7)H(\omega) = \begin{cases} T & (|\omega| < \omega_s/2) \\ 0 & (|\omega| \ge \omega_s/2) \end{cases} \tag{10.7}

Xs(ω)X_s(\omega) にこれを掛ければ、複製は全部消え、k=0k=0 の項の 1/T1/T も利得 TT で打ち消されて、Xs(ω)H(ω)=X(ω)X_s(\omega) H(\omega) = X(\omega)。スペクトルが完全に一致するなら信号も完全に一致する。復元完了だ。

やる夫

あっさり勝ったお。…で、これを時間領域で見るとどういう操作になってるんだお? 「周波数領域で掛け算」は「時間領域でたたみこみ」だったお。

やらない夫

いい流れだ。式 (10.7) のフィルタのインパルス応答は、第3章でやった「矩形のフーリエ変換は sinc」の逆向きで

h(t)=sinc ⁣(tT),sinc(x)=sinπxπx(10.8)h(t) = \mathrm{sinc}\!\left(\frac{t}{T}\right), \qquad \mathrm{sinc}(x) = \frac{\sin \pi x}{\pi x} \tag{10.8}

これと xs(t)x_s(t)(デルタの列)のたたみこみだから、デルタの位置に sinc がコピーされて

x(t)=n=x(nT)sinc ⁣(tnTT)(10.9)x(t) = \sum_{n=-\infty}^{\infty} x(nT)\, \mathrm{sinc}\!\left(\frac{t - nT}{T}\right) \tag{10.9}

サンプル点1個につき sinc 関数を1本立てて、全部足す。これが「点の間を埋める」操作の正体で、sinc 補間と呼ぶ。

やる夫

待つお、検算するお。sinc((tnT)/T)\mathrm{sinc}((t - nT)/T)t=nTt = nT で 1、ほかのサンプル点 t=mTt = mTmnm \neq n)では sinc(mn)=0\mathrm{sinc}(m-n) = 0 だお。だから各サンプル点の上では自分の sinc だけが値 1 で立ってて、復元波形はちゃんと x(nT)x(nT) を通る…。点の間は、全部の sinc の裾が協力して埋めてるのかお。

やらない夫

そのとおり。しかも重要なのは、これが「それっぽい滑らかな補間」ではなく、帯域制限された信号に対しては唯一の正解だという点だ。10.1 節でお前が言った「埋め方は無数にある」は、帯域制限という条件がその無数の候補を1つに絞る、というのが種明かしだ。ωs/2\omega_s/2 より速く振動する成分を持たない関数で、全サンプル点を通るものは1つしかない。下のデモで、sinc の裾が点と点の間を埋める様子を目で確かめろ。

SINC INTERPOLATION INTERACTIVE
「個々の sinc を表示」をオンにすると、各標本(緑の茎)に1本ずつ立つ薄い sinc が見える。自分の標本点で高さ1・他の標本点で0なので、点の間だけを全 sinc の裾が協力して埋め、その総和(緑の太線)が原信号(水色)にぴたり重なる=これが sinc 補間の正体。
やる夫

おお…薄い線が1個ずつ波打ってて、それを全部足すと点の間がスッと埋まるお。各 sinc は自分の点では 1、隣の点では 0 だから、点の上では1人だけが立ってて、点と点の間だけみんなで分担してるのが見えるお!

やらない夫

それが式 (10.9) の絵だ。サンプル数 M を増やしても各 sinc の役割は変わらない。1点1本、裾で間を埋める。これを無限和まで延ばしたものが理想の完全復元だ。

10.5 エイリアシング

やらない夫

さて、いよいよ重なる場合だ。ωs<2ωmax\omega_s < 2\omega_{\max} だと、隣の複製が基本帯域 ω<ωs/2|\omega| < \omega_s/2はみ出して足し込まれる。さっきのデモでピンクの線が見せていた状況だ。

やる夫

はみ出した分は、もともとそこにあった成分と足し算されちゃうんだお? 足されたら最後、どっちがどっちか分からないお…。

やらない夫

そう、分からない。これが致命的なんだ。k=1k=1 の複製 X(ωωs)X(\omega - \omega_s) のはみ出しは、元の信号の高い周波数成分が、低い周波数の位置に化けて現れたものだ。具体的には、周波数 ωmax\omega_{\max} 付近の成分が ωsωmax\omega_s - \omega_{\max} という低い周波数に折り返ってくる。この現象をエイリアシング(折り返しひずみ)と呼ぶ。alias、つまり「偽名」だ。

一度混ざったら、ローパスフィルタだろうが何だろうが、後からは絶対に分離できない。そして、ここまでの話をまとめると有名な定理になる。

やる夫

「最高周波数の2倍より速く」だお。ぴったり2倍じゃダメなのかお?

やらない夫

一般にはダメだ。反例が簡単に作れる。sin(2πfs2t)\sin(2\pi \cdot \frac{f_s}{2} t) をちょうど fsf_s でサンプリングしてみろ。サンプル点は t=n/fst = n/f_s だから、値は sin(πn)=0\sin(\pi n) = 0全サンプルが 0 になって、信号があったことすら分からなくなる。だから不等号は厳密な >> だ。

それより、エイリアシングが起きたとき信号がどう見えるかを時間領域で体感しておけ。下のデモは fs=8f_s = 8 Hz 固定で、周波数 ff の cos 波をサンプリングして sinc 補間で復元する装置だ。ff をナイキスト周波数の 4 Hz を超えて上げてみろ。

ALIASING — TIME DOMAIN INTERACTIVE
f を 4 Hz 以下にすると、橙の復元波形は灰の原信号にぴったり重なる(点の間まで正しく当たる)。f を 4 Hz より上げると、緑のサンプル点は原信号に乗ったままなのに、復元波形は「同じ点を通る別の低い周波数の波」に化ける。f=7Hz で見かけ 1 Hz=高い成分が低い周波数の偽名を名乗るエイリアシング。
やる夫

f = 3 Hz までは橙の復元波形が原信号に完全に重なってるお。すごいお、本当に点の間が当てられてるお…。でも f = 7 Hz にしたら、サンプル点はちゃんと原信号の上に乗ってるのに、復元波形がゆーっくりした 1 Hz の波になっちゃったお!

やらない夫

それがエイリアシングの顔だ。7 Hz の波と 1 Hz の波は、8 Hz でサンプリングする限りまったく同じサンプル値の列を出す。受け取った側には区別する手がかりが一切ない。そして復元装置(理想ローパス)は、候補のうちナイキスト周波数以下の方、つまり 1 Hz を選ぶ。7 Hz の信号が 1 Hz の「偽名」を名乗るわけだ。

やる夫

…あれ? この話、聞き覚えがあるお。第4章で「離散時間の世界では ω\omegaω+2π\omega + 2\pi の区別がつかない」ってやったお。あれと同じことかお?

やらない夫

同じことだ。よく繋げた。第4章では「離散時間信号の性質」として天下り的に出てきた話が、今は「スペクトルが ωs\omega_s おきに複製されるから」という理由付きで言える。正規化角周波数で 2π2\pi ずれた波、実周波数で言えば fff±fsf \pm f_sf±2fsf \pm 2f_s、… は、サンプリングされた瞬間に同じ顔になるんだ。

身近な実例もある。車の CM やレースの映像で、タイヤのホイールがゆっくり逆回転して見えたことはないか?

やる夫

あるお! あれずっと不思議だったんだお。

やらない夫

カメラは毎秒の決まったコマ数(たとえば 30 fps)で撮影する。これは回転の位相を 30 Hz でサンプリングしているのと同じだ。ホイールの回転(×スポークの本数)がその半分を超えると、位相の進みが折り返して、「少しだけ戻った」ようにしか見えなくなる。扇風機の羽根やヘリのローターが映像で止まったり逆転したりするのも全部同じ、目の前で起きてるエイリアシングだ。

やる夫

なるほどだお…。じゃあ音楽 CD のサンプリング周波数が 44100 Hz っていうのも、この定理から来てるのかお。

やらない夫

そうだ。人間の可聴域はせいぜい 20 kHz までと言われている。定理によれば 40 kHz より速くサンプリングすれば可聴域は完全に記録できる。44.1 kHz はそれに余裕を持たせた値だ。なぜぴったり 40 kHz にしないのか、その「余裕」が何のために要るのかは、次章のアンチエイリアスフィルタの話で分かる。

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

やらない夫

最後に、この章の道具で見晴らしのいい場所に登って終わろう。ここまでの教材で「フーリエなんとか」が4種類出てきたのに気づいてるか。フーリエ級数(第1・2章)、フーリエ変換(第3章)、離散時間フーリエ変換(第5章)、離散フーリエ変換(第6章)だ。

やる夫

気づいてたお…。正直、4人の顔の区別に自信がないままここまで来たお…。

やらない夫

今日でけりをつける。実は4種類の違いは、たった2つの法則の組み合わせで全部説明できる。どちらもこの章でやったことだ。

  1. 時間をサンプリングする(くし型を掛ける)⇔ スペクトルが周期化する(くし型がたたみこまれて複製が並ぶ) — 式 (10.6) そのもの
  2. 時間が周期的(くし型がたたみこまれている)⇔ スペクトルが離散化する(くし型が掛かって線スペクトルになる) — 第3章の式 (3.8) そのもの

積とたたみこみはフーリエ変換で互いに入れ替わるから、この2つは同じコインの裏表だ。これで表が埋まる。

変換時間側周波数側
フーリエ変換連続・非周期連続・非周期
フーリエ級数連続・周期的離散・非周期
離散時間フーリエ変換離散・非周期連続・周期的
離散フーリエ変換離散・周期的離散・周期的
やる夫

おお…。フーリエ級数は「時間が周期的だから周波数が離散(線スペクトル)」、離散時間フーリエ変換は「時間が離散だから周波数が周期的(2π2\pi ごとに繰り返す)」…。あ、ちょうど鏡写しになってるお! 第3章の最後の意味深な予告はこれだったのかお!

やらない夫

回収完了だ。そして4つ目の離散フーリエ変換は、時間側に両方の細工をした姿だ。サンプリングしたからスペクトルは周期的になり、さらに周期化した(N点で繰り返すとみなした)からスペクトルは離散的になる。結果、時間も周波数も「離散かつ周期的」で、どちらも有限個の数列で書ける。だからコンピュータで計算できる。第6章で出てきた「N点の循環する世界」の正体は、時間側の周期化が連れてきたものだったわけだ。

やる夫

4人は別人じゃなくて、同じフーリエ変換に「くし型の化粧」をどっち側に施したかの違いだったんだお…。なんか視界が開けたお。

やらない夫

その視界を持ってスペクトル解析の実務に降りるのが次章だ。サンプリング定理が「原理上できる」を保証し、次章は「実際にやるとどう汚れるか」を扱う。

この章のまとめ
  • くし型関数(間隔 TT のデルタ列)のフーリエ変換は、間隔 ωs=2π/T\omega_s = 2\pi/T のくし型関数
  • サンプリング=信号×くし型。スペクトルでは くし型とのたたみこみ になり、X(ω)X(\omega)間隔 ωs\omega_s で無限に複製される: Xs(ω)=1TkX(ωkωs)X_s(\omega) = \frac{1}{T}\sum_k X(\omega - k\omega_s)
  • 複製が重ならなければ(ωs>2ωmax\omega_s > 2\omega_{\max})、理想ローパスフィルタで基本帯域を切り出して完全復元できる。時間領域では sinc 補間 x(t)=nx(nT)sinc((tnT)/T)x(t) = \sum_n x(nT)\,\mathrm{sinc}((t-nT)/T)
  • サンプリング定理: fs>2fmaxf_s > 2f_{\max} なら帯域制限信号は完全復元可能。fs/2f_s/2 がナイキスト周波数
  • ωs<2ωmax\omega_s < 2\omega_{\max} では複製が重なり、高い周波数成分が低い周波数に化けるエイリアシングが起きる。一度混ざると分離不可能(車輪の逆回転はその実例)
  • 時間のサンプリング ⇔ スペクトルの周期化、時間の周期化 ⇔ スペクトルの離散化。この2法則で、4種類のフーリエ変換は1枚の絵にまとまる