雑記: サンプリング定理の話(その2)

キャラクターは架空のものです。お気付きの点がありましたらご指摘いただけますと幸いです。
参考文献

  1. Nyquist–Shannon sampling theorem - Wikipedia
  2. Fourier transform - Wikipedia

f:id:cookie-box:20200101101614p:plain:w60

前回は、関数 x(t)f_s/2 以上の周波数成分を含まないならば、サンプリング周波数 f_s でサンプリングした x(n/f_s), \, n \in \mathbb{Z}フーリエ変換[-f_s/2, f_s/2] の範囲を切り取って逆フーリエ変換することで元の x(t) を復元できる、という話をしたね。じゃあぴったり f_s/2 の周波数成分についてはどうなるのかを調べると、余弦波は復元できて正弦波は復元できなかった。これは、正弦波はそもそもサンプリングする点にいつも「波」がないのだから捉えられないのも当然といえる。

f:id:cookie-box:20200101101603p:plain:w60

それで前回の最後に副部長は「余弦波と正弦波をフーリエ変換してみてもわかる」といっていましたね。では余弦波からフーリエ変換してみますか。周波数 f_0余弦波は x(t)=\cos(2 \pi f_0 t) ですから、フーリエ変換の定義にしたがって、

\displaystyle \begin{split} X(f) &= \int_{-\infty}^\infty x(t) e^{-2 \pi i t f} dt = \int_{-\infty}^\infty \cos(2 \pi f_0 t) e^{-2 \pi i t f} dt = \int_{-\infty}^\infty \frac{e^{2 \pi i f_0 t} + e^{-2 \pi i f_0 t}}{2} e^{-2 \pi i t f} dt \\ &= \int_{-\infty}^\infty \frac{e^{-2 \pi i (f - f_0) t} + e^{-2 \pi i (f + f_0) t}}{2} dt = \frac{1}{2} \left[ \frac{e^{-2 \pi i (f - f_0) t}}{- 2 \pi i (f - f_0)}\right]_{t=-\infty}^{t=\infty} + \frac{1}{2} \left[ \frac{e^{-2 \pi i (f + f_0) t}}{- 2 \pi i (f + f_0)}\right]_{t=-\infty}^{t=\infty} \end{split}
…負けました。副部長、余弦波にはフーリエ変換はありません。

f:id:cookie-box:20200101101614p:plain:w60

投了しないで! 余弦波にもフーリエ変換はあるよ!!

f:id:cookie-box:20200101101603p:plain:w60

だって、上の積分は値をもちませんよ。フーリエ変換の定義は  X(f) = \int_{-\infty}^\infty x(t) e^{-2 \pi i t f} dt ですから、この積分ができない x(t)=\cos(2 \pi f_0 t)フーリエ変換をもたないと結論付けざるをえません。

f:id:cookie-box:20200101101614p:plain:w60

そのフーリエ変換の定義は x \in L^1(\mathbb{R}^n) である関数に対する定義だよ! L^1(\mathbb{R}^n) に属さない関数をフーリエ変換したいときは、定義を拡張するんだよ。つまり、その可積分関数に対するフーリエ変換の定義は、x(t), y(t) が2乗可積分でもあるならば以下のパーセバルの定理を満たす。「フーリエ変換L^2 -内積を保つ」といっても同じだ。

\displaystyle \int_{-\infty}^\infty x(t) \overline{y(t)} dt = \int_{-\infty}^\infty X(f) \overline{Y(f)} df
これをフーリエ変換の新しい定義にすることができる。x(t) が可積分でなくても、可積分y(t) との内積が定義できる関数なら(というか関数でなくても y(t) に作用してからそれを積分することができるようなものなら)、上式を満たす X(f)x(t)フーリエ変換とする(はず)。例えば  x(t) = e^{2 \pi i f_0 t} を左辺に代入してみよう。
\displaystyle \begin{split} \int_{-\infty}^\infty x(t) \overline{y(t)} dt &= \int_{-\infty}^\infty \overline{ y(t) } e^{2 \pi i f_0 t} dt = \int_{-\infty}^\infty \overline{ y(t)  e^{-2 \pi i f_0 t} } dt = \overline{ \int_{-\infty}^\infty y(t)  e^{-2 \pi i f_0 t}  dt } = \overline{Y(f_0)} \end{split}
よって \overline{Y(f_0)} = \int_{-\infty}^\infty X(f) \overline{Y(f)} df を満たす X(f)x(t)フーリエ変換だけど、この X(f) は「積分することで隣の関数のある点での値を抜いてくるもの」、つまりデルタ関数だ。よって X(f) = \delta(f - f_0) に他ならない(まあ以下の303番にもそうかいてあるし…)。

f:id:cookie-box:20200101101603p:plain:w60

 x(t) = e^{2 \pi i f_0 t}フーリエ変換X(f) = \delta(f - f_0) …となると、x(t) = \cos(2 \pi f_0 t)フーリエ変換

\displaystyle X_{\cos}(f) = \mathcal{F}\bigl[ \cos(2 \pi f_0 t) \bigr] = \frac{1}{2}  \mathcal{F}\bigl[e^{2 \pi i f_0 t}\bigr]+ \frac{1}{2}\bigl[e^{-2 \pi i f_0 t}\bigr] = \frac{1}{2}\delta(f - f_0) + \frac{1}{2}\delta(f + f_0)
ですね…。x(t) = \sin(2 \pi f_0 t)フーリエ変換も同様です。
\displaystyle X_{\sin}(f) = \mathcal{F}\bigl[ \sin(2 \pi f_0 t) \bigr] = \frac{1}{2i}  \mathcal{F}\bigl[e^{2 \pi i f_0 t}\bigr]- \frac{1}{2i}\bigl[e^{-2 \pi i f_0 t}\bigr] = \frac{1}{2i}\delta(f - f_0) - \frac{1}{2i}\delta(f + f_0)
まあ上のリンクの304番と305番にもこうかいてありますし…。しかし、余弦波のフーリエ変換も、正弦波のフーリエ変換も、2箇所に立つデルタ関数でできていて、どちらも似たような感じにみえますが。

