fft分析とは何か基礎から周波数解析の仕組みを解説

fft分析とは何か基礎から周波数解析の仕組みを解説

fft分析とは何か周波数解析の仕組みと活用を徹底解説

「整理整頓が得意な人ほど、fft分析を使わずに損しています。」


🎯 この記事の3ポイント
📊
fft分析とは「信号の整理術」

ごちゃまぜの複雑な波形を「周波数ごとに整理」して可視化する手法。まるで散らかった部屋を種類別に片付けるイメージです。

⚠️
「見えない異常」を早期発見できる

機械の故障を時間波形だけで判断すると、初期異常を見逃す可能性大。fft分析なら特定の周波数ピークの変化で、肉眼では気づかない微小な変化を検出できます。

🐍
Pythonで今すぐ使える

NumPyやSciPyを使えばたった数行のコードでfft分析が実装可能。専用の高価な計測器がなくても、手元のPCで分析をスタートできます。


fft分析とは何か「高速フーリエ変換」の基本的な意味

fft分析の「FFT」とは、Fast Fourier Transformの略称で、日本語では高速フーリエ変換と呼ばれます。一言で言えば、「時間の流れで観測した複雑な波形を、周波数ごとに分解して可視化する手法」です。


私たちの身の回りにある音、振動、電気信号はすべて「波」です。そしてその波の正体は、複数の「単純な正弦波(サイン波)」が重なり合ったものです。たとえばギターの弦を弾いた時の音は、1つの周波数だけではなく、基本音と倍音が複雑に混ざり合って成り立っています。fft分析とは、まさにその「混ざり合い」を解きほぐして「どの周波数が、どのくらいの強さで含まれているか」を一目で示してくれる分析手法です。


つまり時間軸→周波数軸への変換です。


横軸を「時間」から「周波数(Hz)」に変換することで、グラフ上にピークが表れ、その信号がどの周波数成分でできているかが瞬時に判断できます。たとえば3Hz、9Hz、20Hzにそれぞれ鋭いピークが立っていれば、その波形はこの3つの周波数成分が混じり合っていることを意味します。


フーリエ変換そのものは18世紀のフランス人数学者ジョゼフ・フーリエが考案した数学的な手法であり、理論的には無限時間のデータが必要でした。しかし1965年、J.W.CooleyとJ.W.Tukeyにより、データ点数を2のn乗にとることで計算量を劇的に削減するアルゴリズムが提案されました。これがFFT(高速フーリエ変換)です。


数字で見ると驚きがあります。データ数が1024点の場合、通常のフーリエ変換では1,048,576回の掛け算が必要ですが、FFTではたった10,240回に短縮されます。これは100分の1以下の計算量です。この革命的な効率化のおかげで、リアルタイムでの信号処理や、手元のPCでの分析が現実的になりました。


FFTは「速く計算するための工夫」、これだけ覚えておけばOKです。


参考リンク(フーリエ変換の歴史とFFTの仕組みについて詳しく解説)。
小野測器 - 技術レポート FFTアナライザーについて(page 1)


fft分析とフーリエ変換の違いを3種類の変換で整理する

fft分析を正しく理解するうえで、混乱しやすいのが「フーリエ変換」「DFT」「FFT」の3つの概念の違いです。これらはすべて「時間信号を周波数に変換する」という目的は同じですが、扱う対象と計算方法が異なります。


まずフーリエ変換(FT:Fourier Transform)は、連続したアナログ信号(無限に続く連続波形)を周波数領域に変換する数学的な手法そのものです。理論的な概念であり、実際のコンピュータでそのまま計算することはできません。


次に離散フーリエ変換(DFT:Discrete Fourier Transform)は、コンピュータが扱えるデジタル信号(0と1で区切られた離散的なデータ)を周波数領域に変換する方法です。アナログ信号をセンサーで測定してデジタル数値に変換したデータが入力になります。コンピュータでの処理が可能になりましたが、計算量が非常に多いという問題がありました。


そして高速フーリエ変換(FFT:Fast Fourier Transform)は、このDFTを「高速に」計算するためのアルゴリズムです。FFTはDFTを計算するための効率的な「手順書」であって、別の変換ではありません。これが重要な点です。


3つの関係は下記のように整理できます。



  • 🔵 フーリエ変換(FT):アナログ(連続)信号を変換する理論的な手法

  • 🟡 離散フーリエ変換(DFT):デジタル(離散)信号をコンピュータで変換する手法

  • 🔴 高速フーリエ変換(FFT):DFTを爆速で計算するアルゴリズム(100分の1以下に計算量削減)


フーリエ変換とFFTの違いは、「理論」と「実装」の差です。


