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と平均化処理を理解するための基本的な情報です。これらの知識を活用して、より精度の高いデータ分析を行いましょう。