[python] 파이썬으로 오디오 파일의 밴드패스 필터를 적용하는 방법

이번 포스트에서는 파이썬을 사용하여 오디오 파일에 밴드패스 필터를 적용하는 방법에 대해 알아보겠습니다.

필요한 라이브러리 설치

오디오 파일을 처리하기 위해 다음과 같은 라이브러리를 설치해야 합니다:

pip install scipy

오디오 파일 불러오기

먼저 필요한 라이브러리를 임포트하고 오디오 파일을 불러옵니다:

import scipy.io.wavfile as wav
import numpy as np

# 오디오 파일 경로 설정
audio_file = 'audio.wav'

# 오디오 파일 읽어오기
sample_rate, audio_data = wav.read(audio_file)

# 음성 데이터를 부동소수점 형식으로 변환
audio_data = audio_data.astype(np.float32)

밴드패스 필터링 적용하기

밴드패스 필터링은 지정된 주파수 범위 내의 신호를 통과시키고, 다른 주파수 대역의 신호는 차단하는 역할을 합니다. 필터링을 하기 위해 다음과 같은 함수를 정의합니다:

from scipy.signal import butter, lfilter

def apply_bandpass_filter(data, low_cutoff, high_cutoff, fs):
    nyquist = 0.5 * fs
    low = low_cutoff / nyquist
    high = high_cutoff / nyquist
    b, a = butter(5, [low, high], btype='band')
    filtered_data = lfilter(b, a, data)
    return filtered_data

위 함수는 입력 데이터 data, 저주파수 컷오프 주파수 low_cutoff, 고주파수 컷오프 주파수 high_cutoff, 샘플링 주파수 fs를 받아 밴드패스 필터링을 적용한 결과를 반환합니다.

적용하기 위해서는 다음과 같이 함수를 호출합니다:

filtered_audio = apply_bandpass_filter(audio_data, 500, 2000, sample_rate)

위 코드에서는 입력 데이터 audio_data에 대해 500Hz에서 2000Hz 사이의 주파수만을 통과시키는 밴드패스 필터를 적용한 결과를 filtered_audio 변수에 저장합니다.

필터링 결과 저장하기

필터링된 오디오 데이터를 오디오 파일로 저장하기 위해 다음과 같은 코드를 사용할 수 있습니다:

filtered_audio = filtered_audio.astype(np.int16)
wav.write('filtered_audio.wav', sample_rate, filtered_audio)

위 코드에서는 filtered_audio 데이터를 16비트로 변환하고, filtered_audio.wav 파일로 저장합니다.

이제 파이썬을 사용하여 오디오 파일에 밴드패스 필터를 적용하는 방법을 알게 되었습니다. 추가적으로 필요한 경우 주파수 범위나 필터 차수 등을 조정하여 원하는 결과를 얻을 수 있습니다.