안녕하세요. 글은 계속 쓰는데 적는데 마음에 안들어서 전부 비공개로 해놨는데...
네 그렇다구요.
이번 글은 파이썬에서 Scipy를 통해서 음성신호를 필터링해볼려고 합니다.
음성신호를 필터링했으면 matplotlib 라이브러리로 파형 한 번 확인해보고,
샘플링 된 음성파일을 저장해 들어볼려고 합니다.
위 주소는 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
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 가보겠습니다.
이번에는 한 번에 적었습니다. 한 번 들어볼까요?
네.. 이번에도 잘된 것 같습니다.
만약 필터링을 해보고 싶으시다면 위와 같이 하시면 될 것 같습니다.
좀 더 자세하게 깊게 하고 싶으시다면 차수, 차단주파수 등등 위에 있는 레퍼런스에 따라
실험해보시면 될 것 같습니다.
'Python > Application' 카테고리의 다른 글
[파이썬 응용] 4탄 Pyinstaller : exe실행파일 만들기, 오류 해결 (0) | 2020.02.25 |
---|---|
[파이썬 응용] 1. Filter Adapter Application (0) | 2020.02.24 |
[파이썬 응용] 4탄 SpeechRecognition : 6줄로 음성 인공지능 구현하기(STT :Speech to Text) (1) | 2020.02.18 |
[파이썬 응용] 3탄 *arg : 인자를 여러 개 받고 싶을 때 (0) | 2020.02.15 |
[파이썬 응용] 2탄 cx_freeze : pyinstaller에 지친 사람을 위해... (2) | 2020.02.14 |