PythonでFFT(高速フーリエ変換)を使用する際、より精度の良い分析のためには「平均化処理」を行うことがあります。ここではその際に必要となるオーバーラップ処理について説明します。

オーバーラップ処理とは?

オーバーラップ処理は、一定の長さで計測した時間波形をFFTする時、周波数波形の「平均化」という処理を行う時があります。その際に前処理として必要になるオーバーラップ処理の方法を説明します。

import numpy as np

#オーバーラップの関数
def ov(data, samplerate, Fs, overlap):
    Ts = len(data) / samplerate
    Fc = Fs / samplerate
    x_ol = Fs * (1 - (overlap/100))
    N_ave = int((Ts - (Fc * (overlap/100))) / (Fc * (1-(overlap/100))))
    array = []
    for i in range(N_ave):
        ps = int(x_ol * i)
        array.append(data[ps:ps+Fs:1])
    return array, N_ave

上記のコードは、オーバーラップ処理を行う関数です。この関数は波形データ data、サンプリングレート samplerate [Hz]、フレームサイズ Fs, オーバーラップ率 overlap [%]を引数として、オーバーラップされた波形の配列データ array、平均化回数(=分割数) N_ave を戻り値として返しています。

オーバーラップ処理の利点

オーバーラップ処理の利点は、窓関数にあります。一定の振動を測定した場合はハニング窓やハミング窓等、フレームの両端をなめらかに0にする窓関数をかけます。オーバーラップ率が0%の場合は左の図のようにフレームの両端がなめらかに0になります。しかし、オーバーラップ率を大きくして右の図のようにデータを抽出すると、窓関数で減衰しない部分がずれていくので、全フレームで見れば情報の欠如は軽減されます。

以上がPythonでFFTと平均化処理を理解するための基本的な情報です。これらの知識を活用して、より精度の高いデータ分析を行いましょう。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です