フーリエ変換と周波数分解
どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる
- 1
- フーリエ変換と周波数分解の本質的な定義と直感的ビジュアルをシミュレーターで体験できる。
- 2
- 公式や証明の背景にある数学的意味と、厳密な導出ステップを解説。
- 3
- 実社会における工学応用(音声イコライザー(EQ)とMP3/JPEGの非可逆圧縮)のTypeScript実装コードを収録。
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
フーリエ変換と周波数分解の基礎原理を体系化し、抽象的な計算を直感的に扱うために誕生した。
身につく武器・思考力
どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる。この考え方を身につけることで、複雑な課題を単純化して数理モデルとして解く力が養われる。
実社会・ITでの活躍現場
- •音声イコライザー(EQ)とMP3/JPEGの非可逆圧縮
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
スライダーで基本周波数、第3高調波、第5高調波の振幅(強さ)を変えてみよう。上のグラフで各サイン波が足し合わされて合成波(矩形波に近い形など)が作られ、下のスペクトラム(棒グラフ)でどの周波数成分がどれだけ含まれているかがリアルタイムに分解表示される。
↑ フーリエ変換の本質は、上の「ぐにゃぐにゃした合成波」を、下の「どの周波数がどれだけ含まれるか」という明確な棒グラフ情報へと分解することです。MP3やJPEGは、この右側の高い周波数を間引くことで劇的な圧縮を実現しています。
Layer 2 — 定義・受験・証明
定義
任意の周期関数や連続信号 は、異なる周波数・振幅・位相を持つ三角関数(サイン波・コサイン波)の無限和(フーリエ級数)または積分として一意に分解・表現できる。連続時間フーリエ変換は次式で定義される。
公式・数理モデル
証明・導出
三角関数の直交性:異なる周波数を持つ三角関数の積の1周期積分は必ず 0 になる。
この直交性を利用することで、どんな複雑な合成信号 からでも、調べたい周波数 のサイン波を掛けて積分するだけで、その周波数成分の振幅だけを「フィルター抽出」することができる。これがフーリエ変換の幾何学的・代数的な本質である。
押さえておきたいポイント
- 時間領域の信号(横軸が時間)を、周波数領域(横軸が周波数Hz)へ変換する数学的レンズである
- 逆フーリエ変換を行うことで、周波数スペクトルから元の時間波形を100%復元できる
- 音の「音色」や「高さ」は、含まれる高調波の周波数スペクトルによって決まる
- 高速フーリエ変換(FFT)は、計算量を から に削減した現代最重要アルゴリズムの一つ
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
音声イコライザー(EQ)とMP3/JPEGの非可逆圧縮
スマートフォンや音楽アプリのイコライザー(重低音強調など)は、入力波形をFFTで周波数成分に分解し、低音帯域の振幅を増幅して逆FFTで音に戻している。また、人間の耳に聞こえにくい高周波成分を削ってファイルサイズを激減させる技術がMP3圧縮の核心である。
1// 離散フーリエ変換 (DFT) の簡易実装2type Complex = { re: number; im: number };34function discreteFourierTransform(signal: number[]): Complex[] {5 const N = signal.length;6 const spectrum: Complex[] = [];78 for (let k = 0; k < N; k++) {9 let re = 0;10 let im = 0;11 for (let n = 0; n < N; n++) {12 const phi = (2 * Math.PI * k * n) / N;13 re += signal[n] * Math.cos(phi);14 im -= signal[n] * Math.sin(phi); // e^(-i*phi)15 }16 spectrum.push({ re, im });17 }18 return spectrum;19}2021// 例: 4サンプルの単純信号をDFT22const audioSample = [1, 0, -1, 0];23const freqs = discreteFourierTransform(audioSample);24console.log(freqs.map(c => Math.hypot(c.re, c.im).toFixed(2))); // 各周波数のパワー
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元