JA EN
体系数値計算
·★ 会員·論文·12分で読めます

FFTを1から理解する — なぜ畳み込みが掛け算になるのか

音を周波数に分解するフーリエ変換を、比喩→回転する針の直感→DFTの式→分割統治のFFTの順に前提知識ゼロから解説。畳み込みがなぜ周波数領域では掛け算1回になるのか、多項式の積の視点で腹落ちさせる。

対象textタスクnumerical

An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey

一次資料 — この記事の根拠

この解説の公開 2026-08-13

An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey"doi:10.1090/S0025-5718-1965-0178586-1
https://www.ams.org/journals/mcom/1965-19-090/S0025-5718-1965-0178586-1/"1965)

和音を聞き分ける耳

ピアノで「ド・ミ・ソ」を同時に鳴らしたとき、空気を伝わる振動はたった1本の波です。マイクが記録するのも「各瞬間の空気圧」がずらっと並んだ1本の数値列で、そこに3つの音が溶けて混ざっています。ところが私たちの耳は、その1本の波から3つの音を聞き分けられます。

耳がやっているこの「混ざった波を、高さごとの成分にほどく」操作を数学にしたものがフーリエ変換です。そして FFT(Fast Fourier Transform/高速フーリエ変換) は、その計算を桁違いに速くするアルゴリズムです。1965年の Cooley と Tukey の論文で世界に広まり(原型は19世紀のガウスのノートにまで遡ります)、「20世紀で最も重要なアルゴリズム」の筆頭に挙げられることが多い、信号処理の心臓部です。

比喩: スムージーから材料を言い当てる

信号の見方には2つの「言葉」があります。

フーリエ変換は、スムージーを一口飲んでレシピを完全に言い当てる装置です。逆変換はレシピどおりに作り直す装置。行き来しても情報は一切失われません。同じものを2つの言葉で書いているだけです。

なぜわざわざ翻訳するのか。やりたい操作によって、楽な言葉が違うからです。「低い音だけ残して高い音を消したい」は、時間領域の波形をどういじればいいか見当もつきませんが、レシピ側なら「高音の行を消す」だけ。この記事の後半で見る畳み込みも、時間領域では大仕事なのに、周波数領域ではただの掛け算になります。

直感: 波を「回転する針」に巻きつける

では「ある高さの波がどれだけ入っているか」をどう測るのか。ここがフーリエ変換のいちばん美しいところです。

時計の針を思い浮かべてください。ただし速さは自由に選べます。周波数 ff の成分を調べたいときは、信号を1秒あたり ff 回転の針に巻きつけて、円板の上にグラフを描きます。信号の値が大きい瞬間は針の先に重いおもりを、小さい瞬間は軽いおもりを置いていくイメージです。

この重心のずれの大きさが「その周波数の含有量」、ずれの方向が「波のタイミングのずれ(位相)」です。回転を1つの数で表すために複素数 eiθe^{i\theta}=cosθ+isinθ= \cos\theta + i\sin\theta、半径1の円周上を角度 θ\theta だけ進んだ点)を使います。複素数が出てくるのは難しくするためではなく、「回転」を掛け算1回で書ける便利な記法だからです。

仕組み: 離散フーリエ変換(DFT)

コンピュータが扱うのは連続の波ではなく、一定間隔で測った NN 個のサンプル x0,x1,,xN1x_0, x_1, \dots, x_{N-1} です。これをほどくのが離散フーリエ変換(DFT)で、定義は次の1本です。

Xk=n=0N1xne2πikn/NX_k = \sum_{n=0}^{N-1} x_n \, e^{-2\pi i \, kn/N}
(1)

言い換えると「NN 個のサンプルの間にちょうど kk 回転する針に信号を巻きつけ、重心を求めよ(の NN 倍)」です。xnx_n は時刻 nn の信号の値、e2πikn/Ne^{-2\pi i\,kn/N} は時刻 nn における針の向き、\sum はおもりを全部載せて重心を出す操作にあたります。kk00 から N1N-1 まで変えれば、遅い波から速い波まで全成分が出そろいます。

出てくる XkX_k は複素数で、絶対値がその周波数の強さ、角度が位相です。音声解析アプリが出すスペクトル表示は、この Xk|X_k| を並べたものです。

素朴に計算すると N² 回

式(1)をそのまま計算すると、1つの XkX_k に掛け算と足し算が NN 回、それが kk の数だけあるので全体で約 N2N^2 回の演算になります。CD品質の音声はわずか1秒で44100サンプル。44100244100^2 はおよそ19億回です。1秒の音を分析するのに19億回では、リアルタイム処理も、毎秒何十枚も届く画像への適用も話になりません。

N2N^2NlogNN \log N がどれほど違うかは、口で言うより動かすのが早いです。

FIG 1nを増やしたときの O(n²) と O(n log n) の開き。対数表示に切り替えると、FFTがもたらした差が「速い遅い」ではなく「できる・できない」の差だと分かる

ここからが本題です。この N2N^2NlogNN \log N に潰すからくりと、「畳み込みが掛け算になる」というこの記事の副題の種明かしに入ります。

Cooley–Tukey の発想は分割統治です。サンプル列を偶数番目()と奇数番目()に分けます。式(1)の和を2つに割って指数法則で整理すると、驚くほどきれいな形になります。偶数番だけの列のDFT(サイズ )を 、奇数番だけの列のDFTを と書くと、

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. An Algorithm for the Machine Calculation of Complex Fourier Series (Cooley & Tukey. "doi:10.1090/S0025-5718-1965-0178586-1
  2. https://www.ams.org/journals/mcom/1965-19-090/S0025-5718-1965-0178586-1/". 1965)

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です