1. TOP
  2. KEYENCE
  3. KV-Xシリーズ
  4. ファンクションブロック
  5. FFT

FFT (高速フーリエ変換)

ダウンロード

FFT.kufb (ライブラリのみ)

※ 動作確認はシミュレータで行いました

概略

高速フーリエ変換を行うファンクションです
振動センサや音のデータを元に振動パターンを分析して故障の兆候を早期に発見するためにFFTを使用します

FFTの概要

FFTは時間領域の信号を周波数領域に変換する手法です
時間領域の信号は、振幅が時間とともに変化する波形として表現されます
周波数領域では、信号を構成する各周波数成分の振幅と位相として表現されます
FFTを使用することで、信号に含まれる周波数成分を分析することができます

FFTファンクションの処理内容

  1. サンプリング周波数

    信号をデジタル化する際の時間間隔の逆数です
    ナイキストの定理により、分析したい最高周波数の2倍以上のサンプリング周波数が必要です
    例:100Hzの信号を分析するには、200Hz以上のサンプリング周波数が必要です

  2. サンプル数

    FFTは2のべき乗のサンプル数(256, 512, 1024など)で実行する必要があります
    サンプル数が多いほど周波数分解能が向上します
    周波数分解能 = サンプリング周波数 ÷ サンプル数

  3. 窓関数

    信号の両端で不連続が生じるのを防ぐために使用します
    ハン窓、ハミング窓、ブラックマン窓などがあります
    信号の特性に応じて適切なウィンドウ関数を選択します

  4. FFTの実行

    複素数の実部と虚部を計算
    振幅スペクトルと位相スペクトルを算出
    パワースペクトル密度の計算

データの前処理

デジタルフィルタでノイズを除去

これらの要素を適切に設定することで、より正確な周波数分析が可能になります。

シンボル

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[]の配列に順番に格納していきます
(実際にはアナログユニットなどからのデータを取得することになります)

  1. 周波数:50Hz
  2. 周波数:800Hz
  3. 周波数:2000Hz

FFT

ラダー回路

00004

取得したアナログデータにローパスフィルタ(LPF)を通します
サンプリング周波数 = 10kHz
カットオフ周波数 = 1kHz
LPFファンクションブロックはデジタルフィルタで入手できます

00005

StoreSamplingDataフラグをONすることでサンプリングを開始します
StoreSamplingDataフラグは次のブロックでデータが揃ったらOFFになるので待ちます

0007

StoreSamplingDataフラグがONのときにローパスフィルタ後の値をData[]に貯えます
Data[]のデータが揃ったらStoreSamplingDataをOFFにします
(ここでは要素数2048)

0008

StoreSamplingDataの立下りでFFTの演算を行います
サンプリング数: 2048
窓関数は 0:ハニング窓にしました

演算結果 FFTData

FFT

分解能: サンプリング周波数/サンプリング数 = 10000/2048 = 4.882813
有効周波数: サンプリング周波数/2 = 10000/2 = 5000Hz
50Hz, 800Hz, 2000Hzが確認できます

補足

配列のモニタ値をExcelに貼り付けたかった...

スマートなやり方が分からなかったのでこんなやり方になった
メニューバーから「モニタ/シミュレータ」-「デバイス値一括変更/読出し」
Ctrl+Iでインクリメント挿入を必要な配列分を繰り返し

FFT

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

FFT

この記事へのコメント