본문 바로가기
Signal Processing

[Signal Processing] 이동 평균 필터 (Moving average filter)

by goatlab 2023. 7. 6.
728x90
반응형
SMALL

이동 평균 필터 (Moving average filter)

 

이동 평균 필터는 2 이상의 연속된 데이터 (입력 값)에서 인접한 n개 데이터의 평균을 구하여 순차적으로 계산해내는 평균화 방법을 말한다.

 

예제

 

import numpy as np

# 이동평균 필터의 크기
window_size = 5

# 원본 데이터
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 이동평균 필터링
filtered_data = np.convolve(data, np.ones(window_size) / window_size, mode='same')

# 필터링된 데이터 출력
print(filtered_data)
[3. 4. 5. 6. 7. 8. 9.]
import numpy as np
import matplotlib.pyplot as plt
from scipy import io

input_mat = io.loadmat('sample.mat')

def get_data(i):
    z = input_mat['sig'][i]
    
    return z

def mov_avg_filter(x_n, x_meas):
    n = len(x_n)
    
    for i in range(n-1):
        x_n[i] = x_n[i+1]
    
    x_n[n-1] = x_meas
    x_avg = np.mean(x_n)
    
    return x_avg, x_n

n = 10
n_samples = 500
time_end = 10
dt = time_end / n_samples
time = np.arange(0, time_end, dt)
x_meas_save = np.zeros(n_samples)
x_avg_save = np.zeros(n_samples)

for i in range(n_samples):
    x_meas = get_data(i)
    
    if i == 0:
        x_avg, x_n = x_meas, x_meas * np.ones(n)
    
    else:
        x_avg, x_n = mov_avg_filter(x_n, x_meas)

    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='Moving average')
plt.legend(loc='upper left')
plt.title('Measured Altitudes v.s. Moving Average Filter Values')
plt.xlabel('Time [sec]')
plt.ylabel('Altitude [m]')
plt.show()

728x90
반응형
LIST

'Signal Processing' 카테고리의 다른 글

Mel Spectrogram  (0) 2023.09.13
Welch's Method  (0) 2023.08.23
Wavelet 변환  (0) 2022.04.19
Use of AR Models to Estimate Spectra  (0) 2022.04.13
AR Model Order Estimation  (0) 2022.04.13