わかさぎのブログ

プログラミング、Atcoderの勉強とか

python サビツキゴレイフィルターの実装

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg

df=pd.read_csv("R895_Connector.csv")
y=df.iloc[:,1].values.tolist()

win=251
poly=7

def sav_gol(y,win,poly):
    n=win//2
    m=poly
    X=[]
    for i in range(-n,n+1):
        gyou=[]
        for j in range(m+1):
            gyou.append(i**j)
        X.append(gyou)
    print(X)
    X=np.array(X)
    answer=[]
    for s in range(n+1,len(y)-n):
        yy=y[s-n:s+n+1]
        A=np.dot(X.T, X)
        print(A)
        A_inv=np.linalg.pinv(A)
        XX=np.dot(A_inv, X.T)
        ans=np.dot(yy,XX[0])
        answer.append(ans)
    
    return answer


a=sav_gol(y,win,poly)
ind=[i for i,j in enumerate(a)]
plt.plot(ind,a)
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg

df=pd.read_csv("R895_Connector.csv")
y=df.iloc[:,1].values.tolist()

win=251
poly=7

def sav_gol(y,win,poly):
    n=win//2
    m=poly
    x=[i for i in range(-n,n+1)]
    ans=[]
    for s in range(n+1,len(y)-n):
        yy=y[s-n:s+n+1]
        coef=np.polyfit(x,yy,m)[-1]
        ans.append(coef)
    return ans

a=sav_gol(y,win,poly)
ind=[i for i,j in enumerate(a)]
plt.plot(ind,a)
plt.show()

#xの要素の数をyにそろえる
#x=x[n+1:-n]