f:id:cookie-box:20200101101614p:plain:w60

余弦波と正弦波の周波数 f_0 をサンプリング周波数の半分 f_s/2 にして、 X_{\cos}(f) X_{\sin}(f)f_s ずつずらして自身の「かげぶんしん」を重ねていくとどうなるかな。

f:id:cookie-box:20200101101603p:plain:w60

ああ、いまは余弦波/正弦波からのサンプルを離散フーリエ変換することを考えているのでしたね。余弦波はこうです。

\displaystyle \begin{split} \sum_{k = - \infty}^\infty X_{\cos}(f - k f_s) &= \frac{1}{2} \sum_{k = - \infty}^\infty \delta(f - k f_s - f_s / 2) + \frac{1}{2} \sum_{k = - \infty}^\infty \delta(f - k f_s + f_s / 2)  \\ &= \sum_{k = - \infty}^\infty \delta(f - k f_s - f_s/ 2) \end{split}
これ、2つの項がそれぞれ 1/2 の高さ(?)のデルタ関数を櫛のように立たせていますが、立たせている場所が同じなので、結局、f=f_s/2 を起点に f_s おきに高さ 1デルタ関数が立っていることになりますね。正弦波の方は、
\displaystyle \begin{split} \sum_{k = - \infty}^\infty X_{\sin}(f - k f_s) &= \frac{1}{2i} \sum_{k = - \infty}^\infty \delta(f - k f_s - f_s / 2) - \frac{1}{2i} \sum_{k = - \infty}^\infty \delta(f - k f_s + f_s / 2)  \\ &= 0 \end{split}
2つの項が高さ 1/2iデルタ関数の櫛と高さ -1/2iデルタ関数の櫛をちょうど同じ場所に建設しているので、相殺して消えますね…なんという負の奇跡…。

f:id:cookie-box:20200101101614p:plain:w60

うん、だから余弦波の離散フーリエ変換は、区間 [-f_s/2, f_s/2] を切り取って、区間の端は 1/2 倍すれば余弦波の離散ではないフーリエ変換の結果に一致する。正弦波の離散フーリエ変換は、区間 [-f_s/2, f_s/2] を切り取る以前に 0 だ。これじゃどうしようもない。


じゃあ  x(t) = \exp(\pi i f_s t) という関数だとどうなるかな? これは高くなったり低くなったりを繰り返す波ではなくて、時間 2/f_s の間に複素数平面の単位円上を反時計回りに一周することを繰り返す、「回転する振り子」のようなものだね。ちなみにこれのフーリエ変換X(f) = \delta(f - f_s/2) だとさっきやった。

f:id:cookie-box:20200101101603p:plain:w60

それなら離散フーリエ変換はこうですね。

\displaystyle \sum_{k = - \infty}^\infty X_{\exp}(f - k f_s) = \sum_{k = - \infty}^\infty \delta(f - k f_s - f_s/ 2)
ん? これ余弦波の離散フーリエ変換と一緒ですね…。複素数平面上を回転するものを時間 1/f_s ごとに観測した結果と、実軸上を往復するものを時間 1/f_s ごとに観測した結果とで、抽出した周波数成分が同じになってしまう…? いやでも、時刻 n/f_s における座標がどちらも \bigl( \cos(n \pi), \, 0 \bigr) で一致しているのでそれも道理な気はしますが。しかし、今回は正弦波のときのような相殺が起きたわけではありませんよね?? それなのに情報が欠落してしまうのでしょうか…?

f:id:cookie-box:20200101101614p:plain:w60

サンプリング定理の手続きには、暗黙裡に「ちょうど f_s/2 の周波数成分については、『反時計回りに回転する成分』と『時計回りに回転する成分』が等しい(区間 [-f_s/2, f_s/2] の端は 1/2 倍して切り取る)」という仮定が置かれている。だから、ちょうど 2/f_s の周期で複素数平面上を反時計回りに回転する振動子は、振幅の半分を「時計回りに回転する成分」にもぎとられてしまう。その結果、実軸上を往復する振動子に同一視されてしまう…って感じだと思うけどな。区間が重なる端っこの取り扱いはなんか決め打たないといけないし、対称だと考えるのが自然だろうしね。


結局、以下の関数をサンプリング周波数 f_s でサンプリングして元の信号を復元するとこうなるね。正弦波は「消える」。
  1.  x(t) = \cos(\pi f_s t) x(t) = \cos(\pi f_s t)
  2.  x(t) = \sin(\pi f_s t) x(t) = 0
  3.  x(t) = \exp(\pi i f_s t) = \cos(\pi f_s t) + i \sin(\pi f_s t) x(t) = \cos(\pi f_s t)
サンプリング周波数のちょうど半分 f_s/2 の周波数成分については 、「時刻 0複素数平面上のどこにいるか」の方向に射影した1次元の振動の成分しか生き残らない、とまとめることができるんじゃないかな。

f:id:cookie-box:20200101101603p:plain:w60

しかし、サンプリング周波数のちょうど半分の周波数の正弦波が消えてしまうとはややこしいですね。いったいどうするのがいいのか…。

f:id:cookie-box:20200101101614p:plain:w60

サンプリング周波数大きく取ればいいんじゃないかな。

f:id:cookie-box:20200101101603p:plain:w60

はい。

おわり