[파이썬] 음성 데이터의 스펙트럼 분석과 메르스펙트로그램

음성 데이터 분석은 음성 신호의 주파수 구성을 이해하고 특징을 추출하는 중요한 과정입니다. 스펙트럼 분석은 음성 신호를 주파수 도메인으로 변환하여 주파수 성분을 시각화하는 방법 중 하나입니다. 이 글에서는 파이썬을 사용하여 음성 데이터의 스펙트럼 분석과 메르스펙트로그램을 만드는 방법에 대해 알아보겠습니다.

스펙트럼 분석

파이썬에서 음성 데이터의 스펙트럼 분석을 수행하는 데에는 다양한 라이브러리가 존재합니다. 그 중에서 numpymatplotlib을 사용하여 간단한 스펙트럼 분석을 수행해보겠습니다.

import numpy as np
import matplotlib.pyplot as plt

# 음성 데이터를 불러온다.
audio_data = np.loadtxt('audio_data.txt')

# FFT를 적용하여 스펙트럼을 얻는다.
spectrum = np.fft.fft(audio_data)

# 주파수 영역을 생성한다.
freq = np.fft.fftfreq(len(audio_data))

# 스펙트럼을 그래프로 표현한다.
plt.plot(freq, np.abs(spectrum))
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.title('Spectrum Analysis')
plt.show()

위 코드는 audio_data.txt 파일에서 음성 데이터를 불러와 FFT를 적용하여 스펙트럼을 얻는 과정입니다. np.fft.fftfreq 함수를 사용하여 주파수 영역을 생성하고, plt.plot 함수를 사용하여 스펙트럼을 그래프로 표현합니다.

메르스펙트로그램

메르스펙트로그램은 음성 데이터의 주파수 내용을 시간에 따라 시각화하는 방법입니다. 파이썬에서는 librosa 라이브러리를 사용하여 메르스펙트로그램을 생성할 수 있습니다.

import librosa
import librosa.display

# 음성 데이터를 로드한다.
audio_data, sr = librosa.load('audio_data.wav')

# 메르스펙트로그램을 계산한다.
mel_spec = librosa.feature.melspectrogram(y=audio_data, sr=sr)

# 메르스펙트로그램을 그래프로 표현한다.
librosa.display.specshow(librosa.power_to_db(mel_spec, ref=np.max), y_axis='mel', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Mel Spectrogram')
plt.show()

위 코드는 audio_data.wav 파일에서 음성 데이터를 로드하고, librosa.feature.melspectrogram 함수를 사용하여 메르스펙트로그램을 계산하는 과정입니다. librosa.display.specshow 함수를 사용하여 메르스펙트로그램을 그래프로 표현하고, plt.colorbar 함수를 사용하여 색상 막대로 dB 값을 표시합니다.

결론

음성 데이터의 스펙트럼 분석과 메르스펙트로그램을 만드는 방법에 대해 알아보았습니다. 파이썬을 사용하여 간단하게 스펙트럼 분석과 메르스펙트로그램을 수행할 수 있으며, 이를 통해 음성 데이터의 주파수 특성을 더 잘 이해하고 활용할 수 있습니다.