지난 포스터에서 1차 테브난 등가회로기반의 배터리 개방회로전압(ocv) 추정은 오차가 크다는 것을 확인했다. 이어서 이번에는 다른 곡선()으로 전압곡선을 피팅해보았다.
다른건 다 같으나 피팅함수랑 학습률을 바꾸었다.
(피팅함수마다 최적의 하이퍼파라미터는 다르기떄문)
전압곡선 함수 출처
# %%
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# %%
def V_func(a, b, c, t):
return a*(1/t)**(-b)+c #https://vbn.aau.dk/ws/portalfiles/portal/293046723/A_Novel_Multiple_Correction_Approach_for_Fast_Open_Circuit_Voltage_Prediction_of_Lithium_ion_Battery.pdf
def E(a, b, c):
E = sum((V_func(a, b, c, t) - V_meas) ** 2) # 에러함수: 오차제곱합
return E
#%%
df=pd.read_csv('curr.csv')
df.columns=['time','voltage']
df.time=df.time.str.slice(stop=8)
df.time=df.time.str.replace(pat=':', repl='', regex=False)
hh=df['time'].str.slice(start=0, stop=2)
mm=df['time'].str.slice(start=2, stop=4)
ss=df['time'].str.slice(start=4, stop=6)
hh=hh.astype(int)
mm=mm.astype(int)
ss=ss.astype(int)
df.time=3600*hh+60*mm+ss
df.time=df.time-df.time.min()
V_meas=df.voltage.to_numpy()/10**5
# %%
a, b, c = -10, -1, 200 # 초기값
insp_t = len(V_meas) # 60*10초동안 휴지전압 측정
t = np.arange(1, insp_t+1)
# %%
learning_rate = 0.0001
error = []
for i in range(10000): # 경사하강 알고리즘
Ea = sum((V_func(a, b, c, t) - V_meas)*(1/t)**(-b))
Eb = sum((V_func(a, b, c, t) - V_meas)*a*(1/t)**(-b)*np.log(t))
Ec = sum((V_func(a, b, c, t) - V_meas) )
# learning_rate=(Eaa/Ea)**2,(Ebb/Eb)**2,(Ecc/Ec)**2
a -= learning_rate * Ea
b -= learning_rate * Eb
c -= learning_rate * Ec
if i > 1:
if error[-1] < E(a, b, c):
error.append(E(a, b, c))
print("turn")
print(E(a, b, c), error[-1])
break
error.append(E(a, b, c))
print(a, b, c, E(a, b, c))
# %%
plt.plot(V_measf,label='measured voltage')
plt.plot(np.arange(1, insp_t+1),V_func(a, b, c, t),'r',linewidth='3',label='fitted voltage')
plt.title('formula: $at^{b}+c$'+'\n\nMSE:'+str(E(a, b, c)/len(V_meas)))
plt.legend()
이전 포스트의 모델에 비해 MSE(mean squared error)가 절반정도로 줄었다
여기에 초기 400초 전압곡선만 학습하여 OCV를 추정해 보고, 1400여초 학습데이터로 나온 OCV와 비교해보겟다.
=215.8936790206262
=215.64662766761796
결과:
1400초 단자전압대비 400초 단자전압은 0.25% 차이가 나는 반면
1400초ocv추정값대비 400초ocv추정값 오차는0.11443%이다.
요약하자면 다항전압곡선 모델에서 1400초 단자전압기반 ocv추정이 정확하다면 400초 단자전압 측정만으로도 정확한 ocv추정이 가능하다는 것을 의미한다