pythonで基本波(第一高調波)を抽出する
pythonには非常に便利なライブラリがたくさんありますが,基本波波形を抽出するものを見つけられなかったので実装してみました。
pythonの練習にも良いかも...
今回はcsvファイルで準備したダミー波形から基本波を抽出してみたいと思います!
ダミー波形はこんな感じ...
完全に自分用なのできっちり1周期分のデータじゃないとうまく動きません
2deg刻みで1周期分(358degまで)の180点としてみました。
フーリエ級数展開のn=1まで足し合わせたものが基本波なので,numpyを使って計算する関数はこんな感じになります...
BASIC_WAVE.py
def BASIC_WAVE(data):
x = data[:, 0]
y = data[:, 1]
#周期T
T = x[-1] #x最後の値
pi = np.pi
#各係数を計算
a0 = 2/T * np.sum(y*np.cos(0*2*pi*x/T))
a1 = 2/T * np.sum(y*np.cos(1*2*pi*x/T))
b1 = 2/T * np.sum(y*np.sin(1*2*pi*x/T))
#基本波(第一高調波)
Y = a0/2 + a1 * np.cos(2*pi*x/T) + np.sin(2*pi*x/T)
return x, Y
とてもシンプルでスバラシイ✨
実際に使ってみるとこんな感じ...
test.py
#元データファイル名(pythonプログラムと別の階層ならパス)
raw = 'dummy.csv'
#元データをnumpy配列として読み込み
data = pd.read_csv('dummy.csv',encoding='shift_jis',index_col=None).values
#基本波を計算
#元データファイル名(pythonプログラムと別の階層ならパス)
raw = 'dummy.csv'
#x,yラベルを取得(無理やりですみませんm(__)m)
data = pd.read_csv(raw,encoding='shift_jis',index_col=None)
xlabel = data.columns.values[0]
ylabel = data.columns.values[1]
#元データをnumpy配列として読み込み
data = pd.read_csv(raw,encoding='shift_jis',index_col=None).values
#基本波を計算
x, Y = BASIC_WAVE(data)
#波形表示
%matplotlib inline#jupyterじゃない場合は不要
plt.rcParams['font.family'] = ['IPAexGothic']
plt.rcParams['figure.figsize'] = [8, 6]
plt.style.use('ggplot')
fig, ax = plt.subplots()
ax.plot(x, data[:,1]) #元波形プロット
ax.plot(x, Y) #基本波波形プロット
plt.ylabel(ylabel)#タテ軸のラベル
plt.xlabel(xlabel)#ヨコ軸のラベル
plt.show()
jupyter notebookでの使用を想定しています。
基本波計算できました!
良い感じではないでしょうか。
では,お疲れ様でした!