본문 바로가기
알고리즘 문제 & 프로그래밍/파이썬

[파이썬] wav파일에 lowpass필터 적용하는 법

by 달슬 2021. 5. 1.
반응형

사용 목적에 따라 wav 파일의 특정 주파수 폭만 필요한 경우가 많다.

 

그래서 하는게 전처리 작업(Preprocessing)인데, 오디오 파일을 파이썬으로 Preprocessing하는 방법을 알아보자.

<코드는 하단 깃허브 링크 참조>

Scipy로 wav 파일을 불러서 sampling rate와 wav data를 각각 저장한다.

CatinaBand 60.wav 파일을 사용했는데, Sampling rate는 22050, duration은 60초이다.

 

CS 101- Sample Sound Files

 

www2.cs.uic.edu

파형은 위 그림과 같다.

 

이제 이 wav data를 주파수 영역에서 봐 보도록 하자.

numpy의 fft를 이용하여 Fast Fourier Transform을 했다. Sampling rate가 22050이므로, 우측 상한값은 11005이다.

Magnitude는 우함수이므로, 양수 값만 그래프로 나타냈다.

scipy.signal.firwin을 이용하여 lowpass 필터를 적용시킨다.

scipy.signal.firwin에는 lowpass필터 뿐만 아니라, highpass필터, bandpass필터도 있다.

 

scipy.signal.firwin — SciPy v1.6.3 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

1000hz 이상의 성분들은 제거하는 lowpass필터를 적용해보았다.

시간 영역으로 그래프로 보면 다음과 같다.

 

처음 wav 파일, 1000Hz, 500Hz로 자른 파일을 한번에 봐보면 다음과 같다.

이렇게 필터를 적용시킨 data를 wav파일로 보내면 끝이다.

 

참고

 

mannlim/wavFile_preprocessing

.wav Preprocessing(LPF, HPF, etc...). Contribute to mannlim/wavFile_preprocessing development by creating an account on GitHub.

github.com

 

[파이썬 응용] 1탄 Scipy : 음성 신호를 LPF , HPF 돌려보기!

안녕하세요. 글은 계속 쓰는데 적는데 마음에 안들어서 전부 비공개로 해놨는데... 네 그렇다구요. 이번 글은 파이썬에서 Scipy를 통해서 음성신호를 필터링해볼려고 합니다. 음성신호를 필터링

coding-yoon.tistory.com

 

반응형

댓글