회사에서 DSP(디지털 신호처리)를 하다보니 scipy.signal을 이용해 필터를 디자인해야할 필요가 있었다. 그런데 문제는 docs.scipy.org의 공식문서에 나온 예제만으로는 실제 필요한 필터를 설계하는 것은 매우 어려웠다. MATLAB을 사용하던 사람은 비교적 쉽게할 수 있을 거라고 생각한다. 본인은 컴퓨터 공학을 전공했지만 전혀 MATLAB을 사용한 적이 없어서 butter, cheby1, cheby2, freqz, fft 등의 정확한 사용방법을 익히는 데 매우 오래 걸렸다.
numpy 와 matplotlib.pyplot에 대한 설명은 생략.
scipy.signal에는 필터를 디자인할 수 있는 함수들이 마련되어 있다.
MATLAB 스타일의 scipy.signal.butter, scipy.signal.cheby1, scipy.signal.cheby2 등 과 scipy 스타일의 iirfilter 함수가 있다. iirfilter에 대해서는 추후 포스팅하겠다.
output을 sos 나 zpk를 하지 않는다면 나중에 포스팅할 frequency response를 그릴 때 시각화가 제대로 되지 않는다. 그래프가 정말 이상하게 나온다.
처음 그래프가 필터를 통과하지 않은 그대로 상태의 사인파, 두번째 그래프가 필터를 통과한 후에 우리가 원하는 사인파, 세번째 그래프가 필터를 통과한 후에 사인파.
필터를 통과한 후에 사인파에서 발견되는 약간의 문제점은 값이 약간 증폭하는 구간이 있다는 점과 위상의 변화가 있다는 점이 있다.
댓글