現場で「FFT解析」と言われる場合、ほぼ必ずこのFFTアルゴリズムを使ったDFT計算を指しています。また、FFTアナライザーとは、センサーから取得したアナログ信号をデジタルサンプリングし、FFTアルゴリズムで即座に周波数スペクトルを表示する計測器です。「スペクトルアナライザー」とも呼ばれます。


参考リンク(フーリエ変換の種類と違いを数式なしで図解解説)。
KLV株式会社 - 周波数解析におけるフーリエ変換をわかりやすく解説


fft分析でわかること周波数成分・スペクトル・ピークの読み方

fft分析を実行すると、横軸が「周波数(Hz)」、縦軸が「振幅(信号の大きさ)」のグラフ(スペクトル)が得られます。このグラフをどう読むかが実際の活用において最も重要です。


グラフを見るときのポイントは3つです。



  • 📍 ピークの位置(横軸 = 周波数):どの周波数の成分が存在するかを示す。たとえば7.5Hzにピークがあれば、7.5Hzの振動が含まれている

  • 📏 ピークの高さ(縦軸 = 振幅):その周波数成分がどのくらい強いかを示す。高いほど大きな振動・音

  • 🔍 ピークの有無の変化:正常時にないピークが出現した、または正常時にあったピークが消えた場合、異常の兆候


実際の活用例を見てみましょう。ある建物の床で歩行時に「フワフワとした揺れ」の問題が発生したとします。振動を測定してFFT分析したところ、7.5Hzにはっきりとした鋭いピークが現れました。事前調査でその床の固有振動数(共振しやすい周波数)も7.5Hzだったことがわかっていたため、「歩行の振動が床の固有振動数と一致して共振現象が起きている」と診断できました。その後、制振装置を設置して7.5Hz成分を低減したところ、振動の大きさが対策前の4分の1にまで減少しました。


これが「時間波形だけを見ていてはわからない情報」です。時間波形では「揺れている」という事実はわかっても、「なぜ揺れているのか」の原因がわかりません。スペクトルが原則です。


工場の生産ラインでも同様です。軸受(ベアリング)が正常な状態では特定の周波数にピークが現れます。しかし軸受に損傷が起き始めると、損傷に関連する別の周波数にピークが出現します。これをFFT分析で監視することで、目視では発見できない「壊れかけ」の段階で部品交換を行い、突発的な設備停止を未然に防げます。


fft分析から「故障の場所」が特定できることも意外ですね。


時間波形のオーバオール値(全体の振動レベル)だけを測定していた場合、異常の初期段階では変化が小さすぎて気づけません。一方、FFT分析で特定の周波数成分を監視することで、微小な異常でも検出が可能です。これがfft分析が予防保全(設備を壊れる前にメンテナンスする考え方)において特に重視される理由です。


参考リンク(実際のFFT振動分析例と制振対策の具体的な事例)。
ヤクモ株式会社 - 振動・騒音分析の基礎(2)FFT分析まるわかりガイド


fft分析の重要概念サンプリング定理・ナイキスト周波数・窓関数を解説

fft分析を実際に使いこなすためには、「落とし穴」となる3つの重要な概念を押さえておく必要があります。知らずに使うと、分析結果が正確でも意味のない数字になりかねません。


① サンプリング定理とナイキスト周波数


fft分析の入力データは、センサーで測定したアナログ信号をデジタルに変換(サンプリング)したものです。サンプリングとは「一定間隔でデータを取得すること」で、1秒あたりの取得回数をサンプリング周波数(単位:Hz)と呼びます。


ここで重要なのがサンプリング定理(ナイキスト定理)です。「信号に含まれる最高周波数の2倍以上のサンプリング周波数が必要」というルールです。たとえば1000Hzまでの成分を正確に分析したいなら、サンプリング周波数は最低でも2000Hz以上が必要です。このサンプリング周波数の半分の値をナイキスト周波数といい、fft分析で取得できる最大の周波数を意味します。これが条件です。


ナイキスト周波数を超えた成分が存在すると、「折り返しひずみ(エイリアシング)」という誤りが発生し、本来存在しない周波数にピークが現れてしまいます。


② リーケージ(スペクトル漏れ)


fft分析は「有限の長さに切り取ったデータ」に対して計算します。このデータを「永遠に繰り返されるもの」として処理するため、切り取りの端と端がちょうどつながっていない場合、不連続な「段差」が生じます。この段差が周波数領域では広がりを持ったノイズとして現れ、本来1本のはずのピークが広がって見えてしまいます。これがリーケージ(漏れ)です。これは痛いですね。


③ 窓関数(Window Function)


リーケージを抑制するために使われるのが窓関数です。切り取ったデータの両端を緩やかにゼロに近づけるように重みをかけ、不連続をなくす処理です。代表的な窓関数として、一般的な用途に適したハン窓(Hann窓)と、高精度な測定に向いたブラックマン・ハリス(Blackman–Harris)窓があります。


