FFT (高速フーリエ変換)
ダウンロード
※ 動作確認はシミュレータで行いました
概略
高速フーリエ変換を行うファンクションです
振動センサや音のデータを元に振動パターンを分析して故障の兆候を早期に発見するためにFFTを使用します
FFTの概要
FFTは時間領域の信号を周波数領域に変換する手法です
時間領域の信号は、振幅が時間とともに変化する波形として表現されます
周波数領域では、信号を構成する各周波数成分の振幅と位相として表現されます
FFTを使用することで、信号に含まれる周波数成分を分析することができます
FFTファンクションの処理内容
- サンプリング周波数
信号をデジタル化する際の時間間隔の逆数です
ナイキストの定理により、分析したい最高周波数の2倍以上のサンプリング周波数が必要です
例:100Hzの信号を分析するには、200Hz以上のサンプリング周波数が必要です
- サンプル数
FFTは2のべき乗のサンプル数(256, 512, 1024など)で実行する必要があります
サンプル数が多いほど周波数分解能が向上します
周波数分解能 = サンプリング周波数 ÷ サンプル数
- 窓関数
信号の両端で不連続が生じるのを防ぐために使用します
ハン窓、ハミング窓、ブラックマン窓などがあります
信号の特性に応じて適切なウィンドウ関数を選択します
- FFTの実行
複素数の実部と虚部を計算
振幅スペクトルと位相スペクトルを算出
パワースペクトル密度の計算
データの前処理
デジタルフィルタでノイズを除去
これらの要素を適切に設定することで、より正確な周波数分析が可能になります。
シンボル
FFT (高速フーリエ変換)
- 入出力
- Data = サンプリングしたアナログデータ
- 入力
- WindowType = 窓関数 0:Hanning 1:Hann 2:Blakman 3:Rectangular
- 出力
- FFTData = 計算結果
Data
FFT分析するアナログデータをサンプル数分の配列にセットして入力します
DataはLREAL型の配列で配列の数は次のサイズにします
- 512
- 1024
- 2048
- 4096
- 8192
- 16384
WindowType
ウィンドウ関数は、FFT分析時に信号の両端で生じる不連続を防ぐために使用されます。
以下のウィンドウ関数から選択できます
- 0: ハニング窓
- 1: ハン窓
- 2: ブラックマン窓
- 3以上: 矩形窓(ウィンドウなし)
各ウィンドウ関数の特徴:
- ハニング窓:ハン窓よりサイドローブが小さく、周波数分解能は若干低下
- ハン窓:一般的な用途に適しており、周波数分解能とサイドローブの抑制のバランスが良い
- ブラックマン窓:サイドローブが非常に小さいが、周波数分解能は低い
FFTData
パワースペクトル密度を出力します
周波数分解能あたりのパワーを表します
周波数分解能 = サンプリング周波数 ÷ サンプル数
配列数は8192ですが、サンプル数の半分の配列に計算結果を出力します
FFTファンクションブロックの実装
ここでは次の3つの周波数を合成したダミーのアナログデータを使用します
ダミーのアナログデータは1スキャンで10個分をAnalogData[]の配列に順番に格納していきます
(実際にはアナログユニットなどからのデータを取得することになります)
- 周波数:50Hz
- 周波数:800Hz
- 周波数:2000Hz
ラダー回路
00004
取得したアナログデータにローパスフィルタ(LPF)を通します
サンプリング周波数 = 10kHz
カットオフ周波数 = 1kHz
LPFファンクションブロックはデジタルフィルタで入手できます
00005
StoreSamplingDataフラグをONすることでサンプリングを開始します
StoreSamplingDataフラグは次のブロックでデータが揃ったらOFFになるので待ちます
0007
StoreSamplingDataフラグがONのときにローパスフィルタ後の値をData[]に貯えます
Data[]のデータが揃ったらStoreSamplingDataをOFFにします
(ここでは要素数2048)
0008
StoreSamplingDataの立下りでFFTの演算を行います
サンプリング数: 2048
窓関数は 0:ハニング窓にしました
演算結果 FFTData

分解能: サンプリング周波数/サンプリング数 = 10000/2048 = 4.882813
有効周波数: サンプリング周波数/2 = 10000/2 = 5000Hz
50Hz, 800Hz, 2000Hzが確認できます
補足
配列のモニタ値をExcelに貼り付けたかった...
スマートなやり方が分からなかったのでこんなやり方になった
メニューバーから「モニタ/シミュレータ」-「デバイス値一括変更/読出し」
Ctrl+Iでインクリメント挿入を必要な配列分を繰り返し

PLC-全項目読出しのあと
Ctrl+A で全選択のあとコピー(Ctrl+C)してExcelの貼り付けたいセルにペースト(Ctrl+V)



