[파이썬] scipy에서 필터 설계
개요
Scipy는 파이썬 과학 컴퓨팅 생태계에서 강력한 라이브러리로, 다양한 수치 계산, 신호 처리 및 시각화 작업을 수행할 수 있습니다. 이 중에서도 필터 설계는 신호 처리 분야에서 중요한 작업입니다. 이 블로그 포스트에서는 Scipy를 사용하여 필터를 설계하는 방법에 대해 알아보겠습니다.
필터 종류
Scipy에서는 다양한 종류의 필터를 설계할 수 있습니다. 일반적으로 사용되는 필터 종류에는 다음이 포함됩니다:
- Low-pass 필터: 특정 주파수 이상의 신호를 차단하고, 낮은 주파수 성분만 통과시키는 필터입니다.
- High-pass 필터: 특정 주파수 이하의 신호를 차단하고, 높은 주파수 성분만 통과시키는 필터입니다.
- Band-pass 필터: 특정 주파수 범위 내의 신호만 통과시키는 필터입니다.
- Band-stop 필터: 특정 주파수 범위 내의 신호를 차단하고, 그 외의 신호만 통과시키는 필터입니다.
필터 설계하기
Scipy의 signal 모듈을 사용하여 필터를 설계할 수 있습니다. 이 모듈에는 다양한 필터 설계 함수가 제공됩니다. 아래는 예제 코드입니다:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# 시스템 사양 설정
order = 3 # 필터 차수
cutoff_freq = 0.5 # 절단 주파수
# Butterworth 필터 설계
b, a = signal.butter(order, cutoff_freq, 'low', analog=False, output='ba')
# 주파수 응답 계산
w, h = signal.freqz(b, a)
freq = w / (2 * np.pi)
# 주파수 응답 그래프 그리기
plt.plot(freq, 20 * np.log10(abs(h)))
plt.xlabel('Frequency [Hz]')
plt.ylabel('Gain [dB]')
plt.title('Butterworth Low-pass Filter Frequency Response')
plt.grid(True)
plt.show()
위의 코드는 Butterworth 저역 통과 필터를 설계하는 예시입니다. 필터의 차수와 절단 주파수를 설정하고, signal.butter()
함수를 사용하여 필터를 설계합니다. 그 다음, signal.freqz()
함수를 사용하여 주파수 응답을 계산하고, matplotlib.pyplot.plot()
함수를 사용하여 그래프를 그립니다.
결론
Scipy를 사용하여 필터를 설계하는 방법을 살펴보았습니다. 이를 통해 주파수에 따라 신호를 처리하거나 차단하는데 사용할 수 있는 다양한 종류의 필터를 만들 수 있습니다. 이는 신호 처리 분야에서 중요한 작업이며, Scipy의 라이브러리를 활용하면 간편하게 필터를 설계할 수 있습니다.