高速フーリエ変換(FFT) (G検定)

高速フーリエ変換(FFT)

1. 定義と概要

高速フーリエ変換(FFT)とは、離散フーリエ変換(DFT)を高速に計算するためのアルゴリズムの総称です。離散フーリエ変換(DFT)とは、時間の経過に沿った信号を、含まれる周波数成分(信号にどのくらいの高さの波がどれだけ含まれているかを表す要素)の集まりとして表し直す変換です。

DFTを標本数(デジタル化した信号を一定間隔で区切って取り出したデータの個数)Nに対してそのまま計算すると、乗算の回数がNの2乗に比例する規模で増えていきます。これに対してFFTは、入力データを再帰的に小さなグループへ分割し、重複する計算を再利用することで、計算量(アルゴリズムが答えを出すまでに必要な計算の回数の目安)をNと対数の積に比例する規模まで抑える仕組みです。

この差は数字で見ると鮮明です。目安として標本数が1024の場合、DFTの直接計算では約100万回の乗算が必要になるのに対し、FFTでは約1万回程度まで減らせます。

従来、DFTを標本数の多いデータへそのまま適用すると、乗算回数が標本数の2乗に比例して増え、計算コストが急激に膨らむことが課題でした。1965年にクーリーとテューキーが発表したアルゴリズム(クーリー・テューキー法)を代表として、入力データを偶数番目と奇数番目のように再帰的に分割し、小さな計算へ落とし込んでいく分割統治の考え方によってこの課題は解消されました。

この高速化により、音声や画像のような大量のデータを扱う周波数解析をリアルタイムに実行することが現実的になりました。

2. 試験対策ポイント

まず重要になるのは、DFTの計算量削減です。DFTを標本数Nに対して直接計算すると、乗算回数がNの2乗に比例する規模で必要になるのに対し、FFTは入力を再帰的に分割し重複する計算を再利用することで、Nと対数の積に比例する規模まで計算量を抑えます。標本数が1024の場合、DFTでは約100万回、FFTでは約1万回程度の演算で済む具体例とあわせて押さえておきたいところです。

加えて、FFTはDFTの近似計算ではなく、同じ計算結果を高速に求めるアルゴリズムです。「FFTはDFTを速く解く手段」という理解が土台になります。

この計算量の削減によって、音声や画像といった大量データの周波数解析をリアルタイムに実行できるようになりました。FFTが登場する以前は、DFTの計算コストの大きさがリアルタイム処理の障壁でした。

音声処理の前処理としての利用も重要なテーマです。音声波形を短い時間フレームに区切り、窓関数(区切った信号の両端をなめらかにゼロへ近づける関数)をかけたうえでFFTを適用する手法を短時間フーリエ変換(STFT)といいます。STFTは時間の経過に伴う周波数の変化をスペクトログラム(時間の経過に伴う周波数成分の強さを色や濃淡で表した図)としてとらえます。

そこから、モデルの学習や推論(学習済みモデルを使って答えを出す処理)に使う特徴量(データの特徴を数値として表したもの)を取り出す処理につながり、代表例としてMFCC(メル周波数ケプストラム係数。人間の聴覚特性を考慮して音声の特徴を数値化した、音声認識でよく使われる特徴量)が挙げられます。

FFT・STFT・窓関数・MFCCは、ひとつながりの関連用語としてセットで扱われます。音声処理の前処理で各用語が担う役割を並べると、次のように整理できます。

用語 音声処理の前処理での役割
窓関数 区切った信号の両端をなめらかにゼロへ近づける
FFT 区間のデータを周波数成分に分解する
STFT 区間ごとにFFTを繰り返し、周波数の変化をスペクトログラムとしてとらえる
MFCC 人間の聴覚特性を考慮して音声の特徴を数値化した特徴量

窓関数からMFCCまでのこの並び順が、そのまま音声認識の前処理の流れになります。用語を単独で覚えるよりも、この順序ごと押さえておくと関連づけが利きます。

3. 関連概念との比較・相違点

離散フーリエ変換(DFT)との最大の違いは、計算結果ではなく計算の速さ、つまりアルゴリズムとしての効率にあります。DFTは定義どおりの総当たり計算で、乗算回数がNの2乗に比例する規模まで必要になるのに対し、FFTは入力を再帰的に分割する分割統治の考え方によって、同じ結果をNと対数の積に比例する規模まで高速に求めます。

両者は変換そのものの定義が異なるわけではなく、速く解くか総当たりで解くか、その計算手段が異なるだけです。DFTとFFTを対立する2つの変換のようにとらえると、正誤問題で取り違えやすい点です。

短時間フーリエ変換(STFT)との関係は、FFTを内部に含む応用的な枠組みにあります。FFTは1区間のデータをまとめて周波数成分に分解する変換アルゴリズムであるのに対し、STFTは信号を窓関数で短く区切りながら区間ごとにFFTを繰り返し適用し、時間の経過に伴う周波数の変化をとらえる手法です。STFTはFFTの代替ではなく、FFTを繰り返し使う応用手法にあたります。

3つの位置づけを軸ごとに並べると、違いがはっきりします。

軸 DFT FFT STFT
位置づけ 変換そのものの定義 DFTを高速に解くアルゴリズム FFTを繰り返し使う応用手法
計算の進め方 定義どおりの総当たり計算 入力を再帰的に分割する分割統治 窓関数で区切り、区間ごとにFFT
得られる情報 信号に含まれる周波数成分 DFTと同じ結果 時間の経過に伴う周波数の変化

DFTとFFTは結果が同じで手段だけが異なる関係、STFTはFFTを部品として繰り返し使う関係、と押さえておくと混同を避けられます。

4. ビジネス・実務での活用シナリオ

音声認識・音声アシスタントの分野では、マイクで取得した音声波形を短時間フーリエ変換によって時間と周波数の両方を表す形式に変換し、MFCCなどの特徴量抽出を経て音声認識モデルへ入力します。FFTによる計算量の削減がなければ発話に対するリアルタイムの応答は難しく、この高速化が音声アシスタントの実用化を支えています。

音楽・オーディオ機器の分野では、楽曲データやマイク入力をFFTで周波数成分に分解し、イコライザーによる音質調整、ノイズキャンセリング、楽器音の解析などに利用します。周波数ごとの成分を素早く把握できることが、リアルタイムの音質補正を可能にしています。

無線通信の分野では、地上デジタル放送や無線LANなどで使われる変調方式OFDM(直交周波数分割多重。複数の周波数に分けてデータを同時に送る方式)が代表例です。その送受信では、FFTと逆FFT(周波数成分から元の波形へ戻す逆向きの変換)が、周波数領域(信号を周波数成分の集まりとして表した状態)と時間領域(信号を時間の経過に沿って表した状態)の行き来に使われます。高速な演算が、大容量データのリアルタイム伝送を支える基盤になっています。

5. 要点まとめ

  • FFTは離散フーリエ変換(DFT)を高速に計算するアルゴリズムで、計算量をNの2乗に比例する規模からNと対数の積に比例する規模まで削減します。
  • DFTとFFTは計算結果が同じで計算の速さが異なる関係にあり、FFTの登場によって音声・画像などのリアルタイム処理が現実的になりました。
  • 音声認識の前処理では、波形を短い時間フレームに区切ってFFTを適用する短時間フーリエ変換(STFT)が使われ、MFCCなどの特徴量抽出につながります。

6. 確認問題

問1高速フーリエ変換(FFT)は、離散フーリエ変換(DFT)と同じ計算結果を、より少ない計算量で求めるアルゴリズムである。

解答・解説をみる

○ 正しい

FFTはDFTの近似計算ではなく、入力を再帰的に分割し重複する計算を再利用することで、同じ計算結果をより高速に導くアルゴリズムです。計算結果ではなく計算手段が異なる点が理解の土台になります。

問2離散フーリエ変換を標本数Nに対して直接計算する場合の計算量はNの2乗に比例する規模であるのに対し、FFTを用いるとNと対数の積に比例する規模まで削減できる。

解答・解説をみる

○ 正しい

DFTの直接計算は標本数の2乗に比例した乗算が必要ですが、FFTは分割統治の考え方によって計算量をNと対数の積に比例する水準まで抑えます。標本数1024での約100万回と約1万回という具体例とあわせて覚えておく価値があります。

問3音声認識の前処理では、音声波形全体に対して一度だけFFTを適用すれば、時間の経過に伴う周波数の変化を捉えることができる。

解答・解説をみる

× 誤り

波形全体への一度きりのFFT適用では、時間方向でどのように周波数が変化したかは分かりません。正しくは、短い時間フレームに区切りながら区間ごとにFFTを適用する短時間フーリエ変換(STFT)を用います。