[python] 파이썬을 사용하여 음향 신호의 주파수 대역 나누기

음향 신호를 주파수 대역으로 나누는 것은 디지털 신호 처리에서 중요한 작업입니다. 파이썬을 사용하면 간단하게 이 작업을 수행할 수 있습니다. 이번 블로그 포스트에서는 파이썬을 사용하여 음향 신호의 주파수 대역을 나누는 방법에 대해 알아보겠습니다.

FFT(고속 푸리에 변환)를 사용하여 주파수 스펙트럼 분석하기

FFT는 음향 신호를 주파수 도메인으로 변환해주는 기술입니다. 파이썬의 numpy 패키지에는 FFT를 수행하는 fft 함수가 포함되어 있습니다. 아래의 코드는 WAV 파일을 로드하고 FFT를 사용하여 주파수 스펙트럼을 분석하는 예제입니다.

import numpy as np
from scipy.io import wavfile

# WAV 파일 로드
sample_rate, data = wavfile.read('audio.wav')

# FFT 수행
fft_data = np.fft.fft(data)

# 주파수 스펙트럼 플롯
import matplotlib.pyplot as plt
plt.plot(np.abs(fft_data))
plt.xlabel('주파수')
plt.ylabel('진폭')
plt.show()

위의 코드는 WAV 파일을 wavfile 모듈을 사용하여 로드한 뒤, FFT를 수행하여 주파수 스펙트럼을 구합니다. 구한 주파수 스펙트럼은 matplotlib을 사용하여 플롯으로 나타냅니다.

주파수 대역 나누기

주파수 대역을 나누는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 특정 주파수 구간의 신호를 제거하는 것입니다. 예를 들어, 특정 주파수 대역의 신호를 제거하면 해당 주파수 범위의 음향이 들리지 않게 됩니다. 아래의 코드는 파이썬을 사용하여 주파수 대역을 나누는 예제입니다.

import numpy as np
from scipy.io import wavfile

# WAV 파일 로드
sample_rate, data = wavfile.read('audio.wav')

# FFT 수행
fft_data = np.fft.fft(data)

# 주파수 대역 나누기
start_freq = 1000  # 시작 주파수
end_freq = 5000    # 끝 주파수

fft_data[start_freq:end_freq] = 0

# IFFT 수행
filtered_data = np.fft.ifft(fft_data).real

# 필터링된 WAV 파일 저장
wavfile.write('filtered_audio.wav', sample_rate, filtered_data.astype(np.int16))

위의 코드는 WAV 파일을 wavfile 모듈을 사용하여 로드한 뒤, FFT를 수행하여 주파수 스펙트럼을 구합니다. 그리고 주파수 대역을 지정하여 해당 구간의 신호를 제거합니다. 마지막으로 IFFT(역 고속 푸리에 변환)를 수행하여 필터링된 음향 데이터를 얻고, WAV 파일로 저장합니다.

결론

파이썬을 사용하여 음향 신호의 주파수 대역을 나누는 방법에 대해 알아보았습니다. FFT를 사용하여 주파수 스펙트럼을 분석하고, 주파수 대역을 제거하여 필터링된 음향 신호를 얻을 수 있습니다. 이러한 작업을 통해 음향 신호 처리에 다양한 응용을 할 수 있습니다.


참고 자료: