フーリエ円シミュレーター 戻る
振動・波動

フーリエ円(エピサイクル)シミュレーター

マウスで描いた曲線を離散フーリエ変換(DFT)で分解し、回転する円で再現。円の数を変えて近似精度の変化をリアルタイムで体験しよう。

フーリエ円シミュレーター

描いた曲線をDFTで回転円に分解します

モード
エピサイクル数
円の数 N

値を変えて近似精度の変化を観察

アニメーション速度
速度
×
プリセット
計算結果
0
サンプル数
0
使用円数
0%
描画進捗
1.0×
再生速度
近似誤差
メイン

✏️ 曲線を描いてください

マウスドラッグまたはタッチで
任意の形を描くと自動でDFT分解します

理論・主要公式

$$f(t) = \sum_{n=-\infty}^{\infty} c_n e^{i 2\pi n t/T}$$

フーリエ級数:周期 $T$ の関数を複素指数関数(回転するベクトル)の重ね合わせで表す。

$$c_n = \frac{1}{T}\int_0^T f(t) e^{-i 2\pi n t/T} dt$$

フーリエ係数:$n$ 次調和成分の複素振幅。本ツールでは描画経路から DFT で算出。

$$|c_n| = A_n, \quad \arg(c_n) = \phi_n$$

振幅 $A_n$ と位相 $\phi_n$:各エピサイクル(周転円)の半径と初期角度に対応する。

フーリエ円(エピサイクル)とは

🙋
このシミュレーターで、マウスで描いた複雑な形が、回る円だけで再現できるって本当ですか?どういう仕組みなんですか?
🎓
本当だよ。大まかに言うと、離散フーリエ変換(DFT)という計算で、描いた曲線を「回転する円」のパーツに分解してるんだ。例えば、星の形も、四角も、原理的には円の組み合わせで描ける。上の「円の数 N」のスライダーを動かしてみると、使う円の数で近似の精度がどう変わるか、すぐに体感できるよ。
🙋
え、そうなんですか!分解された円って、それぞれ何が違うんですか?全部同じ円が回ってるだけに見えますけど。
🎓
それが大きな違いなんだ。各円は、半径(大きさ)、回転速度、スタート時の向き(位相)が全部バラバラなんだよ。DFTの計算結果が、それぞれの円の「設計図」になる。シミュレーターで「速度」を上げ下げしてみて。円の回転速度の違いがはっきり見えるはずだよ。
🙋
なるほど!でも、円を増やしすぎると計算が大変じゃないですか?実務ではどうやってるんですか?
🎓
良い質問だね。確かに全部の円を使うと完全に再現できるけど、データ量が多くなる。実務では「どの円が重要か」を見極めて、小さい円(高周波成分)を省いてデータを圧縮することが多いんだ。例えば、JPEG画像圧縮もこの原理の応用。このツールでNを小さくすると、そんな「近似」の様子が目で見えて面白いよ。

よくある質問

円の数を増やすと近似精度が向上します。ただし、元の曲線の点の数(N)が最大数です。また、曲線をゆっくり丁寧に描くと、ノイズが減りDFTの精度が上がります。
描いた曲線の点の数Nが、使用可能な最大の円の数です。円の数をNに近づけるほど元の曲線に完全に一致します。少ない円数では大まかな形状のみ再現されます。
はい。円の数を変えることで、低周波成分が大まかな形状を、高周波成分が細部を表現する様子を直感的に理解できます。フーリエ級数展開の視覚的な入門に最適です。
DFTは閉じた曲線を前提としているため、始点と終点が一致しないと不連続が生じ、再現時に歪みや振動が現れます。滑らかに再現するには、なるべく閉じた曲線を描いてください。

実世界での応用

音声・通信信号処理:音声データをフーリエ変換して周波数成分に分解し、不要な雑音(高周波成分など)を取り除いたり、特定の周波数帯域だけを増幅するイコライザーに応用されています。MP3などの音声圧縮もこの原理です。

画像圧縮(JPEG):画像をブロックに分け、各ブロックの色の変化を周波数成分(このシミュレーターの円に対応)に変換します。人間の目が感知しにくい高周波成分を大胆に省略することで、ファイルサイズを大幅に圧縮しています。

振動・異常診断:回転機械(モーター、ベアリング)から計測された振動データをフーリエ変換し、特定の周波数成分の大きさを監視します。異常が発生すると特徴的な周波数が現れるため、故障の早期発見に役立ちます。

デジタルフィルタ設計:必要な周波数帯域だけを通し、それ以外を遮断するフィルタを設計する際に、フーリエ変換が基礎理論として使われます。例えば、スマートフォンで相手の声だけをクリアに聞き分ける技術にも応用されています。

よくある誤解と注意点

このシミュレーターを使い始めるときに、多くの人が同じような疑問や間違いにぶつかるよ。まず押さえておきたいポイントを3つ説明するね。

1. 「円の数Nを最大にすれば必ず完璧?」
確かに理論上は、元の点の数と同じだけ円を使えば完全に再現できる。でも、シミュレーター上で「点の数」自体が有限だから、そもそもマウスで描いた滑らかな曲線も離散的な点の集まりとして取り込まれている。だから、Nを最大にしても「離散点を通る」再現に過ぎないんだ。実務では、完全再現よりも「必要な精度を達成する最小のN」を見つけることが重要だよ。例えば、人の耳に聞こえない20kHz以上の高音をカットするMP3圧縮みたいにね。

2. 「円の回転速度は自由に選べる?」
スライダーで「速度」を変えているから誤解しがちだけど、各円の相対的な回転速度の比は固定だ。k番目の円の角速度は $\omega_k = \frac{2\pi k}{T}$ で決まっていて、基本速度の整数倍になる。ツールで変えているのは、この基本速度全体を一括で速くしたり遅くしたりする「再生速度」だと思ってくれ。実設計で周波数を変えるには、サンプリング点の数や間隔そのものを変える必要がある。

3. 「位相(初期向き)は飾り?」
半径や速度に比べて地味だけど、位相は形を決める特に重要パラメータだ。例えば、半径が同じ2つの円でも、位相が90度ずれているかどうかで、ペン先の軌跡は全く異なる楕円軌道を描く。実務でフーリエ係数から信号を復元するとき、位相情報を間違えると波形が大きく崩れてしまう。このシミュレーターでも、各円の腕(アーム)が最初からバラバラの向きで伸びているのが見えるはずだ。

使い方ガイド

  1. 「描画」モードでキャンバスに一筆書きの閉じた曲線をマウス/タッチで描きます(またはプリセットの「星形」「ハート」「矩形波」を選びます)。描いた曲線は自動的に256点へリサンプルされ、DFT(離散フーリエ変換)で回転円に分解されます
  2. 「円の数 N」スライダー(1〜200、既定20)で再現に使う回転円の個数を調整し、近似精度の変化をリアルタイムに確認します
  3. 「速度」スライダー(1〜50×)でエピサイクルの回転速度を変え、複数の円が合成されてペン先の軌跡を描く様子を観察します
  4. 「再生」モードでアニメーションを動かし、「描画進捗」と「近似誤差」(全振幅に対する未使用成分の割合)を数値で確認します

具体的な計算例

プリセット「ハート」を読み込むと、256点の輪郭がDFTで分解され、振幅の大きい順に回転円が並びます。「円の数 N」を5にすると大まかな輪郭だけ、20で滑らかなハート形、50以上でほぼ完全に元の曲線に一致します。「近似誤差」は 1 − (使用した円の振幅の和) ÷ (全円の振幅の和) で計算され、円を増やすほど単調に小さくなります。星形のように角のある形は高周波成分(小さい円)を多く含むため、滑らかな形より多くの円が必要です。

実務での注意点