この記事では、主に高校生を対象に、フーリエ変換(Fourier transform)というものを使って波にどんな周波数の成分が含まれているのかを見てみようという話をします。波は私たちの身の回りにありふれた存在です。例えば、多くの人が意思の疎通を取るために使うのは音声ですが、これは空気を伝わっていく波です。それ以外にも、テレビなどの放送に使われる電波は、電場と磁場の振動が波として伝わっていくものです。こういったさまざまな波を扱うときには、その波にどの周波数の成分がどのくらい入っているかというのが重要になってきます。高い声や低い声、あるいはその声が「あ」なのか「い」なのかといったことも、どういう周波数成分がどの程度含まれるかを見ると見当がつくのです。
そのための基礎となるのが、今回紹介するフーリエ変換です。まずは前提となる数学の話を軽くした後、本題の、波の周波数成分を見てみようという話をします。今回はかなり直感的で感覚的な説明をしているので、もっと厳密にやりたい!という人はぜひ、大学の授業や、大学で使うような教科書で学んでみてください。
高校数学のベクトルの話
まずは前提となる数学の話をします。いきなりベクトルの話をするので最初は何のことだかわからないかもしれませんが、読みすすめれば関連があるということがわかってくると思いますから、安心して読んでいってください。
ベクトルの成分と内積
みなさんは高校などでベクトルを勉強しましたか?ベクトルを全く知らない、となるとこの先の話を理解するのに結構苦労すると思われるので、一旦教科書でベクトルを勉強してくるなり、授業で習うのを待つなりするのがいいかもしれません。
ベクトルを勉強したことのある皆さんなら、ベクトルを成分表示したこともあると思います。例えば、$\vec v = (1,-3)$みたいなやつですね。この1とか-3とかって何だったか覚えてますか。そう、$\vec a, \vec b$を基底としたときに$\vec v = 1\vec a + (-3)\vec b$と表される、この係数でした。ここで、$\vec a, \vec b$が正規直交基底である、つまり$|\vec a| = |\vec b| = 1, \vec a \cdot \vec b = 0$である場合を考えましょう。馴染み深い例としては、$\vec a$が$x$軸正の向きの長さ1のベクトル、$\vec b$が$y$軸正の向きの長さ1のベクトル、というような場合でしょうか。$\vec a, \vec b$が正規直交基底であるような場合には、$\vec v$の成分表示を知りたいと思ったときに$\vec a, \vec b$それぞれとの内積を計算すれば良いです。このことを式で書くと、
$\vec v = \left(\vec v \cdot \vec a, \vec v \cdot \vec b \right)$
ですね。これから説明することを理解するために、まずはこのとことを頭に入れておいてください。
「波」もベクトル?
波の周波数成分を見てみようというときに、いきなりベクトルの話をし出したので、勘のいい人なら「波もベクトルで、上と同じことが言えるんじゃない?」と思っている頃合いじゃないでしょうか。その通り、「波」もベクトルです。かっこ付きで書いているのは、実際の波がというよりは、波を表すような関数が、という意味だからです。ここでは「波」として時間の関数$f(t)$を考えましょう。詳しいことは教科書なり大学の授業なりで勉強してもらうとして、いまは$f(t)$を、滑らかな関数だとしましょう。すると、このような関数は、皆さんが高校などで習ったベクトルと同じ性質を満たします。例えば、
- 各時刻における関数の値をそれぞれ定数倍したり足したりして新しい関数を作っても(これを関数の定数倍、足し算として定義しましょう)、やっぱり条件を満たす関数である(ベクトルは定数倍したり足したりできましたよね)。
- どの関数に足しても元のまま、という関数がある(定数関数の0です)(これが零ベクトルです)。
- どの関数にも、足すと0になるような関数がある(各時刻の値の符号を反転させたものがそうです)(これは逆ベクトルです)。
などです。高校の数学では、ベクトルといえば「向きと大きさを持った」矢印のことでしたが、同じような性質を持ったものに広げて、より一般的な意味でのベクトルを考えることができます。詳しいことは線形代数を勉強すると良いです。
結論としては、波を表すような関数もベクトルとして満たすべき性質を満たすので、ベクトルです。さらにいうと、ベクトルの中でも特に、内積や「大きさ」(ノルム)が計算できる類のベクトルです(実は、ベクトルに内積や「大きさ」は必須ではないのです)。
フーリエ変換を定義しよう
さて、「波」がベクトルであるとわかったところで、「波」の、周波数ごとの成分を見るためにはどうすれば良いかを考えましょう。一つ目の話題のところで、直交基底を持ってきてそれと内積を取れば、その「方向」の成分がわかるという話をしましたよね。ですから、今からは
- どういう基底を取ってくれば周波数ごとの成分を見られるのか(基底の取り方)
- 関数の内積はどう計算すればいいのか(内積の定め方)
を考えていきます。そして最後に、現実の波にフーリエ変換を適用した例を見てみましょう。
「波」の基底
どういう「波」を基底に取るかという話ですが、周波数ごとの成分を見たいのだということを思い出せば、$\sin$や$\cos$が良いということがわかるでしょう。一つの周波数のみを含むような「波」と内積を取れば、その周波数における成分がわかるのではないかということです。
さて、$\sin(2\pi f t)$と$\cos(2 \pi f t)$はどちらも周波数$f$の「波」ですが、どちらを採用するのが良いのでしょうか。あるいは、両方採用すべきでしょうか。片方ではダメだとしたら、この両方を一つのものとしていっぺんに表す方法はないでしょうか。結論から言ってしまうと、これは両方採用すべきで、一つのものとして表す方法も知られています。なぜなのか、という理由の部分はここでは省くので、一旦以下の事実(オイラーの公式、オイラーは Eulerです)を受け入れてください。
$$
\mathrm{e}^{\mathrm{i}\theta} = \cos \theta + \mathrm{i} \sin \theta
$$
ここで登場する$\mathrm{e}$は自然対数の底で、$\mathrm{i}$は虚数単位です。$\theta$は実数の変数です。この式は、自然対数の底を純虚数乗すると三角関数になるということを言っています。見慣れない式かもしれませんが、これが非常に便利で、工学部では非常によく使う式なのです。ちなみに、$\theta = \pi$の場合の表式$\mathrm{e}^{\mathrm{i} \pi} + 1 = 0$は「世界一美しい式」だとかいって結構有名だったりします(実際に美しいのかどうかは分かりません)。この式ならみたことがあるという人も多いんじゃないでしょうか。
それはともかく、ここで受け入れてほしいのは、周波数$f$の成分を見るための基底として$\mathrm{e}^{\mathrm{i}\cdot 2\pi f t}$を採用するよ、ということです。続いて、「波」の内積ってなんだ?という話をします。
「波」の内積
高校で習うベクトルの内積を思い出してみましょう。例えば
$$
(2,1) \cdot (1,-3) = 2\cdot 1 + 1 \cdot (-3) = -1
$$
のように、成分表示されていれば成分ごとに掛け算して全部足せばよかったですね。この考え方から類推すると、「波」どうしの内積も各成分どうしを掛けて全部足せばいいということにならないでしょうか。いま波を表す関数$f(t)$の各時刻(各$t$)における値がそれぞれ成分だとしましょう(一つの時刻においてのみ$1$でそれ以外では$0$となるような関数を基底に取った場合の成分表示だと考えましょう)。そうすると、各成分どうしの積は各時刻における値の積ですし、それを全部足すというのは時間について積分するということになると考えることができます。ただし、成分が複素数なので片方は複素共役をとります。したがって、二つの「波」$f(t),g(t)$の内積は
$$
\int_{-\infty}^{\infty}f(t)g^*(t)\mathrm{d}t
$$
と表せるのです。
フーリエ変換はこれだ
必要な道具は揃いました。フーリエ変換してみましょう。
フーリエ変換とは、いま調べたい「波」$x(t)$と、周波数$f$の「波」$\mathrm{e}^{\mathrm{i}\cdot 2\pi f t}$との内積です。調べたい「波」$x(t)$をフーリエ変換したもの(フーリエスペクトル、Fourier spectrumと呼んだりします)を$X(f)$(これは周波数$f$の関数です)とすると、
$$
X(f) = \int_{-\infty}^{\infty}x(t) \mathrm{e}^{-\mathrm{i}\cdot 2\pi ft} \mathrm{d}t
$$
と表されます。$f$に具体的な値を当てはめると、その周波数における成分が関数$X(f)$の値として得られます。$\mathrm{e}^{\mathrm{i}\cdot 2\pi ft}$が複素数であることから想像がつくと思いますが、一般には$X(f)$も複素数です。なので、実数の値として$|X(f)|^2$もよく用いられます。