こんにちは、うさじん(@Rabi_Jin_)です。
昨日FFTの動作について数種類の波形で検証してみました。
FFTの周波数分解能が分析データ数とサンプリング周波数に依存している事実を再確認したため、
あらためてまとめてみました。
諸事項の確認
サンプリング周波数とは
データ計測を行う場合、どのくらいの周期でデータを採取するかを検討します。
この周期(計測間隔)をサンプリング周期と言います。
周期の逆数は周波数となります。
例えば1秒間隔でデータを採取する場合、サンプリング周期は1秒、サンプリング周波数は1Hzとなります。
これを遅く、5秒間隔でデータを採取する場合、サンプリング周期は5秒、サンプリング周波数は0.2Hzとなります。
逆に早く、0.1秒間隔でデータを採取する場合、サンプリング周期は0.1秒、サンプリング周波数は10Hzとなります。
サンプリング周波数については正弦波をエクセルで作成した際に検証しました。
よかったら以下の記事をご参照下さい。
前回、前々回にて正弦波のデータをもとにグラフ化をすすめました。 今回そのデータをどのように作ったか、そのことについて記事にしたいと思います。 そんなこと、どうでもいいじゃんと思いますが、 なかなかどうし[…]
FFTとは
高速フーリエ変換FFTはFast Fourier Transformの略語で、離散フーリエ変換を計算機で高速で処理し、
時間領域で描かれた信号波形を分解して、周波数領域に変換する数値計算アルゴリズムです。
FFTを行うことで元信号波形の持つ周波数で成分を一覧で表示することができます。
振動や音響の世界で広く用いられています。
通常、加速度センサやマイクを用いた対象の計測では、対象の振幅の大小を確認することしかできません。
FFTを用いて周波数(振動数)に変換することで、対象の構造を切り分け、分析し、課題解決の検討を進めることができます。
FFTについては以下の記事でご紹介しています。
こんにちは、うさじん(@Rabi_Jin_)です。 今回はデータ分析シリーズとなります。 タイトル通り、PythonのNumpyを使って周波数分析をやってみました。 高速フーリエ変換(FFT)は[…]
こんにちは、うさじん(@Rabi_Jin_)です。 気温も一時期より大分暖かくなってきて、完全防寒対策して外出することもなくなってきました。 個人的には寒いより熱いほうが得意なので、早く春になればいい[…]
周波数分解能とは
簡単に言うと、周波数領域でパワースペクトルグラフを描いたとき、プロットされるデータの細かさです。
仮に1024個のデータについてFFTを行うと得られるFFTのデータ数は400個(=1024個/2.56)となります。
サンプリング周波数が1024Hzの場合、分析周波数は400Hz(=1024Hz/2.56)となります。
この場合、横軸スケール400Hzのグラフに400個のFFTのデータが入るため、
周波数分解能(⊿F)は1Hzとなります。
サンプリング周波数とFFTと周波数分解の関係
諸々の関係を表にまとめます。
項目 | 記号 | 数値1 | 数値2 | 数値3 |
サンプリング周波数(Hz) | Fs(固定) | 512 | 1024 | 2048 |
サンプリング周期(秒) | T | 0.001953125(=1/512) | 0.0009765625(=1/1024) | 0.00048828125(=1/2048) |
分析周波数(Hz) | Frange=Fs/2.56 | 200(=512/2.56) | 400(=1024/2.56) | 800(=2048/2.56) |
FFT処理する波形データ数(個) | N(固定) | 1024 | 1024 | 1024 |
FFT処理後のFFTライン数(個) | L=N/2.56 | 400(=1024/2.56) | 400(=1024/2.56) | 400(=1024/2.56) |
FFTの分解能(Hz) | ⊿f=Frange/L | 0.5(=200/400) | 1(=400/400) | 2(=800/400) |
サンプリング周波数Fs及びFFT処理する波形データ数は固定です。
数値2の設定の場合、FFTの周波数分解能は1.0Hzまでとなり、1.0Hz未満の信号に対しては最も有効な分解能とはいえません。
数値1の設定の場合、FFTの周波数分解能は0.5Hzまでとなり、1.0Hz未満の信号に対して0.5Hz単位までの分析が可能です。
サンプリング周波数とFFTと周波数分解の関係
各項目を整理したところで、とある例にあげます。
・稼働状態における振動波形データ
・49.5Hzおよび100Hzの振動が発生している
・サンプリング周波数は1024Hzで収録
・FFT処理のデータ数は1024個
結論として、上記のFFT処理の設定では49.5Hzの振動については有効とはいえません。
FFT処理のデータ数が1024個では1.0Hzの周波数分解能までの分析結果しか得ることができないからです。
解決方法は2つあります。
- サンプリング周波数を1024Hz → 512Hzとする
- FFT処理のデータ数を1024個 → 2048個とする
1の解決方法については、前項の表内で示したとおりです。
2の解決方法については、以下の表で確認します。
項目 | 記号 | 数値1 | 数値2 |
サンプリング周波数(Hz) | Fs(固定) | 1024 | 1024 |
サンプリング周期(秒) | T | 0.0009765625(=1/1024) | 0.0009765625(=1/1024) |
分析周波数(Hz) | Frange=Fs/2.56 | 400(=1024/2.56) | 400(=1024/2.56) |
FFT処理する波形データ数(個) | N(固定) | 1024 | 2048 |
FFT処理後のFFTライン数(個) | L=N/2.56 | 400(=1024/2.56) | 800(=2048/2.56) |
FFTの分解能(Hz) | ⊿f=Frange/L | 1(=400/400) | 0.5(=400/800) |
FFTは2のべき乗のデータ数の分析を基本としているため、1024(2^10乗) → 2048(2^11乗)のデータ数に変更することで周波数分解能を上げることができます。
ただし、分析したFFTをアベレージ等で平均化する場合は相当数のデータ量が必要となるので注意が必要です。
また、計測機材(FFTアナライザ等)を使用してFFTを行う場合は、分析可能なデータ数が個々によって異なるため事前の確認が必要です。
サンプリング周波数とFFTと周波数分解の関係についてのまとめでした。
Pythonのコードでグラフ化して、上記を確認したいと思いますが、長くなるのでそれは次回にします。
以上、有難う御座いました。
参考サイト
高速フーリエ変換 | Wikipedia
https://ja.wikipedia.org/wiki/%E9%AB%98%E9%80%9F%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
【初心者】Pythonでのフーリエ変換(FFT)の方法と注意点 | Qiita
https://qiita.com/chnokrn/items/57c89382942778a20e7f
装置設計者のための騒音の基礎 第21回
https://www.cradle.co.jp/media/column/a273
第1章 信号処理の基礎(1) | A&D
https://www.aandd.co.jp/products/nvh_analysis/fft/fft01.html
周波数分解能はどのように決めるのか? | 小野測器
https://www.onosokki.co.jp/HP-WK/c_support/faq/fft_common/fft_analys_4.htm