フーリエ級数アニメーションの紹介
(andreinc.net)- 円と単位円の 回転不変性 から出発し、サイン・コサイン、複素数、Eulerの公式、正弦波、エピサイクルが Fourier Series へとつながる流れを視覚的に結び付けている
- 単位円の回転は、$\sin$ を y座標、$\cos$ を x座標として解釈させ、2つの関数は周期 $2\pi$ と $\frac{\pi}{2}$ の 位相差 を持つ
- 複素平面では $e^{ix}=\cos(x)+i\sin(x)$ が単位円上の回転となり、複素正弦波 はコサインとサインを1つの回転オブジェクトとしてまとめる
- 複数の正弦波を足し合わせると強め合いと打ち消し合いが生じ、奇数周波数 と減衰する振幅を組み合わせることで、矩形波のような不連続な形も次第に近似できる
- エピサイクルは各正弦波を回転する円とベクトル加算に置き換えて示し、半径は振幅 $A$、回転速度は角周波数 $\omega$、初期角は位相 $\varphi$ に対応する
円、$\pi$、ラジアンから始まる回転
- 円は中心 $P(a,b)$ と半径 $r$ で定義され、代数的には $(x-a)^2+(y-b)^2=r^2$ と表される
- 中心を原点、半径を1にすると 単位円 となり、方程式は $x^2+y^2=1$ に簡略化される
- 円周上の点とその反対側の反射点は、回転しても関係が保たれ、この 回転不変性 がフーリエ数学の中核的な直観として使われる
- $\pi$ は円周と直径の比であり、すべての円で一定の値 $\pi \approx 3.14159...$ を持つ
- 円周は $P=2\pi r$
- 面積は $A=\pi r^2$
- $\pi$ は有理数ではなく、有理数係数を持つ0でない多項式の根でもない 超越数 である
- ラジアンは数学と物理で角度を測る標準単位であり、度をラジアンに変換するには角度に $\pi$ を掛けて180で割る
- フーリエ数学でラジアンを使うと、三角関数を単なる角度ではなく 実数の関数 として扱えるため、波動や振動の微積分がすっきりする
サインとコサインの単位円による解釈
- $\sin$ と $\cos$ は、単位円上を回る点の座標を追跡するものとみなせる
- $\theta$ は半径と正のx軸のなす角
- $\sin$ は点の 鉛直変位、つまり y座標
- $\cos$ は点の 水平変位、つまり x座標
- 点が出発位置に戻るため、$\sin$ と $\cos$ は周期 $2\pi$ を持つ 周期関数 である
- $\cos$ は $\sin$ と同じ波形だが、$\frac{\pi}{2}$、すなわち $90^\circ$ だけ移動している
- $\sin(x+\frac{\pi}{2})=\cos(x)$
- 技術的には、$\cos$ は $\sin$ より $\frac{\pi}{2}$ だけ先行している
- この位相差によって、2つの関数は quadrature の関係にある
- フーリエ解析ではサイン成分とコサイン成分を併用することで、開始位置、つまり位相に依存せず任意の周期信号を表現できる
- 関数の対称性である parity の観点では、$\cos$ は偶関数、$\sin$ は奇関数である
- $\cos(x)=\cos(-x)$
- $\sin(-x)=-\sin(x)$
複素数、$i$、Eulerの公式
- 複素平面では、単位円上のすべての点は絶対値が1の複素数に対応する
- 実数角 $\theta$ に対して、$z=\cos(\theta)+i\sin(\theta)$ は単位円上の点であり、正の実軸から $\theta$ だけ回転した状態を表す
- 複素数に $i$ を掛けると、複素平面で反時計回りに $\frac{\pi}{2}$、すなわち90度回転する
- 絶対値 $r=|a+bi|=\sqrt{a^2+b^2}$ は保たれる
- 偏角だけが $\frac{\pi}{2}$ だけ増加する
- 同じ複素数に $i$ を繰り返し掛けると、順に各象限を巡り、4回後には元の位置に戻る
- 自然定数 $e \approx 2.71828$ は無理数かつ超越数であり、級数と極限で定義できる
- $e=\sum_{n=0}^{\infty}\frac{1}{n!}$
- $e=\lim_{x\to\infty}(1+\frac{1}{x})^x$
- $e=\lim_{x\to0}(1+x)^{1/x}$
- 自然指数関数は、微分しても同じ関数が定数倍で再び現れる 微分の固有関数 である
- $\frac{d}{dx}e^{ax}=ae^{ax}$
- $f(x)=e^{ix}$ は微分するたびに $i$ が掛かり、4回微分すると再び元の関数になる
- $\frac{d}{dx}f(x)=ie^{ix}$
- $\frac{d^2}{dx^2}f(x)=-e^{ix}$
- $\frac{d^3}{dx^3}f(x)=-ie^{ix}$
- $\frac{d^4}{dx^4}f(x)=e^{ix}$
- このパターンは、複素数に $i$ を繰り返し掛けて回転させることと同じであり、$e^{ix}$ が複素平面で円を描くという直観につながる
- Eulerの公式 は $e^{ix}=\cos(x)+i\sin(x)$ であり、$x=\pi$ を代入すると $e^{i\pi}+1=0$ となる
- Eulerの公式を使うと、サインとコサインを指数形式で書ける
- $\cos(x)=\frac{e^{ix}+e^{-ix}}{2}$
- $\sin(x)=\frac{e^{ix}-e^{-ix}}{2i}$
- 同じパラメータ $x$、$t$、$\theta$ は文脈に応じて角度または時間として解釈でき、数学的な形は同一である
正弦波と複素正弦波
- 正弦波は滑らかで繰り返す振動であり、時間 $t$ の関数として $y(t)=A\sin(2\pi ft+\varphi)=A\sin(\omega t+\varphi)$ のように表される
- 各項は波形の形と動きを決定する
- $A$ は 振幅 であり、中心値0からの最大偏差を意味する
- $f$ は1秒あたりの完全な振動回数を表す通常の周波数で、Hzで測定される
- $\omega=2\pi f$ は角周波数であり、1秒あたりのサイクル数ではなく1秒あたりのラジアンで測定される
- $\varphi$ は位相オフセットまたは位相シフトであり、正弦波をx軸方向に左右へ移動させる
- $\sin$ と $\cos$ は正弦波の特別な場合であり、コサイン波はサイン波を左に $\frac{\pi}{2}$ ラジアン移動したものと同じである
- $A$、$\omega$、$\varphi$ を調整すれば、ベースギターの音から家庭用交流電流までさまざまな振動を表現できる
- Eulerの公式で静的な角度 $\theta$ を時間に応じて変化する $\omega t+\varphi$ に置き換えると 複素正弦波 になる
- $s(t)=Ae^{i(\omega t+\varphi)}$
- $s(t)=A\cos(\omega t+\varphi)+iA\sin(\omega t+\varphi)$
- 複素正弦波は2つの波を1つの数学的オブジェクトにまとめる
- 実部はコサイン波のように振る舞う
- 虚部はサイン波のように振る舞う
- 2つの成分は同じ回転角 $\theta=\omega t+\varphi$ に依存するため同期している
- 複素正弦波を Y-Z 平面に投影するとサイン波が現れ、X-Z 平面に投影するとコサイン波が現れる
- 1つの回転オブジェクトが、互いに直交する平面に落とす影として、なじみ深い実数値の正弦波を生み出す
正弦波の和と干渉
- 複数の正弦波を足し合わせると、各地点での関数値が合成され、山と谷のそろい方によって互いに増幅したり打ち消し合ったりする
- 2つの正弦波の山と谷がかみ合うと互いを差し引き、和が0に近づくことがある
- この現象は 波の干渉 として理解できる
- 例として、2つの正弦波 $y_1(x)=\frac{9}{10}\sin(7x+\frac{\pi}{2})$ と $y_2(x)=\frac{12}{10}\sin(3x-2)$ を足し合わせると、$y(x)=y_1(x)+y_2(x)$ は複雑なパターンを作る
- 異なる周波数と位相オフセットを持つ波形は、同期と非同期を繰り返し行き来し、より多くの正弦波が加わるほどパターンはさらに複雑になる
矩形波を正弦波で作る
- 特定の正弦波を慎重に選べば、予測可能な幾何学パターンを作り出せる
- 矩形波は次の無限和で構成される
- $y(x)=\frac{4}{\pi}\sin(\omega x)+\frac{4}{3\pi}\sin(3\omega x)+...+\frac{4}{(2k-1)\pi}\sin((2k-1)\omega x)+...$
- この表現は 奇数周波数 だけを加え、各項の振幅が徐々に小さくなる構造を持つ
- 滑らかな連続曲線を足し合わせると、山と谷の干渉によって平らな上部を持つ矩形波が作られる
- 和に含まれる正弦波が多いほど、近似はより鋭くなる
- 単一の正弦波は円周を回る点に対応するため、正弦波を足し合わせる過程は回転する円をつないだ エピサイクル とみなせる
- エピサイクルでは、2番目の円の中心は1番目の円の縁にあり、3番目の円の中心は2番目の円の縁に置かれる、というようにつながる
- 各エピサイクルは特定の正弦波に対応し、それらを結合することは順次的な ベクトル加算 として解釈できる
- 例となる3つの正弦波は次のように合成される
- $y_1(x)=1.4\sin(x+1)$
- $y_2(x)=0.8\sin(2x)$
- $y_3(x)=0.5\sin(3x)$
- $y(x)=1.4\sin(x+1)+0.8\sin(2x)+0.5\sin(3x)$
- 任意の時点で、全体の位置ベクトルは $\vec{u}=\vec{u_1}+\vec{u_2}+\vec{u_3}$ と表される
- 適切な正弦波を選べば、動く円によって花のような望みの形を近似でき、個々の正弦波を見つけるには Fourier Analysis が必要になる
Fourier Series の基本形
- Fourier Series は、周期 $P$ を持つ周期関数を複数の振動する三角関数の無限和へ展開する数学的な過程である
- Pink Floyd の Dark Side of The Moon のアルバムカバーの比喩では、周期関数 $f(x)$ が光であり、プリズムが Fourier Mathematics、分離された色が単純な正弦波成分に対応する
- 基本式は次のとおり
- $f(x)=A_0+\sum_{n=1}^{\infty}[A_n\cos(\frac{2\pi nx}{P})+B_n\sin(\frac{2\pi nx}{P})]$
- $A_0$、$A_n$、$B_n$ は Fourier coefficients であり、元の波形を再構成するのに特定の周波数がどれだけ必要かを示す
- 係数は積分で計算される
- $A_0=\frac{1}{P}\int_{-\frac{P}{2}}^{+\frac{P}{2}}f(x)dx$
- $A_n=\frac{2}{P}\int_{-\frac{P}{2}}^{+\frac{P}{2}}f(x)\cos(\frac{2\pi nx}{P})dx$
- $B_n=\frac{2}{P}\int_{-\frac{P}{2}}^{+\frac{P}{2}}f(x)\sin(\frac{2\pi nx}{P})dx$
- サインとコサインは視覚的には直感的だが、代数操作では煩雑になりやすいため、Eulerの公式を使って指数形式に変換できる
- 指数形式の Fourier Series は次のとおり
- $f(x)=\sum_{n=-N}^{N}C_ne^{i2\pi\frac{n}{P}x}$
- 指数形式ではインデックス $n$ が負の値にまで拡張され、これは複素ベクトルの回転方向を表す 負の周波数 という概念を導入する
- 統合された係数式は次のとおり
- $C_n=\frac{1}{P}\int_{-\frac{P}{2}}^{\frac{P}{2}}e^{-i2\pi\frac{n}{P}x}f(x)dx$
ボックス関数と矩形波の係数計算
- 先ほど用いた矩形波の近似は次のとおり
- $y(x)=\frac{4}{\pi}\sum_{k=1}^{\infty}\frac{\sin(2\pi(2k-1)fx)}{2k-1}$
- $\omega=2\pi f$ を使うと $y(x)=\frac{4}{\pi}\sum_{k=1}^{\infty}\frac{\sin((2k-1)\omega x)}{2k-1}$
- 矩形波関数は区間 $[0,2L]$ において Heaviside Step Function $H(x)$ を使って $f(x)=2[H(\frac{x}{L})-H(\frac{x}{L}-1)]-1$ と書ける
- $A_0$ は区間 $[0,2L]$ における関数の平均であり、正の面積と負の面積が打ち消し合って0になる
- $A_n$ は $\cos$ 項を支配する係数であり、$f(x)$ が奇関数、$\cos$ が偶関数なので、その積は奇関数になる
- 1周期全体で積分すると面積が相殺される
- すべての $A_n$ 係数は0になる
- $B_n$ は $\sin$ 項を支配する係数である
- 偶数の $n$ では赤い面積と緑の面積が相殺され、積分値は0になる
- 奇数項では面積が加算される
- 計算結果は $B_n=\frac{2}{n\pi}(1-(-1)^n)$ となる
- 残るのは奇数の $B_n$ 項だけなので、矩形波は次の形になる
- $f(x)=\frac{4}{\pi}\sum_{n=1,3,5...}^{+\infty}(\frac{1}{n}\sin(\frac{\pi nx}{L}))$
- $n\rightarrow2k-1$ と置き換えると $f(x)=\frac{4}{\pi}\sum_{k=1}^{+\infty}\frac{\sin(\frac{\pi(2k-1)x}{L})}{2k-1}$
- $L\rightarrow\frac{1}{2f}$、$2\pi f\rightarrow\omega$ を代入すると $f(x)=\frac{4}{\pi}\sum_{k=1}^{\infty}\frac{\sin((2k-1)\omega x)}{2k-1}$
- 実際には無限に足し合わせることはできないため、有限の $n$ で止めた部分和 $s(x)$ を使う
- $s(x)=\frac{4}{\pi}\sum_{k=1}^{n}\frac{\sin((2k-1)\omega x)}{2k-1}\approx f(x)$
- $n$ を増やすと近似の精度が向上し、近似に残る差も徐々に小さくなる
- 最初の5項は、振幅がすばやく減少し周波数が増加する単純な正弦波で構成される
三角波とのこぎり波の例
- 三角波の Fourier Series 近似は次のとおり
- $s(x)=\frac{8}{\pi^2}\sum_{k=1}^{N}\frac{(-1)^{k-1}}{(2k-1)^2}\sin((2k-1)x)$
- 三角波は滑らかで速く収束し、$n$ が6に近づくころには三角形の形がはっきりしてくる
- 三角波展開では、$s_2(x)$、$s_4(x)$、$s_6(x)$ のような偶数番目の項は負になる
- 負の振幅は物理的には直感的でないため、2つの方法で書き換えられる
- $\sin(-x)=-\sin(x)$ を使って周波数を負にできる
- 振幅を正のままにして位相に $\pi$ を加えることもできる
- 実際には後者のほうが実用的で、幾何学的な制御もしやすい
- $-\frac{8}{3^2\pi^2}\sin(3x)$ は $\frac{8}{3^2\pi^2}\sin(3x+\pi)$ と書ける
- 逆向きののこぎり波関数は次の形を持つ
- $s(x)=\frac{2}{\pi}\sum_{k=1}^{N}(-1)^k\frac{\sin(kx)}{k}$
Fourier Series をエピサイクルとして見る装置
- 静的な方程式ではなく物理的な運動として見ると、Fourier の各項は棒の上で端と端がつながった複数の回転円のように振る舞う
- 視覚装置では、望みの信号形として sawtooth wave、triangle wave、square wave を選べる
- 各視覚要素は Fourier 式の変数に直接対応する
- 各円の半径は振幅 $A$
- 各円の回転速度は角周波数 $\omega$
- $t=0$ における円内の棒の初期角度は位相オフセット $\varphi$
- 複雑で尖り、鋭い波形であっても、滑らかに回転する円の組み合わせへと逆分解できる
- アニメーションは、円、正弦波、複素数、エピサイクル、Fourier Series のあいだのつながりを段階的に示す役割を果たす
1件のコメント
Hacker Newsのコメント
離散Fourier変換はベクトルに掛ける 直交行列にすぎず、逆FFT、Plancherelの定理、Parsevalの定理も、その行列が正規直交だということから自然に従う
線形代数をすでに理解していないと通じない方法かもしれないが、離散的な見方が身についた後は、連続Fourier変換へ移るのも簡単だった
個人的には、円やアニメーションを見るより、式を直接見るほうがはるかに簡単だった
[1] https://www.youtube.com/watch?v=spUNpyF58BY
[2] https://betterexplained.com/articles/an-interactive-guide-to...
[3] https://en.wikipedia.org/wiki/Discrete_Fourier_transform
残りはほとんどそこから従う。Fourier変換は、ある表記では f(x) に e^{-ikx} を掛けて積分するが、積分は巨大な内積であり、e^{-ikx} は基底ベクトル e^{ikx} の「転置」のようなものなので、結局 f_i をその基底成分で表していることになる
線形代数を理解している人の大半は、高等数学を学んだやり方どおり、つまり教科書や大学の講義でFourier変換を学ぶのではないかと思う。そういう文脈では「ベクトルに掛ける直交行列」のような説明が基本的な出発点だが、直感が不足しているように見えることがあり、YouTube動画はその隙間を埋めようとするものだ
たとえば3b1bの動画は、複素数がなぜ有用なのかもゆっくり説明し直しているが、それはそもそも対象読者が違うということだ
だから数学のテーマでは今でも、証明を自分でやってみて、自力で導けるかを確認している
美しい可視化を見るだけで概念が魔法のように頭に入ればいいのだが、私には一種の 知的ドーパミンのように感じられる
信号とシステム分野における「自己関手の圏のモノイド」みたいなものだ
/が1つ抜けているようで、実際のリンクは次のとおりhttps://www.andreinc.net/2024/04/24/assets/js/2024-04-24-fro...
アニメーションには Processing を使っているようだ
https://github.com/nomemory/andreinc-site/tree/main/assets/j...
記事を書きながら p5.js を学んでいるところだったので、かなり非効率なやり方で始めてしまい、特に自慢できるものではない
時間ができたら記事を修正して正しいリンクを入れる予定
非定型うつ病から回復するために、基本的な線形代数全体をProcessingで可視化しようという計画もあったが、しばらくコンピューターでプログラミングができなかった
他の説明では、複素数を最後のほうで無理やり押し込むこともある
このテーマに興味があるなら、私が作った 分数Fourier変換 の可視化 [1] と 複素平面 の可視化 [2] も見る価値がある
[1]: https://static.laszlokorte.de/frft-cube/
[2]: https://static.laszlokorte.de/complex-plane/
解説資料を作るのが好きな人なら、Laplace変換 も扱ってくれるとうれしい [1]
以前は電子回路の解析に使う方法を知っていたが、今ではほとんど忘れてしまったので、怠け者のお願いをしているようなものだ
1: https://en.wikipedia.org/wiki/Laplace_transform
ところがこの記事はそのページをはるかに上回っている。今後人に共有しやすそうだ
Introduction to Graduate Algorithmsの講義を追いながら、講義内容をすべてPythonで実装してみて、ようやく FFT が理解できた本当に良い講義だ:
https://edstem.org/us/courses/47529/lessons/80063/slides/440...
Edは初めて聞いたし興味はあるが、「see how it works」セクションも実際にどう動くのかを教えてくれない。最近の流れどおり、まず登録しないといけないようで残念だ
Fourier級数とFourier変換を扱う動画や本を集めた有用なサイトもある:
https://howthefouriertransformworks.com/