반응형
평균 (Average)
- 모든 데이터의 합을 데이터의 개수로 나눠준 값.
평균 필터 (Average Filter)
- 실시간 데이터들의 평균을 구하고, 새로운 데이터를 포함하여 새로운 평균을 구하는 방법.
평균 필터 수식 유도
- 위 평균 수식에서 양변을 k / (k-1)로 곱해준다.
- x_k만 따로 분리.
- x_1+x_2+...+x_k-1 / (k-1) 은 x_k-1의 평균.
- 양변에 k-1 / k를 곱해준다
- 즉, 평균을 계산하려면 직전 평균값인 x_k-1과 데이터의 개수 k, 새로 추가된 데이터인 x_k만 있으면 된다.
- 위 식과 같이 정리되고 이를 평균 필터(Average filter)라고 한다.
평균 필터 Python 코드
1. numpy, plt import 해준다.
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
2. 랜덤으로 노이즈가 있는 값을 받는 함수, 평균필터 함수를 작성.
def get_meas():
"""Measure value"""
n = np.random.normal(0, 4) # n : 측정 노이즈
mean = 14.1 # 평균 측정
meas = mean + n # 측정 값
return meas
def avg_filter(k, x_meas, x_avg):
"""Average filter를 사용하여 평균 계산"""
alpha = (k - 1) / k
x_avg = alpha * x_avg + (1 - alpha) * x_meas
return x_avg
3. n_samples 만큼 실시간으로 값을 받아 평균필터를 이용하여 평균을 구해준다.
time_end = 10
dt = 0.2
time = np.arange(0, time_end, dt)
n_samples = len(time)
x_meas_save = np.zeros(n_samples)
x_avg_save = np.zeros(n_samples)
x_avg = 0
for i in range(n_samples):
k = i + 1
x_meas = get_meas()
x_avg = avg_filter(k, x_meas, x_avg)
x_meas_save[i] = x_meas
x_avg_save[i] = x_avg
plt.plot(time, x_meas_save, 'r:*', label='Measured')
plt.plot(time, x_avg_save, 'b-', label='Average')
plt.legend(loc='upper left')
plt.title('Average Filter Values')
plt.xlabel('Time [sec]')
plt.ylabel('Value [V]')
plt.savefig('png/average_filter.png')
4. 결과
- Measured : 노이즈가 낀 측정 값.
- Average : 평균필터를 이용하여 구한 실시간 Measured 값들의 평균.
반응형
'기타' 카테고리의 다른 글
Low Pass Filter, 저주파 필터 (0) | 2023.09.15 |
---|---|
Moving Average Filter, 이동 평균 필터 (0) | 2023.09.15 |
detectron2 install error (0) | 2023.07.07 |
[GitLab] 접속 시 연결을 거부했습니다. (ERR_CONNECTION_REFUSED) (0) | 2023.03.07 |
cuda 10.x/11.x props not found (0) | 2022.10.11 |