# Visualize the STFT
n_fft = 2048
# Librosa default is n_fft // 4
hop_length = 512
fig, axs = plt.subplots(5, 2, figsize=(20,20))
index = 0
n_s = 4
for col in range(2):
for row in range(5):
audio_file, sample_rate = librosa.load(audio_samples[index])
stft = librosa.stft(audio_file, n_fft, hop_length) # STFT of y
S_db = librosa.amplitude_to_db(np.abs(stft), ref=np.max)
librosa.display.specshow(S_db,
sr=n_fft,
hop_length=hop_length,
x_axis="time",
y_axis='log',
ax=axs[row][col])
axs[row][col].set_title('{}'.format(labels[index]))
index += 1
fig.tight_layout()
n_fft
와hop_length
는 오디오 신호 분석을 위한 매개변수입니다.
n_fft
는 STFT(short-time Fourier transform)에 사용되는 FFT(fast Fourier transform)의 크기를 결정합니다. FFT는 주어진 시간 동안 입력 오디오 신호를 작은 시간 구간으로 나누어서 각 구간에서 주파수 변화를 추출합니다. 이 구간의 크기가n_fft
로 결정됩니다. 작은 구간을 사용하면 더 높은 분해능을 얻을 수 있지만 계산 비용이 더 많이 듭니다.
hop_length
는 STFT에서 사용되는 두 연속 구간 사이의 샘플 수입니다. 따라서 이 값은 FFT 윈도우를 겹치게 만듭니다. 이 값이 작을수록 주파수와 시간 분해능이 더 높아집니다. 또한 STFT 계산에 필요한 시간도 증가하게 됩니다.
따라서,n_fft
와hop_length
를 적절히 선택하면 시간 및 주파수 분해능과 계산 효율성을 균형있게 유지할 수 있습니다.
보통
hop_length
를n_fft
의 1/4로 설정하는 이유는 오디오 분석에서 사용되는 일반적인 설정입니다.
n_fft
는 STFT에서 FFT 크기를 결정하는 매개변수입니다. 큰n_fft
값은 더 많은 주파수 해상도를 제공하지만 더 많은 계산이 필요합니다. 따라서, 작은n_fft
값을 선택하면 계산 비용을 줄일 수 있습니다.
hop_length
는 STFT에서 연속 구간 사이의 샘플 수입니다. 작은hop_length
값을 사용하면 더 높은 시간 해상도를 제공합니다. 따라서 오디오 신호를 더 자세하게 분석할 수 있습니다.
일반적으로hop_length
를n_fft
의 1/4로 설정하면 FFT 윈도우가 겹치는 정도가 75%로 설정되므로 STFT에서 시간 및 주파수 분해능을 균형있게 유지할 수 있습니다. 이러한 설정은 오디오 신호 분석에서 일반적으로 사용되며, 계산 효율성과 분석 결과의 정확도 사이의 균형을 잡을 수 있습니다.
STFT, Mel-Spectrogram, MFCCs는 모두 음성 신호 처리에서 많이 사용되는 시계열 데이터 분석 방법입니다. 각 방법은 음성 신호를 주파수 영역으로 변환하여 분석하는데, 다음과 같은 특징과 차이점을 가지고 있습니다.
- STFT(Short-Time Fourier Transform)
- 시간-주파수 영역으로 음성 신호를 분해
- 시간이 짧은 구간에 대한 주파수 변화를 파악할 수 있음
- 주파수 해상도와 시간 해상도를 동시에 조절 가능
- 일반적으로 Mel-Spectrogram, MFCCs 생성에 기반
- Mel-Spectrogram
- STFT로 얻은 주파수 정보를 Mel-scale로 변환한 후, 각 구간의 파워(power)를 측정하여 Spectrogram 생성
- Mel-scale은 인간의 청각 특성에 가까운 스케일
- 주파수의 상대적인 크기를 측정할 수 있음
- MFCCs(Mel-frequency cepstral coefficients)
- Mel-Spectrogram에서 추출된 주파수 정보를 바탕으로 MFCCs 계산
- 음성 신호에서의 구성요소를 추출하기 위한 방법 중 하나
- Mel-Spectrogram에서 계산된 에너지를 로그함수를 취한 후, DCT(Discrete Cosine Transform)를 통해 계수 추출
- 계수는 음성 신호의 구성요소와 관련이 있는데, 낮은 계수일수록 저주파 구성요소를, 높은 계수일수록 고주파 구성요소를 나타냄
따라서, 각 방법은 다음과 같은 차이점을 가지고 있습니다.
- STFT: 시간-주파수 영역으로 변환하여 주파수 해상도와 시간 해상도를 동시에 조절 가능
- Mel-Spectrogram: Mel-scale로 주파수를 변환하여 상대적인 크기를 측정
- MFCCs: Mel-Spectrogram에서 계산된 에너지를 로그함수를 취하고 DCT를 적용하여 저주파와 고주파 구성요소를 추출하여 특성 추출