1. TOP
  2. KEYENCE
  3. KV-X/KV
  4. アナログ
  5. FFT

KVKV-X

ダウンロード

FFTKVLib.kufb (ライブラリのみ)
FFTKVXLib.kufb (ライブラリのみ)

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

概略

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

FFTの概要

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

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

  1. サンプリング周波数

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

  2. サンプル数

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

  3. 窓関数

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

  4. FFTの実行

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

データの前処理

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

  • LPF
  • HPF
  • BPF
  • Notch
  • など

これらの要素を適切に設定することで、より正確な周波数分析が可能になります。
デジタルフィルタで解説しています

シンボル

FFT (高速フーリエ変換)

fftfb
入出力
Data
サンプリングデータ
入力
DataSize
サンプリング数
512 1024 2048 4096 8192 16384
WindowType
窓関数
0:Hamming 1:Hann 2:Blakman 3:Rectangular
出力
FFTData
パワースペクトル
fftfbkvx
入出力
Data
サンプリングデータ
入力
WindowType
窓関数
0:Hamming 1:Hann 2:Blakman 3:Rectangular
出力
FFTData
パワースペクトル

窓関数(WindowType)

窓関数
0ハミング窓
1ハン窓
2ブラックマン窓
それ以外矩形窓

Data

FFT分析するアナログデータをサンプル数分の配列にセットして入力します
DataはLREAL型の配列で配列の数は次のサイズにします

  • 512
  • 1024
  • 2048
  • 4096
  • 8192
  • 16384

WindowType

ウィンドウ関数は、FFT分析時に信号の両端で生じる不連続を防ぐために使用されます。
以下のウィンドウ関数から選択できます

  • 0: ハミング窓
  • 1: ハン窓
  • 2: ブラックマン窓
  • 3以上: 矩形窓(ウィンドウなし)

各ウィンドウ関数の特徴:

  • ハミング窓:ハン窓よりサイドローブが小さく、周波数分解能は若干低下
  • ハン窓:一般的な用途に適しており、周波数分解能とサイドローブの抑制のバランスが良い
  • ブラックマン窓:サイドローブが非常に小さいが、周波数分解能は低い

FFTData

パワースペクトル密度を出力します
周波数分解能あたりのパワーを表します
周波数分解能 = サンプリング周波数 ÷ サンプル数
配列数は8192ですが、サンプル数の半分の配列に計算結果を出力します

アナログ入力波形からFFTへの波形の変化

検証用で3つの波形の合成したアナログ波形を使用して説明します

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

サンプリング周期: 10000Hz
サンプリング数: 2048

アナログ入力波形

ローパスフィルタ(LPF)を掛けた波形

カットオフ周波数=1000Hzを設定して1000Hz以上の周波数を取り除きます

窓関数

窓関数はハミング窓,ハン窓,ブラックマン窓,矩形窓をFFTファンクションの入力で選択できます

矩形窓以外は繰り返しアナログデータをサンプリングしながらFFTの計算をして波形を出力するような場合に繋ぎ目がノイズなってしまうのを防ぐため最初と最後の出力をゼロに近づけています
連続した振動や音を単発でサンプリングするのであれば矩形窓で入力波形をそのまま使います
ここではハミング窓を使っています

FFT波形

ハミング窓の波形をもとにFFTを計算したグラフです (窓関数の計算はファンクションの中で計算しています)


FFTファンクションブロックの実装

ここでは次の3つの周波数を合成したダミーのアナログデータを使用します
ダミーのアナログデータは1スキャンで10個分をAnalogData[]の配列に順番に格納していきます
(実際にはアナログユニットなどからのデータを取得することになります)

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

FFT

ラダー回路

00069

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

00083

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

00085

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

00115

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


演算結果 FFTData

計算で得られたFFTDataをファイルに書き出すか下記の補足のようにExcelにコピペしてグラフを作成しました


FFT


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

00004

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

00005

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

00007

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

00008

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


演算結果 FFTData

計算で得られたFFTDataをファイルに書き出すか下記の補足のようにExcelにコピペしてグラフを作成しました


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

この記事へのコメント