大学時代に全く理解できなかった概念があります。それが「フーリエ変換」です。
測定装置の基本原理として何度も登場したので名前だけはよく覚えているのですが、「そもそも何をしているのか」「何の役に立つのか」がさっぱり分からず、特に「絵も波で表せる」という話にはかなり困惑していました。
ところが後になって興味を持った合成音声について調べていると、フーリエ変換とかなり深く関係していることに気づきました。
そこで今回は、大学時代には理解できなかったフーリエ変換を、合成音声や実際の測定装置を例にして改めて学び直してみます。
導入:足立レイとは
今回、フーリエ変換に興味を持つきっかけになったのが「足立レイ」です。
足立レイは、みさいる氏が開発している等身大のヒューマノイドロボットで、自分の足で立って歩くことができるロボットを目指して開発が進められています。
そして、このプロジェクトの面白いところは、ロボットとしての身体だけではありません。
ソフトウェア面ではUTAU音源なども公開されており、従来の足立レイの音声は、人間の声をそのまま録音して加工するのではなく、正弦波などの単純な波を組み合わせる方式によって作られています。
つまり、かなり極端に言えば「人間の声を録音して人間っぽくする」のではなく、「単純な波をうまく組み合わせて人間っぽい声を作る」という発想です。
ここで、今回の主役である「フーリエ変換」が登場します。
本物の合成音声
詳しくは実際の解説動画を見ると分かりやすいのですが、内容をかなり簡単にまとめると、人間の声はさまざまな周波数の波が重なったものと考えることができます。
例えば同じ「ア」という音でも、単純な1本の正弦波だけでは人間の声には聞こえません。基本となる周波数に加えて、その整数倍付近の成分や、声帯・喉・口などの影響によって強調されたさまざまな周波数成分が含まれています。
そこで、「この周波数を少し入れて、この周波数をもっと強くして……」と、たくさんの波をうまく組み合わせることで、人間の声に近い音を作ることができます。
足立レイの音声を理解するうえでも、この「複数の単純な波を組み合わせて複雑な音を作る」という考え方は重要です。
これは、フーリエ変換を理解するための非常に良い例でもあります。
フーリエ変換の考え方
ここまでの話を逆にしてみましょう。「いろいろな波を組み合わせて声を作れる」のであれば、「この複雑な声には、どんな波がどれくらい含まれているのか?」を調べることもできそうです。
これがフーリエ変換の基本的な考え方です。複雑な波を、「この周波数がこれくらい」「こちらの周波数がこれくらい」という周波数ごとの成分に分解していきます。
そして逆に、その周波数成分をもう一度組み合わせれば、元の複雑な波を再現することができます。
この「分解」と「組み立て」の関係が、フーリエ変換を理解するうえで最も重要なポイントです。
足立レイの音声を作る考え方は、厳密に言えば単純に「逆フーリエ変換そのもの」というわけではありませんが、「複数の単純な波を組み合わせて複雑な音を作る」という意味では、逆フーリエ変換の考え方と非常によく似ています。
そもそも、なぜ波に分解できるのか?
ここで少し不思議なことがあります。なぜ複雑な音や振動を「単純な正弦波の組み合わせ」として考えてよいのでしょうか。フーリエ解析では、一定の条件のもとで、複雑な周期信号をさまざまな周波数の正弦波や余弦波の組み合わせとして表現できます。例えば、y(t)=sin(2π×0.5t)+0.5sin(2π×0.7t)という波を考えてみましょう。これは「0.5 Hzの波を1つ」と「0.7 Hzの波を半分の大きさで1つ」を重ねたものです。グラフにすると、2本の単純な波を足しただけなのに、少し複雑な形になります。逆に、この複雑な波を見て「0.5 Hzの波がどれくらい入っている?」「0.7 Hzの波はどれくらい?」と調べることができれば、元の波の中身が分かります。
フーリエ変換はどうやって調べる?
では、どうやって「どの周波数が含まれているか」を調べるのでしょうか。直感的には、調べたい周波数の波と、測定した波を「重ね合わせて相性を見る」と考えると分かりやすいです。例えば、y(t)=sin(2π×0.5t)+0.5sin(2π×0.7t)という波の中に0.5 Hzの波がどれくらい含まれているか知りたいとします。そこで、元の波に0.5 Hzの正弦波を掛け合わせます。すると、同じ周波数の波を掛け合わせた部分と、異なる周波数同士を掛け合わせた部分ができます。ここで重要なのは、掛け算しただけで終わらず、それを一定の時間について全部足し合わせることです。すると、同じ周波数の成分は積み上がりやすい一方、異なる周波数の成分はプラスとマイナスが打ち消し合いやすくなります。つまり、「この波と似た成分が、どれくらい入っているのか」を調べられるわけです。これを考えられるさまざまな周波数について繰り返すことで、「100 Hzが強い」「500 Hzは少ない」「2,000 Hzにも成分がある」といった具合に、元の複雑な波を周波数ごとに調べることができます。これがフーリエ変換のイメージです。
フーリエ変換の具体的な式
実際のフーリエ変換は、X(f)=∫−∞∞x(t)e^−i2πftdtという式で表されます。いきなり難しくなりました。特にeで始まる特殊な形が出てきますが、これは複素数を使ってsinとcosをまとめて扱うための表現だと考えると、ひとまず十分です。オイラーの公式によってe^iθ=cosθ+i sinθと書けるため、正弦波と余弦波を一つの式で扱えるというメリットがあります。もちろん、途中で「i」という虚数が登場するので、大学の数学ではここが一気に難しく感じるポイントでもあります。ただ、ここで重要なのは式そのものよりも、「元の波に、調べたい周波数の波を掛けて、時間方向に全部足し合わせる」という考え方です。積分記号は、この「ものすごく細かく分けて、全部足し合わせる」という操作を表しています。
コンピューターではどうする?
ここで問題があります。実際のコンピューターで扱う音声は、完全な連続データではありません。例えばCD音質の音声なら、1秒間に44,100回の割合で音の大きさを記録しています。つまり、0.000秒、0.0000227秒、0.0000454秒……というように、非常に細かい間隔で数値を並べているわけです。このようなデジタルデータに対して使うのが「離散フーリエ変換(DFT)」です。DFTは、ざっくり言えば「連続した波を、たくさんの点に区切った状態でフーリエ変換する」方法です。式で書けばXk=Σn=0N−1xne^−i2πkn/Nとなります。ここでは積分ではなくΣ(シグマ)になっていますが、これは「記録されたデータを一つずつ足し合わせていく」と考えると分かりやすいでしょう。
DFTはものすごく計算量が多い
ところが、この方法には問題があります。データが増えると、計算量が急激に増えてしまうのです。例えば1秒の音声を44,100 Hzで記録したとすると、データは44,100個あります。DFTをそのまま計算すると、計算量はおおよそ44,100²≒19.4億回です。10秒なら441,000個のデータになるので、441,000²≒1,945億回になります。もちろん実際のコンピューターで行う処理はこれほど単純ではありませんが、データ数Nに対して計算量がおおむねN²に比例する、というのがDFTの大きな特徴です。しかも音声解析では、音声全体を一回だけ変換するのではなく、短い区間に分けて何度も周波数分析することがあります。これが「短時間フーリエ変換(STFT)」です。さすがに毎回、全部の組み合わせを正直に計算していたら大変です。そこで登場するのが「FFT」です。
FFTは何をしているのか?
FFTは「高速フーリエ変換(Fast Fourier Transform)」の略です。ここで少し注意が必要なのですが、FFTはDFTとは別の「変換方式」ではありません。DFTを計算するための、効率のよいアルゴリズムです。DFTでは大量の計算を一つずつ行っていますが、FFTでは計算の中にある規則性や対称性を利用して、「同じような計算を何度も繰り返さなくて済むようにする」ことで計算量を大きく減らします。代表的な方法では、問題を小さく分割しながら計算していきます。イメージとしては、「まず小さな問題に分ける」→「それぞれを計算する」→「結果を組み合わせる」という流れです。その結果、DFTの計算量がおおよそN²なのに対し、FFTではN log₂N程度まで減らすことができます。特にデータ数が2のべき乗の場合、この分割が行いやすくなります。例えば1,024個のデータなら、DFTでは約1,024²回の計算が必要なのに対し、FFTならおおよそ1,024×10回で済みます。この差はデータ数が増えるほど大きくなり、音声処理や画像処理、振動解析など、大量のデータを周波数分析する場面でFFTが非常によく使われています。
逆フーリエ変換
ここまでの話を逆にすると、今度は「逆フーリエ変換」になります。フーリエ変換では「この複雑な波には、どの周波数がどれくらい含まれているのか?」を調べました。逆フーリエ変換では、「それぞれの周波数成分を使って、元の波を作り直す」ことをします。式はxn=(1/N)Σk=0N−1Xke^i2πkn/Nです。イメージとしては、フーリエ変換が「この音の中には何Hzがどれくらい入っている?」なのに対して、逆フーリエ変換は「では、その周波数成分を全部足して元の音を作ろう」という関係です。最初に登場した足立レイの音声も、「複数の単純な波を組み合わせて、複雑な音を作る」という意味では、まさにこの考え方をイメージするのに向いています。
実際の測定装置では何に使われている?
ここまでが数学の話でした。しかし、私が大学時代に本当に知りたかったのは「で、これが測定装置で何の役に立つの?」という部分です。実際、フーリエ変換はさまざまな測定装置で使われています。
FTIR(フーリエ変換赤外分光計)
材料系でよく登場するのがFTIRです。FTIRは、赤外線を試料に当てて、「どの波長の赤外線がどれくらい吸収されたのか」を調べる装置です。FTIRでは、赤外線を試料に照射し、干渉計によって得られた複雑な信号を測定したあと、フーリエ変換することで波長ごとのスペクトルを得ます。ざっくり言えば、「赤外線を当てる」→「試料を通った後の複雑な信号を測る」→「フーリエ変換する」→「どの波長が吸収されたかを見る」という流れです。その結果から、材料にどのような化学結合や官能基が存在するのかを推測できます。つまりFTIRは、「この材料にはどんな化学結合がありそう?」を調べるための装置、と考えると分かりやすいでしょう。
NMR(核磁気共鳴装置)
NMRでもフーリエ変換が重要な役割を果たします。NMRでは、試料に高周波の電磁波を与えた後、原子核から返ってくる信号を時間の変化として記録します。最初に得られるのは「ピークが何Hzにある」というスペクトルではなく、「時間が経つにつれて信号がどう変化していくか」というデータです。これをFID(自由誘導減衰)と呼びます。そして、この時間変化する信号をフーリエ変換すると、「どの周波数に、どれくらいの信号があるのか」というNMRスペクトルになります。つまりNMRは、「時間方向のデータ」→「フーリエ変換」→「周波数方向のデータ」という流れの、かなり分かりやすい例です。
振動測定・FFTアナライザ
材料や機械の振動を調べる場合も、FFTは非常に分かりやすい存在です。例えば、加速度センサーを機械に取り付けると、「時間とともに、どのくらい振動しているか」を測定できます。しかし、実際の振動は単純な1本の波ではなく、「10 Hzの振動」「50 Hzの振動」「100 Hzの振動」など、さまざまな振動が重なっているかもしれません。そこでFFTを使うと、その複雑な振動を周波数ごとに分解できます。すると、「この機械は50 Hz付近で特に強く振動している」「この周波数だけ異常に大きい」といったことが分かります。例えば共振の原因を調べたり、回転機械の異常を見つけたりするのに役立ちます。ここでは、「複雑な振動=いろいろな周波数の振動が重なったもの」と考えると、フーリエ変換の意味がかなり直感的になります。
「絵も波で表せる?」という疑問
ここまで勉強して、最初に抱いていた「絵も波で表せるの?」という疑問についても少し見えてきました。実は、フーリエ変換は音だけのためのものではありません。画像にも「明るさや色の変化」という形で周期的なパターンを見つけることができ、2次元フーリエ変換を使えば、画像をさまざまな空間周波数の成分に分解できます。例えば、細かい縞模様が多い画像なら「高い空間周波数」の成分が多く、なだらかな明るさの変化が中心なら「低い空間周波数」の成分が多くなります。つまり、音なら「時間方向の変化」、画像なら「空間方向の変化」を波として捉えて分析できるわけです。ここまで来ると、「なぜフーリエ変換が音声だけでなく、画像・振動・光・NMRなど、いろいろな分野に登場するのか」も少し分かってきます。
まとめ
最初は「謎の数学」としか思えなかったフーリエ変換ですが、考え方だけを見ると意外とシンプルです。世の中の信号はとても複雑に見えますが、それを「いろいろな周波数の単純な波が重なっている」と考えることができます。すると、「この中には何Hzの波がどれくらい含まれているのか?」を調べたくなります。そのために、調べたい周波数の波との「似ている度合い」を計算し、それをすべての周波数について行います。それがフーリエ変換です。そして逆に、その周波数成分を全部足し合わせれば、元の複雑な波を再現できます。コンピューターでは、この計算をDFTとして扱い、FFTという効率的なアルゴリズムを使うことで高速に処理しています。
こう考えてみると、「フーリエ変換=難しい数式」ではなく、「複雑なものを、どんな単純な波の組み合わせなのか調べる方法」と捉えることができます。大学時代に「何のためにこんな計算をするんだ」と思っていた自分に説明するなら、まずはこれくらいの理解で十分だったのかもしれません。
