[파이썬] 음성 데이터의 주파수 분석과 스펙트로그램

음성 데이터는 효과적으로 분석하고 이해하기 위해 주파수 분석을 수행해야 합니다. 주파수 분석은 음성 신호의 주파수 성분을 파악하고 시간 동안의 주파수 정보를 시각화하는 데 도움을 줍니다. 이를 위해 파이썬의 사운드 처리 라이브러리와 스펙트로그램을 생성하는 라이브러리를 사용할 수 있습니다.

주파수 분석을 위한 사운드 처리 라이브러리

일반적으로 파이썬에서 음성 데이터를 처리하기 위해 사용되는 사운드 처리 라이브러리 중 하나는 librosa입니다. librosa는 음성 신호 분석 및 변환을 위한 강력한 도구를 제공합니다.

먼저, librosa를 설치해야 합니다. 아래의 명령을 사용하여 librosa를 설치하세요:

pip install librosa

주파수 분석

아래 예제 코드는 주파수 분석을 위해 librosa를 사용하는 방법을 보여줍니다.

import librosa
import numpy as np
import matplotlib.pyplot as plt

# 음성 파일 로드
audio_path = 'audio.wav'
audio, sr = librosa.load(audio_path)

# 주파수 변환
fft = np.fft.fft(audio)
magnitude = np.abs(fft)
frequency = np.linspace(0, sr, len(magnitude))

# 주파수 성분 시각화
plt.plot(frequency, magnitude)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Frequency Spectrum')
plt.show()

위 코드는 주어진 음성 파일(audio.wav)을 로드하고 이를 주파수 도메인으로 변환합니다. 주파수 성분은 FFT(Fast Fourier Transform)을 사용하여 계산되고, 결과는 주파수에 따른 크기로 표시됩니다. 이를 위해 numpymatplotlib 라이브러리도 사용됩니다.

스펙트로그램 생성

스펙트로그램은 주파수에 따른 시간의 변화를 표시하는 데 사용되는 시각화 도구입니다. 스펙트로그램을 생성하기 위해서는 librosastft 함수를 사용해야 합니다.

아래 예제 코드는 스펙트로그램을 생성하는 방법을 보여줍니다.

import librosa
import librosa.display
import matplotlib.pyplot as plt

# 음성 파일 로드
audio_path = 'audio.wav'
audio, sr = librosa.load(audio_path)

# 스펙트로그램 생성
stft = librosa.stft(audio)
spectrogram = librosa.amplitude_to_db(np.abs(stft))

# 스펙트로그램 시각화
librosa.display.specshow(spectrogram, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.show()

위 코드는 음성 파일을 로드하고, librosastft 함수를 사용하여 스펙트로그램을 생성합니다. 스펙트로그램은 dB 단위로 표현된 음성 신호의 진폭을 표시합니다. 이를 위해 librosa.display.specshow 함수와 matplotlib 라이브러리가 사용됩니다.

결론

음성 데이터의 주파수 분석과 스펙트로그램은 음성 신호를 분석하고 시각화하는 데 중요한 도구입니다. 파이썬의 librosa 라이브러리는 이러한 작업을 위한 많은 도구와 기능을 제공합니다. 위에서 소개된 예제 코드를 사용하여 음성 데이터의 주파수 성분과 시간별 스펙트로그램을 쉽게 생성할 수 있습니다.