[파이썬] scipy 디지털 및 아날로그 필터

Scipy는 파이썬에서 과학적인 계산을 수행하기 위한 라이브러리로서, 다양한 수치 계산, 통계 분석, 신호 처리, 최적화 등의 기능을 제공합니다. 이 중에서도 디지털 및 아날로그 필터링 기능은 신호 처리에 많이 활용되며, 이를 통해 노이즈 제거, 신호 강조, 주파수 선택 등 다양한 처리를 수행할 수 있습니다.

필터링이란?

필터링은 입력 신호에 대해 원하는 주파수 영역을 강조하거나 제거하여 신호를 변형하는 과정을 말합니다. 디지털 필터는 이와 같은 필터링 처리를 디지털 신호에 적용하는 것이고, 아날로그 필터는 아날로그 신호에 적용하는 것입니다.

scipy.signal 모듈

Scipy에서 신호 처리를 위한 모듈은 scipy.signal입니다. 이 모듈에는 여러가지 필터링 기능을 제공하며, 디지털 필터 및 아날로그 필터 모두를 다룰 수 있습니다.

디지털 필터링

Scipy를 사용하여 디지털 필터링을 수행하는 방법은 다음과 같습니다.

import numpy as np
from scipy import signal

# 입력 신호 생성
t = np.linspace(0, 1, 1000)  # 시간 범위
x = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t)  # 5Hz와 10Hz의 신호 합성

# 로우패스 필터 생성
b, a = signal.butter(4, 0.08, 'low')  # 4차 Butterworth 로우패스 필터

# 필터링 수행
filtered_x = signal.lfilter(b, a, x)

# 결과 시각화
import matplotlib.pyplot as plt
plt.plot(t, x, label='Original Signal')
plt.plot(t, filtered_x, label='Filtered Signal')
plt.legend()
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.show()

위 코드는 5Hz와 10Hz의 신호를 생성하고, Butterworth 필터를 사용해 이 신호를 로우패스 필터링하는 예제입니다. signal.butter 함수는 주어진 차수와 컷오프 주파수로 Butterworth 필터를 생성하고, signal.lfilter 함수를 사용해 입력 신호에 필터링을 적용합니다. 결과적으로, 원본 신호와 필터링된 신호를 시각화하여 비교할 수 있습니다.

아날로그 필터링

Scipy를 사용하여 아날로그 필터링을 수행하는 방법은 다음과 같습니다.

import numpy as np
from scipy import signal

# 입력 신호 생성
t = np.linspace(0, 1, 1000)  # 시간 범위
x = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t)  # 5Hz와 10Hz의 신호 합성

# Chebyshev I 필터 생성
b, a = signal.cheby1(4, 0.5, 0.1, 'low')  # 4차 Chebyshev I 로우패스 필터

# 필터링 수행
filtered_x = signal.lfilter(b, a, x)

# 결과 시각화
import matplotlib.pyplot as plt
plt.plot(t, x, label='Original Signal')
plt.plot(t, filtered_x, label='Filtered Signal')
plt.legend()
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.show()

위 코드는 5Hz와 10Hz의 신호를 생성하고, Chebyshev I 필터를 사용해 이 신호를 로우패스 필터링하는 예제입니다. signal.cheby1 함수는 주어진 차수, 파형, 컷오프 주파수, 전달 함수 타입으로 Chebyshev I 필터를 생성합니다. 이후에는 디지털 필터링 예제와 마찬가지로 signal.lfilter 함수를 사용해 필터링을 수행하고 결과를 시각화합니다.

결론

Scipy의 scipy.signal 모듈은 파이썬에서 디지털 및 아날로그 필터링을 수행하기 위한 강력한 도구입니다. 디지털 필터링과 아날로그 필터링의 기본적인 사용법을 이해하고, 신호 처리에 필요한 다양한 필터를 만들고 활용할 수 있습니다. 따라서 Scipy를 사용하여 신호 처리를 수행하는 데에는 많은 도움이 될 것입니다.