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

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

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

信号成分設定
ノイズ SNR
dB
サンプリング周波数 f_s
Hz
FFT点数 N
窓関数
計算結果
支配周波数 [Hz]
RMS振幅
THD [%]
Δf = f_s/N [Hz]
時間領域 — 合成信号
周波数領域 — スペクトル [dB]
理論・主要公式

DFT定義:

$$X[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}$$

周波数分解能:$\Delta f = f_s / N$

窓関数でスペクトルリークを低減

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が向上し、近接した周波数成分を分離しやすくなります。ただし、計算負荷が増加し、時間分解能は低下するため、目的に応じてバランスを取ってください。
窓関数は信号を切り出す際のスペクトルリーク(本来ない周波数成分が現れる現象)を低減します。ハニング窓は汎用的、ブラックマン窓はサイドローブ抑制に優れ、矩形窓は振幅精度が高いがリークしやすいです。
ノイズを加えると全周波数帯域にランダムな成分が現れ、信号のピークが埋もれやすくなります。ノイズレベルが高いほど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のべき乗じゃなきゃダメ」という思い込み。確かに計算効率は最高になるけど、最近のライブラリやハードウェアでは任意点数でも十分速い。むしろ、必要な周波数分解能 $\Delta f$ と手持ちのデータ長から逆算して $N$ を決める思考が大事。データが8000点しかなくても、分解能を1Hzにしたければ $f_s=8000$Hzに設定すればいい。このシミュレーターで、$N$を512や1000など2のべき乗以外に変えて結果がどう変わるか試してみるといいよ。