ただし窓関数を使うとトレードオフがあります。ハン窓を使った場合、スペクトルリーケージは大幅に減りますが、信号パワーが元の3/8に低下し、周波数分解能も下がります。そのため、信号の形をざっくり把握したいならハン窓、SNR(信号対雑音比)を高精度に測定したいならブラックマン・ハリス窓、というように目的に合わせて選ぶことが大切です。


| 窓関数の種類 | 特徴 | 主な用途 |
|---|---|---|
| 矩形窓(なし) | 分解能最高・リーケージ最悪 | 信号周期がデータ長に一致するとき |
| ハン窓(Hann) | バランスが良い | 一般的なFFT評価・振動・音響 |
| ハミング窓(Hamming) | ハンに似るが端点を0にしない | 音声解析 |
| ブラックマン・ハリス窓 | リーケージ最強抑制 | 高精度ADC評価・ノイズ特性測定 |


「どの窓関数を使うかは目的次第」が基本です。


参考リンク(スペクトルリーケージと窓関数の仕組みを詳しく解説)。
nanaloglab - 窓関数とは?スペクトルリーケージの原因と対策を解説


fft分析をPythonで実装する方法NumPyとSciPyの使い方と実用例

fft分析を学んだら、実際に手を動かしてみるのが理解を深める最短ルートです。Pythonには「NumPy」と「SciPy」という無料のライブラリがあり、これらを使えば複雑な数式を理解していなくても、数行のコードでfft分析を実装できます。これは使えそうです。


NumPyのFFT機能である`numpy.fft.fft()`は最もシンプルな実装方法です。以下は基本的なコード例です。


```python
import numpy as np
import matplotlib.pyplot as plt


# サンプリング条件の設定
fs = 1000 # サンプリング周波数 1000Hz
T = 1.0 # 計測時間 1秒
N = int(fs * T) # データ点数 1000点
t = np.linspace(0, T, N, endpoint=False)


# 50Hzと120Hzの正弦波を合成した信号を作成
freq1, freq2 = 50, 120
signal = np.sin(2 * np.pi * freq1 * t) + 0.5 * np.sin(2 * np.pi * freq2 * t)


# FFT実行
fft_result = np.fft.fft(signal)
freqs = np.fft.fftfreq(N, d=1/fs)


# 振幅スペクトルを計算(正の周波数のみ)
amplitude = np.abs(fft_result:N//2) * 2 / N


# グラフ表示
plt.figure(figsize=(10, 4))
plt.plot(freqs:N//2, amplitude)
plt.xlabel("周波数 Hz")
plt.ylabel("振幅")
plt.title("FFT解析結果")
plt.grid(True)
plt.show()
```


このコードを実行すると、横軸に周波数、縦軸に振幅のグラフが出力されます。50Hzと120Hzにはっきりとしたピークが現れ、その高さの比率も元の信号の強さ(1:0.5)に対応していることが確認できます。


SciPyを使う場合は`scipy.fft.fft()`が利用可能です。SciPyのFFTは内部の最適化が施されており、特に大きなデータや繰り返し処理の多い用途ではNumPyよりも高速に動作する場合があります。また、SciPyの`signal`モジュールには短時間FFT(STFT)の実装である`ShortTimeFFT`クラスも含まれており、時間の経過とともに周波数が変化する信号(例:エンジン回転数が上昇するときの音)を分析する場合に非常に便利です。


Pythonでの実用的な活用例として代表的なものをまとめます。



  • 🔧 機械の異常診断:工場設備の振動センサーデータをPythonで定期的にFFT分析し、特定の周波数ピークの変化を自動で検出してアラートを出すシステム

  • 🎵 音楽・音声処理:録音した音声をFFT分析し、特定の楽器音や人の声の特徴となる周波数帯を抽出・フィルタリング

  • 📡 IoTデータ解析:センサーから収集した時系列データをFFT分析して特徴量を抽出し、機械学習モデルの入力として活用

  • 🌊 電気信号解析:電源のノイズや回路の共振周波数を特定し、設計の改善に活かす


NumPyもSciPyも無料で使えます。


fft分析の実装で最初につまずきやすい点は「サンプリング周波数の設定」と「振幅の正規化」です。`numpy.fft.fft()`が返す値は複素数なので、`np.abs()`で絶対値(振幅)を取り出す必要があります。また正の周波数のみを使う場合はデータの前半(`:N//2`)を使い、振幅を正確に得るには`2/N`で割り算(正規化)を忘れないようにしましょう。正規化は必須です。


参考リンク(PythonでのFFT実装とSciPyを使った周波数解析の詳細)。
WATLAB - PythonでFFT実装!SciPyのフーリエ変換まとめ