신호 처리 소개: 이동 평균 필터

전기 공학에서 신호와 시스템은 강력한 개념입니다. 이를 통해 정보가 어떤 방식으로 전기 부품을 통해 통과하고 수정되는지 모델링할 수 있습니다. 더욱이, 전압과 같은 신호가 다양한 전기 부품에 의해 영향을 받는 방식을 이해하면 원하는 방식으로 신호 조작이 가능한 회로를 설계할 수 있습니다. 저항기, 커패시터, 연산 증폭기(op-amp)와 같은 전기 부품의 조합을 사용하여 적분 및 미분과 같은 수학적 도구를 모델링하는 방법은 대단히 흥미롭습니다.

예를 들어, 다음 회로를 살펴 보겠습니다(그림 1).

그림 1: 간단한 적분기 회로(이미지 출처: Mustahsin Zarif)

라플라스 영역에서는 회로를 다음 공식으로 나타낼 수 있습니다.

Vout = -(1/s) (1/RC) Vin

라플라스 영역에서 1/s는 실제로 적분에 해당합니다! 따라서 연산 증폭기를 사용하는 적분기 회로에 대한 회로 모델을 설계할 수 있습니다. 그러나, 실제 세계에서는 일종의 무작위 잡음으로 인해 시스템이 항상 오염되어 있습니다.

더 간단한 예를 위해 적분기 회로를 보류해 두고, 그림 2와 같은 오실로스코프를 사용하여 입력 및 출력 파형을 측정할 수 있는 전압 증폭기를 고려해 보겠습니다.

그림 2: 전압 증폭기 입력 및 출력 파형(이미지 출처: Mustahsin Zarif)

기본적인 가시적 사인파형에 더해지는 무작위 잡음은 여러 요인(예를 들어 회로가 브레드보드 위에 구축되어 있어 전기적 연결이 좋지 않음)으로 인한 것일 수 있습니다. 이러한 잡음은 적분기의 파형에도 영향을 미칩니다. 이에 대해서는 이 신호 처리 시리즈의 다음 블로그에서 설명하겠습니다. 그러나 우리가 관심을 갖는 부분은 대개 이러한 무작위 외란을 최소화하는 방법입니다.

필터링 기법

엔지니어는 1) FIR(유한 임펄스 응답) 필터 또는 2) IIR(무한 임펄스 응답) 필터로 분류할 수 있는 필터링 기법을 사용하여 이러한 과제를 극복하려고 합니다.

FIR 필터는 출력이 언제나 현재 및 이전 입력 값에 의해서만 결정되고 이전 출력 값에는 영향을 받지 않기 때문에 그렇게 불립니다. 따라서 피드백이 없는 비재귀 구조를 가지며, 방정식 1로 모델링할 수 있습니다.

방정식 1: FIR 필터의 방정식 예(이미지 출처: Mustahsin Zarif)

적분기 회로는 출력이 입력에 따라서만 결정되므로 FIR 필터의 한 예입니다.

반면 IIR 필터는 피드백이 있습니다. 출력이 현재 입력뿐만 아니라 이전 출력에도 의존하기 때문입니다. 이는 방정식 2로 모델링됩니다.

방정식 2: IIR 필터 방정식 예(이미지 출처: Mustahsin Zarif)

그림 3은 IIR 필터의 블록 다이어그램으로, 입력 및 출력이 지연(z-i, z-j), 스케일링(ai, bj) 및 합산되어 현재 출력을 제공하는 방법을 보여줍니다. 이러한 값을 변경하면 다양한 유형의 필터를 구현할 수 있습니다.

그림 3: IIR 필터 블록 다이어그램(이미지 출처: Mustahsin Zarif)

피드백이 없는 FIR 필터의 블록 다이어그램이 필요한 경우 y[n]은 단순히 첫 번째 합산 결과로 나타낼 수 있습니다(그림 4).

그림 4: FIR 필터의 블록 다이어그램(이미지 출처: Mustahsin Zarif)

FIR 및 IIR 필터에 대한 기본 사항을 학습했으니, 이제 이동 평균 필터 예를 통해 해당 내용을 정리해 보겠습니다.

