칼만필터는 어렵지않아

내가 이 책을 봤던게 19년도 쯤이었던거 같은데

그때 정말 설명을 너무 친절하게 해주셔서 감탄하면서 봤었다

당시엔 matlab있으니까 그냥했는데

지금은 메트랩이 없엉

 

또 2판이 새로나오면서 파티클필터도 추가되기도 했고

이참에 파이썬으로 작성해봐야되겟다 싶엇는데 구현하게 됨

 

 

1. 볼트 값 가져오기

평균 필터 파트의 get volt는

직류분 14.4에다가

정규분포 노이즈로 4 *  randn 사용

파이썬으로 구현하면 이럼

import numpy as np

def get_volt():
    w = 0 + 4 * np.random.normal()
    z = 14.4 + w
    return z

print(get_volt())

 

2. 평균 필터와 테스트 로직 구현하기

메트랩 코드를 파이썬으로 만들다보니

persistent 때매 좀 지저분 해지긴했지만 동작은 잘된다

 

import matplotlib.pyplot as plt
def avg_filter(prev_avg, k, x):

    if prev_avg == 0:
        return x, 1
    alpha = (k - 1) / k
    avg = alpha * prev_avg + (1 - alpha) * x
    k = k + 1
    return avg, k
t = np.arange(0, 10, 0.2)
sample_num = len(t)
avg_list, xm_list = [], []
prev_avg, k = 0, 0
for _ in range(sample_num):
    xm = get_volt()
    xm_list.append(xm)

    avg, k = avg_filter(prev_avg, k, xm)
    prev_avg = avg
    avg_list.append(avg)
plt.plot(t, xm_list, color="red", label="voltage")
plt.plot(t, avg_list, color="blue", label="filtered voltage")
plt.legend()

 

 

+ Recent posts