반응형

안녕하세요. 글은 계속 쓰는데 적는데 마음에 안들어서 전부 비공개로 해놨는데...

 

네 그렇다구요.

 

이번 글은 파이썬에서 Scipy를 통해서 음성신호를 필터링해볼려고 합니다. 

음성신호를 필터링했으면 matplotlib 라이브러리로 파형 한 번 확인해보고,

샘플링 된 음성파일을 저장해 들어볼려고 합니다.

 

https://www.scipy.org/

위 주소는 Scipy, 사이파이라고 과학기술계산을 위한 Python 라이브러리입니다.  

 

우선 그럼 설치부터 해볼까요.

 

cmd 창에 아래처럼 적어줍시다.

pip install scipy

만약 Fatal error in launcher : 블라블라 라고 뜨면

python -m pip install scipy

이렇게 적어줍니다. 아마 아나콘다 다운로드를 하면 자동적으로 다운되는 걸로 알고 있습니다.

 

다운로드가 되었다면 import 해봅시다.

 

import가 잘되네요. 

음성 파일 경로, 이름 한 번씩 확인해볼까요?

 

scipy.io => io : input, output

경로는 data에 들어가 있고, 이름은 test네요.

 

음성 파일 불러온 후에 파형 한 번 확인해봅시다.

 

wavefile.read는 scipy.io에 들어있습니다. 

x축으로는 시간, y축으로는 진폭을 나타냅니다. 

혹시 모르니 sr, x 값 찍어볼까요?

sr = sample rate는 48000이고

x = wav의 데이터들이 list로 들어가 있습니다. 

파형을 보니 음성파일 시간은 3초짜리 영상이네요. 

 

(오늘은 scipy에 대해 알아보는 시간이니 numpy, matpltlib는 생략하도록 하겠습니다. )

 

그럼 먼저 LPF(Low Pass Filter : 저역통과필터) 한 번 돌려볼까요?

오늘의 핵심 포인트!!

signal.firwin 이 함수 하나로 hpf, lpf, bpf 다 구현할 수 있습니다. 함수 원형 한 번 확인해볼까요.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html

 

scipy.signal.firwin — SciPy v1.4.1 Reference Guide

If True, the gain at the frequency 0 (i.e. the “DC gain”) is 1. If False, the DC gain is 0. Can also be a string argument for the desired filter type (equivalent to btype in IIR design functions). New in version 1.3.0: Support for string arguments.

docs.scipy.org

signal.firwin(101, cutoff=500, fs=sr, pass_zero='lowpass')

 

함수 중요한 부분만 적어본다면,

signal.firwin(차수, 차단주파수, 필터)

차수 : 영어로 order, 필터의 길이입니다. 어느정도 값을 크게 줘야합니다. 

차단주파수 : 어디서부터 주파수를 자를 것인지 결정합니다. 

필터 : 말보단 사진으로 보여드리겠습니다.

필터

오... bandpass, lowpass, highpass 뿐만아니라 bandstop도 되는군요. 

만약 쓰고 싶은 필터가 있으면 pass_zero = 'bandstop' 이렇게 하시면 됩니다.

 

제가 적용한 함수를 보면

차수는 101, 차단주파수는 500hz, 필터는 low pass filter를 사용합니다. 

차수 : 홀수

주의사항으로 차수는 must be odd if a passband includes the Nyquist frequency라고

반드시,  나이키스트 주파수 때문에 홀수를 사용해야 한다고 합니다.

 

 

파형 보겠습니다.

아래 주파수는 잘린 것을 확인할 수 있습니다.

 

그럼 이제 low pass 필터링된 음성들어보겠습니다.

잘 들어가 있네요?

혹여나 경로가 이상하다고 생각하실 수 있는데

저 같은 경우는 주피터 노트북을 실행할 때

cd C:\Users\Mangnani\Desktop\train

변경을 해줬기 때문에 기본 주소가 train으로 잡혀있습니다. 

요렇게요. 그럼 한 번 들어보겠습니다.

 

네. 필터링이 아주 잘된 것 같습니다. 하하..잘들리시나요?

 

그럼 High Pass Filter 가보겠습니다.

이번에는 한 번에 적었습니다. 한 번 들어볼까요?

네.. 이번에도 잘된 것 같습니다.

 

만약 필터링을 해보고 싶으시다면 위와 같이 하시면 될 것 같습니다.

 

좀 더 자세하게 깊게 하고 싶으시다면 차수, 차단주파수 등등 위에 있는 레퍼런스에 따라 

 

실험해보시면 될 것 같습니다.

728x90
반응형

+ Recent posts