이동 평균이 작동하는 방식은 현재 입력 및 특정 개수의 이전 입력의 평균을 구하는 것입니다(방정식 3).

방정식 3: 이동 평균 방정식(이미지 출처: Mustahsin Zarif)

여기서 N은 출력에 기여하는 윈도우 크기/샘플 개수입니다.

방정식의 우변에 y 항이 없으므로 이것이 FIR 필터임을 확인할 수 있습니다.

그러나 방정식을 적절히 재배열하여 IIR 필터를 구성할 수 있습니다. 다음을 고려해 보겠습니다.

N=5라고 가정합니다.

y[5] = (x[5]+x[4]+x[3]+x[2]+x[1])/5

y[6] = (x[6]+x[5]+x[4]+x[3]+x[2])/5

y[6]=(x[6]+y[5]-x[1])/5

따라서 현재 출력은 이제 이전 출력을 기반으로 합니다(y[6]은 y[5]를 기반으로 함)!

더 일반적인 항으로 수정해 보겠습니다.

y[n] = (y[n − 1] + x[n] − x[n − N - 1])/N

여기서 N은 윈도우 크기입니다.

이 필터는 시간 영역 신호를 매끄럽게 만드는 데 효율적이며, 이는 Python에서 윈도우 크기 N = 11로 시뮬레이션한 그림 5에서 확인할 수 있습니다.

그림 5 : Python을 사용하는 이동 필터 시뮬레이션(이미지 출처: Mustahsin Zarif)

이동 필터 시뮬레이션 Python 코드:

복사import numpy as np

import matplotlib.pyplot as plt



# Parameters for the sinusoidal wave

frequency = 5  # in Hertz

sampling_rate = 100  # Sampling rate in samples per second

duration = 2  # in seconds



# Generate time axis

t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)



# Generate a clean sinusoidal signal

clean_signal = np.sin(2  np.pi  frequency * t)



# Add random, white (Gaussian) noise to the signal

noise_amplitude = 0.5

noisy_signal = clean_signal + noise_amplitude * np.random.normal(size=t.shape)



def moving_average(signal, window_size):

    window = np.ones(window_size) / window_size

    return np.convolve(signal, window, mode='same') 



# Apply moving average to the noisy signal

window_size = 11

smoothed_signal_ma = moving_average(noisy_signal, window_size)



# Plot the noisy and smoothed signals

plt.figure(figsize=(12, 9))



plt.subplot(2, 1, 1)

plt.plot(t, noisy_signal, label='Noisy Signal', color='orange')

plt.title('Noisy Sinusoidal Signal')

plt.xlabel('Time [s]')

plt.ylabel('Amplitude')

plt.grid(True)

plt.legend()



plt.subplot(2, 1, 2)

plt.plot(t, smoothed_signal_ma, label='Smoothed Signal (MA)', color='green')

plt.title('Smoothed Signal using Moving Average')

plt.xlabel('Time [s]')

plt.ylabel('Amplitude')

plt.grid(True)

plt.legend()



plt.tight_layout()

plt.show()

요약

이 블로그는 실제 세계의 데이터가 어떻게 잡음으로 인해 손상되는지 보여주는 것으로 시작되었습니다. 수학 방정식에서 기대하는 이상적인 응답을 정확히 얻는 것은 불가능하지만, 수집된 데이터에서 원하지 않는 특성을 필터링하여 가능한 한 이상적인 응답에 가깝게 만들 수는 있습니다. 이를 수행할 수 있는 여러 가지 방법이 있으며, 이러한 작업이 필요한 상황도 다양합니다. 이번 블로그는 이동 평균 필터의 시뮬레이션 응답으로 마무리했지만, 다음 블로그에서는 지수 이동 평균 필터가 잡음이 많은 IMU(관성 측정 장치) 데이터를 매끄럽게 만드는 방식을 살펴보겠습니다!

작성자 정보

Image of Mustahsin Zarif

Electrical Engineering student at The University of California, San Diego.

More posts by Mustahsin Zarif
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum