フーリエ円シミュレーター
描いた曲線をDFTで回転円に分解します
値を変えて近似精度の変化を観察
DFT の定義式
$$X[k] = \sum_{n=0}^{N-1}x[n]\, e^{-2\pi i k n / N}$$円 $k$: 半径 $|X[k]|$、角速度 $2\pi k/T$、初期位相 $\arg(X[k])$
マウスで描いた曲線を離散フーリエ変換(DFT)で分解し、回転する円で再現。円の数を変えて近似精度の変化をリアルタイムで体験しよう。
描いた曲線をDFTで回転円に分解します
値を変えて近似精度の変化を観察
円 $k$: 半径 $|X[k]|$、角速度 $2\pi k/T$、初期位相 $\arg(X[k])$
描かれたN点の曲線データ $x[n]$ を、異なる周波数成分 $X[k]$ に分解する離散フーリエ変換(DFT)の式です。これが全ての計算の出発点です。
$$X[k] = \sum_{n=0}^{N-1}x[n]\, e^{-2\pi i k n / N}$$$x[n]$: 描かれた曲線のn番目の点の座標(複素数)。
$X[k]$: 分解されて得られたk番目の周波数成分(複素数)。
$N$: 曲線の点の数(=最大の円の数)。
$e^{-2\pi i k n / N}$: 回転を表す複素指数関数。
得られた複素数 $X[k]$ を、物理的な回転円(エピサイクル)のパラメータに変換します。これがシミュレーター上で回る円ひとつひとつに対応します。
円 $k$: 半径 $r_k = |X[k]|$、角速度 $\omega_k = \frac{2\pi k}{T}$、初期位相 $\phi_k = \arg(X[k])$
$|X[k]|$: 複素数の絶対値。円の半径(振幅の大きさ)を決めます。
$\arg(X[k])$: 複素数の偏角。円の初期位置(位相)を決めます。
$T$: 曲線を描くのにかかる時間(周期)。
これらの円を、速度の速い順に連結していくことで、最終的な軌跡が描かれます。
音声・通信信号処理:音声データをフーリエ変換して周波数成分に分解し、不要な雑音(高周波成分など)を取り除いたり、特定の周波数帯域だけを増幅するイコライザーに応用されています。MP3などの音声圧縮もこの原理です。
画像圧縮(JPEG):画像をブロックに分け、各ブロックの色の変化を周波数成分(このシミュレーターの円に対応)に変換します。人間の目が感知しにくい高周波成分を大胆に省略することで、ファイルサイズを大幅に圧縮しています。
振動・異常診断:回転機械(モーター、ベアリング)から計測された振動データをフーリエ変換し、特定の周波数成分の大きさを監視します。異常が発生すると特徴的な周波数が現れるため、故障の早期発見に役立ちます。
デジタルフィルタ設計:必要な周波数帯域だけを通し、それ以外を遮断するフィルタを設計する際に、フーリエ変換が基礎理論として使われます。例えば、スマートフォンで相手の声だけをクリアに聞き分ける技術にも応用されています。
このシミュレーターを使い始めるときに、多くの人が同じような疑問や間違いにぶつかるよ。まず押さえておきたいポイントを3つ説明するね。
1. 「円の数Nを最大にすれば必ず完璧?」
確かに理論上は、元の点の数と同じだけ円を使えば完全に再現できる。でも、シミュレーター上で「点の数」自体が有限だから、そもそもマウスで描いた滑らかな曲線も離散的な点の集まりとして取り込まれている。だから、Nを最大にしても「離散点を通る」再現に過ぎないんだ。実務では、完全再現よりも「必要な精度を達成する最小のN」を見つけることが重要だよ。例えば、人の耳に聞こえない20kHz以上の高音をカットするMP3圧縮みたいにね。
2. 「円の回転速度は自由に選べる?」
スライダーで「速度」を変えているから誤解しがちだけど、各円の相対的な回転速度の比は固定だ。k番目の円の角速度は $\omega_k = \frac{2\pi k}{T}$ で決まっていて、基本速度の整数倍になる。ツールで変えているのは、この基本速度全体を一括で速くしたり遅くしたりする「再生速度」だと思ってくれ。実設計で周波数を変えるには、サンプリング点の数や間隔そのものを変える必要がある。
3. 「位相(初期向き)は飾り?」
半径や速度に比べて地味だけど、位相は形を決める超重要パラメータだ。例えば、半径が同じ2つの円でも、位相が90度ずれているかどうかで、ペン先の軌跡は全く異なる楕円軌道を描く。実務でフーリエ係数から信号を復元するとき、位相情報を間違えると波形がめちゃくちゃになってしまう。シミュレーターで「位相」の表示をONにして、各円のスタート位置がバラバラなことを確認してみよう。
この「回転円で形を作る」という一見特殊な考え方は、実は様々な工学分野の根底にある普遍的な原理なんだ。ここでは3つの具体的な技術とのつながりを紹介するよ。
1. 制御工学・ロボットアームの軌道計画
産業用ロボットアームの先端に、複雑な曲線を描かせたい時がある。この時、アームの各関節の動きを、フーリエ級数のように「複数の単純な回転運動の合成」として計画することができる。各円の動きが一つの関節の角速度プロファイルに対応すると考えればイメージしやすいね。これにより、急激な動き(高周波成分)を抑えて振動を減らすなど、滑らかで効率的な軌道を生成できるんだ。
2. 電気回路・交流の重ね合わせ
現実の交流回路では、綺麗な正弦波だけでなく、歪んだ波形(高調波)が混ざることが多い。例えば、スイッチング電源からは多くの高周波ノイズが出る。この複雑な電圧波形を、基本波(k=1の円)とその整数倍の高調波(k=2,3,...の円)に分解して分析するのが「フーリエ解析」だ。各周波数成分の大きさ(円の半径)と位相を調べることで、ノイズの原因を特定し、フィルタ回路を設計する材料になる。
3. コンピュータグラフィックス・ベジェ曲線との融合
CGで滑らかな曲線を描く「ベジェ曲線」や「B-スプライン」は多項式で表現されるが、実はフーリエ級数と深い関係がある。非常に複雑な形状、例えば心臓の鼓動を表す波形や、自然物の輪郭をデータ化して処理する場合、フーリエ記述子(Fourier Descriptor)という形でフーリエ係数を用いる。これにより、形状の回転や拡大縮小に強い特徴量を抽出でき、画像認識やパターンマッチングに応用されている。
このシミュレーターで直感的な面白さを感じたら、次のステップに進むタイミングだ。理論と実践を結びつけるための学習の道筋を提案するね。
ステップ1: 数学的な基礎の確認
まずは「オイラーの公式」 $e^{i\theta} = \cos\theta + i\sin\theta$ の意味をしっかり理解しよう。この公式が、回転(三角関数)と複素平面上の指数関数を結びつけ、DFTの計算式 $e^{-2\pi i k n / N}$ の本質だ。この「回転子」を掛けることが、特定の周波数成分を抽出する操作に対応する。教科書だけだと難しく感じるかもしれないが、このシミュレーターの「一つの円の動き」が、まさに一つの $e^{i\omega t}$ の動きそのものなんだとイメージしながら学ぶと良い。
ステップ2: 「高速フーリエ変換(FFT)」への橋渡し
ツールの計算は原理がわかりやすいDFTだが、点の数Nが増えると計算量が $O(N^2)$ で爆発的に増える。実務では絶対に使わない。そこで発明されたのがFFT(高速フーリエ変換)で、計算量を $O(N \log N)$ まで劇的に減らすアルゴリズムだ。次の学びとしては、「なぜFFTで速くなるのか?」の核心である「時間間引き」や「周波数間引き」の考え方に触れてみよう。これは、大きな問題を「半分のサイズの子問題」に分割して征服する、分割統治法の美しい応用例なんだ。
ステップ3: 連続から離散へ「サンプリング定理」を学ぶ
シミュレーターはマウスで描いた「連続的な線」を「離散点」でサンプリングしている。ここで超重要なのが「ナイキスト周波数」と「サンプリング定理」だ。例えば、元の曲線に含まれる最も細かいギザギザ(高周波成分)を正しく再現するには、どれくらい密に点を取らなければいけないか? 逆に、サンプリング点が粗すぎると、全く別の低周波の曲線として誤って認識されてしまう(エイリアシング現象)。これは、現実のアナログ信号をデジタルデータ化する全ての分野(音声、映像、計測)で最も基礎となるルールだ。このツールで点の数を極端に減らして描画してみると、この現象が視覚的に理解できるはずだ。