質問: 標本化定理をわかりやすく教えて! ”あるアナログ的な信号をデジタルデータにサンプリングする場合、原信号に含まれる周波数成分をすべて正確にサンプリングするためには、原周波数の2倍以上のサンプリング周波数が必要となる。これを標本化定理という。” と言うことですが、サンプリングした時点で途中の情報を捨てているのに何故完全に復元できるのか、納得できません。 出来れば絵付きでわかりやすく説明してください!お願いします。
回答: 確かに、小難しく説明した本が多くて、困りますね。ここではデジタル化に伴う値の量子化の効果は別問題として無視することにします。 説明の順番が逆になりますが、まず、ナイキスト周波数について。 ●サンプリング周波数が、信号に含まれる最高周波数の2倍未満であると、エリアシング(aliasing)が発生します。 まず実際にグラフを描いてやってみてください。 例えばサンプリング周波数が1である場合、 cos(0.125x2πt)という波形(周波数0.125)と、cos(0.875x2πt)という波形(周波数0.875)とが区別出来ません。或いは、cos(0 x 2πt)という波形(周波数0)と、cos(1x2πt)という波形(周波数1)とが区別出来ません。サンプリング周波数が1である場合、信号に0.5以上の周波数(xとする)の成分が含まれていると、あたかも0.5-xの周波数成分であるかのように見えてしまいます。これがエリアシングです。 つまり、エリアシングが起こると、元の周波数が幾らであったか分からなくなり、再現不能になります。サンプリング周波数の半分(ナイキスト周波数)以下の周波数成分しか含まない信号でないと、再現できる可能性はありません。 ●ナイキスト周波数以下の周波数成分しか含まない信号なら再生できること。 きちんと理解するにはフーリエ変換を一応知っていることが前提になります。 「周波数ωでサンプリングする」とは、数学的には元の関数f(t)にサンプリング関数s(t)をかけ算することです。s(t)は周期1/ωでスパイク(δ関数)が並んでいるものです。 s(x) = δ(x) + δ(x-1/ω) + δ(x+1/ω) + δ(x-2/ω) + δ(x+2/ω) + ..... | | | | | | | | | | | | | | -+--+--+--+--+--+--+-> t サンプリングされたデータ{f(t) s(t)}をフーリエ変換して周波数空間に写したものは f(x) * s(x) です。ここにf(x)はf(t)のフーリエ変換:つまり元の信号のスペクトル、s(x)はs(x)のフーリエ変換、* は畳み込み積分(convolution)です。s(x)は周期ωでスパイク(δ関数)が並んでいるものです。このため、f(x) * s(x)は次のように表すことができます。 f(x) * s(x) = f(x) +( f(x-ω) + f(x+ω) + f(x-2ω) + f(x+2ω) + ...... ) (なぜならδ(x-c)*f(x) = f(x-c)) ここで「エリアシングが生じた」ということは、「|x|<ω/2の範囲において()内の部分が0でない」ということと同等です。一度混ざり合ってしまうと、分離は不可能になります。 またf(x) * s(x)は、xに関して、周期ωの周期関数になっています。 f(x) ・ ・ ・・ ・ ・ ---+------+------+------+-> x -ω 0 ω 2ω s(x) = δ(x) + δ(x-ω) + δ(x+ω) + δ(x-2ω) + δ(x+2ω) + ..... | | | | | | | | ---+------+------+------+-> x -ω 0 ω 2ω f(x) * s(x) (エリアシングがない場合) ・ ・ ・ ・ ・ ・・ ・ ・・ ・ ・・ ・ ・・ ・ ・ ・ ・ ・ ・ ・ ・ ---+------+------+------+-> x -ω 0 ω 2ω もしエリアシングがなければ、元の波形のフーリエ変換f(x)を再現することができます。それには b(x) = |x|<ω/2 なら1, さもなくば0 b(x) +-----+ | | ---+------+------+------+-> x -ω 0 ω 2ω というフィルターを使います。このフィルターを掛けると (周波数空間では単にかけ算をすればよい) b(x) (f(x) * s(x)) = f(x) (b(x) * s(x)) = f(x) * δ(x) = f(x) となるからです。これはf(x) * s(x)の波形のうちの一つの周期だけを切り出すという操作です。 もしエリアシングが生じると(すなわちf(x)がx>|ω/2|においても0でないなら、図からわかるように)f(x) * s(x)は波形が裾野のところで重なり合ってしまうので、b(x)を使って切り出しても元のf(x)には戻りません。 サンプリングしたデータ (f(x) s(x))にb(x)の逆フーリエ変換であるフィルターb(t)を掛けても同じ事です。信号空間ではフィルターを掛けるには畳み込み積分を行いますから、 b(t) * (f(x) s(x)) = f(x) ということになる。ここで、b(t)とは sinc関数(「シンク」と読みます) b(t) = sin(πωt)/(πωt) です。b(0)=1、b(t) = -b(t)であることに注意して、グラフを描いてみてください。