경사하강법을 이용한 배터리 전압곡선 피팅

오주환·2023년 6월 9일
0
post-thumbnail

포항공대 김상욱 교수님연구실의 "이중 분극화 모델 기반 리튬 이온 배터리의 전지 용량 및 개방회로전압 추정 알고리즘" 라는 제목의 논문에서 초기 n분동안의 휴지전압과 배터리모델을 이용하여 ocv를 추정하였다. 이때 matlab프로그램을 이용하여 커브피팅을 진행하였는데
이번 포스트에서는 이를 파이썬 경사하강 알고리즘을 통해 직접 구현해 보았다.
이렇게 초기 몇분동안의 휴지전압만을 가지고 ocv를 구하는 방법을 relaxation method 라고 한다
피팅 곡선 aet/b+cae^{t/b}+c 으로 피팅했으며 해당 식은 아래 그림과 같은 배터리모델의 전압곡선이다.

손실함수는 MSE이고 학습률 0.001로 10000회 학습했다.
시간에 따른 휴지전압데이터(curr.csv)는 다음과 같다
voltage 단위는 [uV]이며 연산하기 쉽게 10^^5로 나눈값으로 학습하였다.

# %%
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 10))

# %%
def V_func(a, b, c, t):
    return a + b * np.e ** (-t / c)
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
V_meas=df.voltage/10**5

# %%
a, b, c = 220, -10, 10  # 초기값
insp_t = len(V_meas)  # 60*10초동안 휴지전압 측정
t = np.arange(0, insp_t)
# %%
learning_rate = 0.001
error = []
for i in range(10000):  # 경사하강 알고리즘
    Ea = sum((V_func(a, b, c, t) - V_meas))
    Eb = sum((V_func(a, b, c, t) - V_meas) * np.e ** (-t / c))
    Ec = sum((V_func(a, b, c, t) - V_meas) * b * np.e ** (-t / c) * (t / c**2))
    # 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_meas)
plt.plot(V_func(a, b, c, t))
plt.title('formula: $ae^{-t/b}+c$'+'\n\nMSE:'+str((E(a, b, c)/len(V_meas))))
# %%

위 식은 테브난 1차등가회로 모델의 전압곡선이나 plot에서 알 수 있다싶이 해당 모델은 오차가 크다. 이는 이중분극화모델(테브난 2차)에서도 마찬가지이며 논문에서도 해당 문제점이 지적되었다.

아이디어 출처: 박민준, 김대현, 고태동, 김상우.(2014).이중 분극화 모델 기반 리튬 이온 배터리의 전지 용량 및 개방회로전압 추정 알고리즘.정보 및 제어 논문집,(),127-130.

profile
Quantami

0개의 댓글