FFTスペクトル解析シミュレーター 戻る
振動・波動

FFTスペクトル解析シミュレーター

最大5つの正弦波成分を合成してFFTスペクトルをリアルタイム解析。窓関数・ノイズ・FFT点数の影響を直感的に理解。

チャープ信号設定
開始周波数 f₀ 60 Hz
終了周波数 f₁ 600 Hz
掃引周期 T 2.0 s
サンプリング周波数 f_s 2000 Hz
FFT点数 N
窓関数
ライブ統計
FFT点数 N
瞬時周波数 f(t) [Hz]
ピーク振幅
Δf = f_s/N [Hz]
スペクトログラム — 時間 × 周波数 × 強度
瞬時スペクトル — 振幅 vs 周波数
理論・主要公式

線形チャープの瞬時周波数:$f(t)=f_0+(f_1-f_0)\,t/T$

各時間スライスをFFT:$X[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}$

周波数分解能:$\Delta f = f_s/N$。スペクトログラムの輝点はビン $k=f(t)/\Delta f$ を追従します。

FFTスペクトル解析とは

🙋
FFTって、時間の波形を周波数ごとの強さに分解するって聞きました。でも、このシミュレーターで「窓関数」を選べますよね? 窓って何ですか?
🎓
大まかに言うと、FFTは無限の信号を有限の長さで“切り取る”必要があるんだ。その切り取り方が「窓」なんだよ。例えば、矩形窓(何もしない)で切り取ると、信号の端が突然0になるから、そこに不連続が生じて周波数成分が“漏れ出して”見えてしまう。これがスペクトルリークだ。上の「窓関数」ドロップダウンを「矩形」にしてみて、ピークが広がる様子を確認してみよう。
🙋
え、そうなんですか! Hanning窓に変えたらピークが鋭くなりました。でも、振幅の値が少し下がったような…。実務ではどれを使うんですか?
🎓
鋭い観察だね。窓をかけると信号の両端を滑らかに0にする代わりに、エネルギーが少し減るんだ。実務では、振動や騒音の一般的な解析では、リーク低減と振幅精度のバランスが良いHanning窓が一番多いよ。例えば、自動車のエンジン振動を計測するとき、回転数が微妙に変動すると周波数がビンと一致せずリークする。そんな時、Hanning窓が必須なんだ。
🙋
なるほど! あと、パラメータに「SNR」や「FFT点数N」がありますね。これらを変えると、結果はどう変わるんですか?
🎓
いい質問だ。「SNR」スライダーを下げてノイズを増やすと、小さな信号成分がノイズに埋もれて見えなくなる。現場の計測では、このノイズとの戦いだよ。「FFT点数N」は周波数分解能 $\Delta f = f_s / N$ を決める。Nを大きくすると分解能が上がって近接した周波数成分を分離できるけど、計算時間は増える。シミュレーターでNを変えて、2つの近い周波数ピークが分離する様子を確かめてみて。

よくある質問

FFT点数Nを増やすと周波数分解能Δf = fs/Nが向上し、近接した周波数成分を分離しやすくなります。ただし、計算負荷が増加し、時間分解能は低下するため、目的に応じてバランスを取ってください。
窓関数は信号を切り出す際のスペクトルリーク(本来ない周波数成分が現れる現象)を低減します。ハニング窓は汎用的、矩形窓は振幅精度が高いがリークしやすいです。ブラックマン窓はこのUIでは未搭載です。
ノイズを加えると全周波数帯域にランダムな成分が現れ、信号のピークが埋もれやすくなります。ノイズレベルが高いほどS/N比が低下し、小さな信号成分の検出が困難になります。
周波数差が周波数分解能Δfより小さいと、FFT上で2つのピークが分離できず1つの山に見えます。窓関数の種類によってはサイドローブが重なり、見かけ上のピーク位置や振幅が変化するため注意が必要です。

実世界での応用

振動・騒音(NVH)解析:自動車や家電製品の不快な振動・騒音源を特定するために必須です。エンジンやモーターの回転周波数やその倍音成分をFFTで抽出し、Hanning窓を用いてリークを抑えながら正確な振幅を評価します。

回転機械の状態監視:工場のポンプやファンなどのベアリングや歯車の異常を、振動スペクトルの変化から早期発見します。特定の周波数(軸受の傷による固有周波数)にノイズ(SNR)の中から微小なピークが現れるかを監視します。

