[TIL] Audio data Representation

wandajeong·2023년 5월 8일
1

TIL with chatGPT

목록 보기
2/5
# 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()

1. n_fft와 hop_length가 무엇을 의미하지?

n_ffthop_length는 오디오 신호 분석을 위한 매개변수입니다.
n_fft는 STFT(short-time Fourier transform)에 사용되는 FFT(fast Fourier transform)의 크기를 결정합니다. FFT는 주어진 시간 동안 입력 오디오 신호를 작은 시간 구간으로 나누어서 각 구간에서 주파수 변화를 추출합니다. 이 구간의 크기가 n_fft로 결정됩니다. 작은 구간을 사용하면 더 높은 분해능을 얻을 수 있지만 계산 비용이 더 많이 듭니다.
hop_length는 STFT에서 사용되는 두 연속 구간 사이의 샘플 수입니다. 따라서 이 값은 FFT 윈도우를 겹치게 만듭니다. 이 값이 작을수록 주파수와 시간 분해능이 더 높아집니다. 또한 STFT 계산에 필요한 시간도 증가하게 됩니다.
따라서, n_ffthop_length를 적절히 선택하면 시간 및 주파수 분해능과 계산 효율성을 균형있게 유지할 수 있습니다.

2. 보통 hop_length를 n_fft의 1/4로 설정하는 이유는?

보통 hop_lengthn_fft의 1/4로 설정하는 이유는 오디오 분석에서 사용되는 일반적인 설정입니다.
n_fft는 STFT에서 FFT 크기를 결정하는 매개변수입니다. 큰 n_fft 값은 더 많은 주파수 해상도를 제공하지만 더 많은 계산이 필요합니다. 따라서, 작은 n_fft값을 선택하면 계산 비용을 줄일 수 있습니다.
hop_length는 STFT에서 연속 구간 사이의 샘플 수입니다. 작은 hop_length값을 사용하면 더 높은 시간 해상도를 제공합니다. 따라서 오디오 신호를 더 자세하게 분석할 수 있습니다.
일반적으로 hop_lengthn_fft의 1/4로 설정하면 FFT 윈도우가 겹치는 정도가 75%로 설정되므로 STFT에서 시간 및 주파수 분해능을 균형있게 유지할 수 있습니다. 이러한 설정은 오디오 신호 분석에서 일반적으로 사용되며, 계산 효율성과 분석 결과의 정확도 사이의 균형을 잡을 수 있습니다.

3. STFT, Mel-Spectogram, MFCCs의 특징과 차이점을 알려줘

STFT, Mel-Spectrogram, MFCCs는 모두 음성 신호 처리에서 많이 사용되는 시계열 데이터 분석 방법입니다. 각 방법은 음성 신호를 주파수 영역으로 변환하여 분석하는데, 다음과 같은 특징과 차이점을 가지고 있습니다.

  1. STFT(Short-Time Fourier Transform)
  • 시간-주파수 영역으로 음성 신호를 분해
  • 시간이 짧은 구간에 대한 주파수 변화를 파악할 수 있음
  • 주파수 해상도와 시간 해상도를 동시에 조절 가능
  • 일반적으로 Mel-Spectrogram, MFCCs 생성에 기반
  1. Mel-Spectrogram
  • STFT로 얻은 주파수 정보를 Mel-scale로 변환한 후, 각 구간의 파워(power)를 측정하여 Spectrogram 생성
  • Mel-scale은 인간의 청각 특성에 가까운 스케일
  • 주파수의 상대적인 크기를 측정할 수 있음
  1. MFCCs(Mel-frequency cepstral coefficients)
  • Mel-Spectrogram에서 추출된 주파수 정보를 바탕으로 MFCCs 계산
  • 음성 신호에서의 구성요소를 추출하기 위한 방법 중 하나
  • Mel-Spectrogram에서 계산된 에너지를 로그함수를 취한 후, DCT(Discrete Cosine Transform)를 통해 계수 추출
  • 계수는 음성 신호의 구성요소와 관련이 있는데, 낮은 계수일수록 저주파 구성요소를, 높은 계수일수록 고주파 구성요소를 나타냄

따라서, 각 방법은 다음과 같은 차이점을 가지고 있습니다.

  • STFT: 시간-주파수 영역으로 변환하여 주파수 해상도와 시간 해상도를 동시에 조절 가능
  • Mel-Spectrogram: Mel-scale로 주파수를 변환하여 상대적인 크기를 측정
  • MFCCs: Mel-Spectrogram에서 계산된 에너지를 로그함수를 취하고 DCT를 적용하여 저주파와 고주파 구성요소를 추출하여 특성 추출
profile
ML/DL swimmer

0개의 댓글