フーリエ変換とスペクトル解析
波形を周波数の地図に描き変える技術を原理から開封。DFT の分解能はどこで決まり、なぜ窓関数を掛けないとスペクトルが漏れるのかまで、式で腑に落ちます。
- 1.フーリエ変換は任意の波形を「どの周波数の正弦波がどれだけ・どの位相で含まれるか」に分解する。周期信号はフーリエ級数(離散スペクトル)、非周期信号はフーリエ変換(連続スペクトル)で表す。
- 2.計算機で扱う離散フーリエ変換(DFT)は N 点の標本から N 個の周波数成分を求める。周波数分解能は Δf = fs / N で、観測時間 T = N / fs が長いほど細かくなる。FFT は DFT を O(N log N) で高速化した実装にすぎない。
- 3.有限区間の切り出しは矩形窓での打ち切りと等価で、周波数が窓の格子に乗らないとエネルギーが周囲へにじむスペクトル漏れが起きる。ハニングなど滑らかな窓で端を減衰させ、漏れとサイドローブを抑える。
波形を「周波数の地図」に描き直す
オシロスコープで見る信号は「時間に対する振幅」、つまり時間領域の姿です。フーリエ変換は同じ信号を 「どの周波数の正弦波が、どれだけの振幅で、どの位相で含まれているか」 という周波数領域の姿に描き直します。両者は同じ情報を別の座標系で表しただけで、情報量は失われません。この記事では、フーリエ級数から連続フーリエ変換、計算機で使う離散フーリエ変換(DFT)、そして周波数分解能と窓関数の必要性までを、LaTeX を使わずプレーンな式で原理から追います。
出発点は、任意の信号は正弦波(サイン・コサイン)の重ね合わせで表せるという事実です。ある周波数成分の「量」は、信号にその周波数の正弦波を掛けて全区間で積分(相関を取る)ことで抽出できます。直交性——異なる周波数の正弦波を掛けて積分すると 0 になる性質——により、各成分は互いに干渉せず独立に取り出せます。これがフーリエ解析すべての土台です。
フーリエ級数:周期信号は離散スペクトル
周期 T0(基本周波数 f0 = 1/T0)で繰り返す周期信号は、基本周波数の整数倍(高調波)だけを成分に持ちます。フーリエ級数は次のように書けます。
x(t) = a0 + Σ_{k=1..∞} [ a_k cos(2π k f0 t) + b_k sin(2π k f0 t) ]
a_k = (2/T0) ∫_{0..T0} x(t) cos(2π k f0 t) dt
b_k = (2/T0) ∫_{0..T0} x(t) sin(2π k f0 t) dt
係数 a_k, b_k は、信号と第 k 高調波との相関量そのものです。周期信号のスペクトルは f0, 2f0, 3f0, … の位置にだけ線が立つ 離散スペクトル(線スペクトル)になります。周期性がある限り、含まれる周波数は基本周波数の整数倍に限られる、という点が本質です。
オイラーの公式により、サインとコサインは複素指数 exp(j·2π k f0 t) の実部・虚部として一体化できます。すると級数は係数 c_k を使った一本の和 x(t) = Σ c_k exp(j 2π k f0 t) になり、c_k の大きさが振幅、偏角が位相を表します。以降の DFT もこの複素指数を基底に取るため、振幅と位相を一つの複素数で同時に扱えます。
フーリエ変換:非周期信号は連続スペクトル
周期がない(あるいは周期を無限大にした)信号では、成分の間隔 f0 が 0 に近づき、離散だった線が連続的につながります。和は積分に置き換わり、連続フーリエ変換になります。
X(f) = ∫_{-∞..∞} x(t) exp(-j 2π f t) dt (時間 → 周波数)
x(t) = ∫_{-∞..∞} X(f) exp(+j 2π f t) df (周波数 → 時間、逆変換)
X(f) は複素数で、大きさ |X(f)| が 振幅スペクトル、偏角が 位相スペクトル です。ここで重要な直観が 時間と周波数の反比例(不確定性) です。時間的に短いパルスほど周波数的には広い帯域に広がり、逆に長く続く純音ほど周波数は鋭く尖ります。「時間で狭いものは周波数で広い」——この双対性が、後述する分解能と窓の議論すべてに効いてきます。
離散フーリエ変換(DFT):計算機で扱う形
計算機は連続信号も無限区間も扱えません。実際には信号を標本化周波数 fs(標本間隔 Ts = 1/fs)で N 点だけ標本化し、有限個の値 x[0], x[1], …, x[N-1] を得ます。これに対する変換が 離散フーリエ変換(DFT) です。
X[k] = Σ_{n=0..N-1} x[n] · exp(-j 2π k n / N) k = 0 .. N-1
x[n] = (1/N) Σ_{k=0..N-1} X[k] · exp(+j 2π k n / N) (逆 DFT)
N 個の標本から N 個の複素係数 X[k] が得られ、X[k] は k 番目の周波数ビン に対応します。ビン k が表す物理周波数は次式です。
f_k = k · fs / N k = 0, 1, …, N-1
X[0] は直流(平均値)、X[N/2] はナイキスト周波数 fs/2 に相当します。実数信号では X[k] と X[N-k] が複素共役になる 共役対称性 があり、独立な情報は 0 .. N/2 の約半分に収まります。残り半分は折り返しの鏡像なので、片側スペクトルとして前半だけを見るのが実務の定石です。
DFT は有限長 N の標本列を、周期 N で無限に繰り返す周期信号とみなして解析します。つまり x[N] は x[0] に、x[N-1] の次は再び x[0] につながると仮定されます。切り出した区間の始点と終点で値が滑らかに繋がらないと、この仮想的な周期境界に不連続(段差)が生じ、後述のスペクトル漏れの直接原因になります。
FFT は DFT の高速アルゴリズム
DFT の定義式をそのまま計算すると、X[k] 1 個につき N 回の積和、全 N 個で N × N、すなわち O(N^2) の演算が必要です。高速フーリエ変換(FFT) はこれを O(N log N) に削減する アルゴリズム であり、求まる結果は DFT と数学的に完全に同一です。
FFT の要は、N 点の DFT を偶数番目・奇数番目の N/2 点 DFT に分割し、exp(-j 2π k/N)(回転因子)の周期性・対称性で計算を再利用する分割統治(Cooley–Tukey 法)です。N が 2 のべき乗のとき最も効率的なため、実務では標本数を 1024 や 4096 に揃えるのが一般的です。
| 用語 | 指すもの | 計算量 |
|---|---|---|
| DFT | 離散信号 → 離散スペクトルの数学的な定義(変換そのもの) | 素朴実装で O(N^2) |
| FFT | DFT を高速に計算するアルゴリズム(結果は DFT と同一) | O(N log N) |
| ビン f_k | k 番目の出力が表す周波数 = k·fs/N | — |
スペクトルの意味と周波数分解能
DFT 出力の各ビンから物理量を読むには正規化が要ります。振幅を復元するには |X[k]| を N で割り(片側スペクトルでは直流とナイキスト以外をさらに 2 倍し)、パワースペクトルなら |X[k]|^2 に比例した量を扱います。ビン k の位相は X[k] の偏角そのものです。
隣り合うビンの周波数間隔が 周波数分解能 で、これは二つの近接した周波数を区別できる細かさを決めます。
Δf = fs / N = 1 / T (T = N / fs は観測時間)
決定的なのは、分解能を細かくする(Δf を小さくする)唯一の方法は観測時間 T を長くすること だという点です。標本化周波数 fs を上げても、同じ点数なら T が縮むため Δf はむしろ粗くなります。分解能を 2 倍細かくしたければ、fs を保ったまま標本点数 N を 2 倍にし、観測時間を 2 倍取る必要があります。「たくさん速く測る」のではなく「長く測る」ことが周波数の見分けには効く、という反直観がここにあります。
標本の後ろに 0 を継ぎ足して N を増やす「ゼロ詰め」は、スペクトルの見た目を滑らかに補間してビン間隔を細かく描くだけで、実際に近接周波数を分離する 真の分解能は改善しません。真の分解能はあくまで実データが存在する観測時間 T で決まります。ゼロ詰めはピーク位置の読み取り精度を上げる補間手段であって、分離能力の向上ではない——この区別は試験でも実務でも頻出です。
窓関数が必要な理由とスペクトル漏れ
有限区間で信号を切り出す行為は、数学的には無限に続く信号に 矩形窓(区間内が 1、外が 0)を掛ける操作と等価です。時間領域の掛け算は周波数領域では畳み込みになり、矩形窓のスペクトル(sinc 関数)が信号スペクトルに畳み込まれます。矩形窓の sinc はメインローブが太く、サイドローブが緩やかにしか減衰しません。
観測した周波数がビンの格子 f_k = k·fs/N にちょうど乗る(区間内に整数個の周期が収まる)場合は、他ビンの sinc がゼロ点に一致して漏れは出ません。しかし現実の信号周波数は格子の間に落ちるのが普通で、このとき 一つの純音のエネルギーが本来のビンから隣接ビンへ広く漏れ出します。これが スペクトル漏れ(spectral leakage) です。原因は、DFT が仮定する周期境界で信号の端が不連続になり、その段差が偽の高周波成分を生むことにあります。
対策が 窓関数 です。矩形窓の代わりに、区間の両端で滑らかに 0 へ減衰する窓(ハニング、ハミング、ブラックマンなど)を信号に掛けてから DFT を取ります。端の不連続がなくなるためサイドローブが大きく下がり、漏れが抑えられます。ただし対価があります——端を削る分メインローブが太くなり、周波数分解能はわずかに劣化します。漏れ(サイドローブの低さ)と分解能(メインローブの細さ)はトレードオフ で、用途に応じて窓を選びます。
| 窓関数 | 特徴 | 向いた用途 |
|---|---|---|
| 矩形(窓なし) | メインローブ最細=分解能最良だが漏れ最大 | 整数周期が収まる周期信号・過渡解析 |
| ハニング | 漏れと分解能のバランスが良い汎用窓 | 一般的なスペクトル解析の標準 |
| ハミング | 最大サイドローブをさらに抑制 | 近接する強弱2信号の分離 |
| ブラックマン | サイドローブ最小=漏れ最小、メインローブは太い | 微弱成分をダイナミックレンジ広く観測 |
- 級数と変換:周期信号 → フーリエ級数(離散スペクトル)、非周期信号 → フーリエ変換(連続スペクトル)。
- DFT と FFT:DFT は定義、FFT は O(N log N) の高速アルゴリズム。結果は同一。
- ビン周波数:
f_k = k·fs/N、直流は k=0、ナイキストは k=N/2。 - 分解能:
Δf = fs/N = 1/T。細かくするには観測時間 T を延ばす(N を増やす)。fs 増では改善しない。 - ゼロ詰め:見た目の補間のみ。真の分解能は上がらない。
- 漏れと窓:有限切り出し=矩形窓で漏れ発生。滑らかな窓で端の不連続を消し漏れを抑制。分解能とはトレードオフ。
まとめ
フーリエ変換は、信号を 正弦波との相関 に分解して周波数の地図を描く操作です。要点は、(1) 周期信号は級数で離散スペクトル・非周期信号は変換で連続スペクトルになること、(2) 計算機用の DFT は N 点から N 個のビン f_k = k·fs/N を返し、FFT はそれを高速化した同一結果のアルゴリズムであること、(3) 周波数分解能 Δf = fs/N = 1/T は観測時間で決まり、ゼロ詰めでは真の分解能は上がらないこと、(4) 有限区間の切り出しは矩形窓による打ち切りでスペクトル漏れを生み、滑らかな窓関数で漏れとサイドローブを抑える代わりに分解能を少し犠牲にすること。この原理を押さえると、プログラミング での信号処理実装や、ハードウェア部品 のノイズ・振動解析、電源 のリップル評価まで、スペクトルという共通言語で読み解けるようになります。
信号処理・制御 Article
フーリエ変換とスペクトル解析を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
フーリエ変換
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 6
導入後に効く点
計算機で扱う離散フーリエ変換(DFT)は N 点の標本から N 個の周波数成分を求める。周波数分解能は Δf = fs / N で、観測時間 T = N / fs が長いほど細かくなる。FFT は DFT を O(N log N) で高速化した実装にすぎない。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 6
判断チェックリスト
- 自社の用途が「フーリエ変換 / DFT」に近いか確認する。
- 強みである「フーリエ変換は任意の波形を「どの周波数の正弦波がどれだけ・どの位相で含まれるか」に分解する。周期信号はフーリエ級数(離散スペクトル)、非周期信号はフーリエ変換(連続スペクトル)で表す。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。