モーダル解析(実験):構造物(橋梁、航空機翼)にインパルス加振やランダム加振を行い、その応答のFFTから固有振動数や減衰率を同定します。加振力と応答のスペクトル比から周波数応答関数(FRF)を求めます。

音響・音声信号処理:音楽の和音分析、音声認識の前処理、騒音計測における特定周波数帯域の音圧レベル評価に利用されます。Hamming窓が音声の短時間フーリエ変換に多用されます。

よくある誤解と注意点

FFT解析を始めたばかりの頃、僕も含めて多くの人がハマる落とし穴があるんだ。まず一つ目は「サンプリング周波数は高いほど分解能が上がる」という誤解。実は分解能 $\Delta f$ は $f_s / N$ だから、$f_s$ だけ上げても分解能は悪化する($\Delta f$ が大きくなる)。例えば、$f_s=1$kHz、$N=1024$なら $\Delta f \approx 0.98$Hzだけど、$f_s$を2kHzにすると $\Delta f \approx 1.95$Hzになってしまう。分解能を上げたいなら、$N$を大きくするか、$f_s$を下げる必要があるんだ。ただし、$f_s$はナイキスト周波数($f_s/2$)より高い信号成分を捉えられないから、計測対象の最大周波数の2倍以上は確保しなきゃいけない。このバランスが実務のキモだよ。

二つ目は「窓関数を使えば全て解決」という過信。Hanning窓は確かに便利だけど、振幅が小さく見えるから補正係数(例えば実効値なら約1.63)を掛けて真の振幅を推定する必要がある。それに、窓をかけると時間分解能が落ちる側面もある。例えば、衝撃的な過渡現象を捉えたい時は、むしろ矩形窓の方がタイミングを正確に捉えられる場合があるんだ。「何でもHanning」ではなく、現象の性格に合わせて選ぶのがプロの技だね。

最後に、「FFT点数Nは2のべき乗じゃなきゃダメ」という思い込み。このツールはN=256/512/1024など2のべき乗のみ対応している。必要な周波数分解能 $\Delta f$ と手持ちのデータ長から逆算して、用意されたNとサンプリング周波数を選ぶことが大事だよ。

使い方ガイド

  1. 最大5つの正弦波成分について周波数(Hz)と振幅(V)を入力。例:第1波100Hz・2V、第2波200Hz・1V
  2. サンプリング周波数fsを設定(推奨:測定対象の最高周波数の2倍以上。例:5kHz成分まで対象ならfs=10kHzを選択)
  3. FFT点数Nを選択して周波数分解能Δf=fs/Nを確認。例:fs=10kHz・N=1024点で約9.77Hz分解能
  4. 窓関数をHanning(一般的)・矩形(周波数分解能重視)・Hamming(スペクトルリーク低減)から選択
  5. SNRを設定(10~80dB)してノイズ影響をシミュレート。測定環境を反映した値を入力
  6. 各入力変更に応じてリアルタイムにスペクトル波形、THD(高調波歪率)、支配周波数が更新されます

具体的な計算例

モーター振動解析ケース:基本周波数100Hz・振幅3V、3倍成分300Hz・振幅0.6V、5倍成分500Hz・振幅0.3Vを合成。サンプリング周波数fs=2000Hz、FFT点数N=1024、Hanning窓、SNR=60dBで実行。結果:支配周波数99.6Hz、RMS振幅≈2.173V、THD≈22.4%、周波数分解能Δf=1.953Hz。ピークはビン格子上で離散化されるため、入力100Hzに最も近い99.6Hzとして表示されます。

実務での注意点

  1. サンプリング周波数がナイキスト周波数(fs/2)より低い測定成分を入力するとエイリアシングが発生。例:fs=10kHzで8kHz成分を測定不可、2kHzに見えてしまう
  2. FFT点数が少ないと周波数分解能が低下。接近した周波数(例:1000Hzと1010Hz)を区別するにはN≥10000推奨
  3. 窓関数選択は目的で決定:スペクトルリーク抑制重視ならHanning(サイドローブ-32dB)、周波数精度重視なら矩形窓(分解能最高だがリーク大)
  4. THD値が30%超過の場合、機械系統の故障兆候の可能性。詳細な時間領域波形確認を追加実施
  5. 実測値の妥当性確認:モーター音の基本周波数は回転数×極数÷60で事前計算し、シミュレーション結果と照合