음성 인식 분야를 공부하며 Spectrum(스펙트럼)과 Cepstrum(켑스트럼)이라는 개념을 자주 접하게 된다. 두 개념은 모두 시간 영역(time domain)의 신호를 주파수 기반으로 분석하는 도구이지만, 처리 방식과 해석의 초점이 다르다.
- Spectrum: 신호의 주파수 구성 성분을 보는 방법
- Cepstrum: 주파수 구조 내부의 반복 패턴을 분석하는 방법
이 글에서는 두 개념을 쉽게 비교하고, 음성 신호 처리에서 어떤 역할을 수행하는지 설명하려 한다.
Spectrum(스펙트럼)
Spectrum은 신호의 주파수 성분을 나타낸 것이다. 즉, 어떤 신호가 어떤 주파수로 구성되어 있는지를 보여주는 것이다. 시간 영역의 신호 \( x(t) \) 또는 이산 신호 \( x[n] \)에 대해, 푸리에 변환(Fourier Transform)을 수행하면 다음과 같이 주파수 영역 신호 \( X(f) \)를 얻게 된다.
$$ X(f) = \int_{-\infty}^{\infty} x(t) e^{-j 2\pi f t} dt $$
혹은 이산 푸리에 변환(DFT)을 사용할 경우는 다음과 같다.
$$ X[k] = \sum_{n=0}^{N-1} x[n] e^{-j \frac{2\pi}{N}kn} $$
- \( |X(f)| \): 진폭 스펙트럼(얼마나 강한 주파수인지)
- \( \text{arg(X(f))} \): 위상 스펙트럼(어느 시점에 도달하는지)
스펙트럼은 일반적으로 음성의 주된 구성 성분(포먼트, 기본 주파수 등)을 분석할 때 사용한다.
Cepstrum(켑스트럼)
Cepstrum은 Spectrum의 철자를 일부러 거꾸로 만든 단어로, 정의 자체도 스펙트럼의 로그를 다시 푸리에 변환한 것이다.
1단계 (STEP 1): 시간 영역 → 주파수 영역 (FFT)
$$ X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j \frac{2\pi}{N}kn} = \text{DFT}(x[n]) $$
- 먼저 시간 영역의 신호에 고속 푸리에 변환(FFT: Fast Fourier Transform)을 적용하여, 시간 데이터를 주파수 데이터로 변환한다.
2단계 (STEP 2): 진폭 → 로그 스펙트럼 변환
$$ \log |X[k]|, \quad \text{위상 성분 제거} $$
$$ \log_{10} |X[k]| $$
- 주파수 영역으로 변환된 후, FFT 결과에서 위상(phase) 성분을 제거하고, 진폭(amplitude) 정보에 로그(\( log_{10} \))를 취한다.
- 이 과정은 신호의 다이내믹 레인지(dynamic range)를 줄여주며, 노이즈와 신호 간의 진폭 차이로 인해 가려질 수 있는 조화 성분(harmonics)을 더 잘 드러나게 해준다.
- 즉, 로그 압축을 통해 미약한 주기 성분도 부각된다.
3단계 (STEP 3): 주파수 영역 → 퀘프런시 영역 (IFFT)
$$ c[n] = \sum_{k=0}^{N-1} \log |X[k]| \cdot e^{j \frac{2\pi}{N}kn} = \text{IDFT} \left( \log |X[k]| \right) $$
- 이제 로그를 취한 주파수 신호에 역 푸리에 변환(Inverse Fourier Transform)을 적용하여 이를 퀘프런시(quefrency) 영역으로 변환한다.
- 수학적으로는 푸리에 변환의 역과 동일한 연산이지만, 방향이 반대이므로 위상 성분이 역으로 회전한다.
- 보통 IFFT는 주파수 영역 데이터를 다시 시간 영역으로 복원하지만, 여기서는 진폭만 유지하고 로그를 적용한 후 IFFT를 수행하기 때문에 시간 영역이 아닌 퀘프런시 영역으로 이동하게 된다.
- 즉, 푸리에 변환의 출력에 다시 역 푸리에 변환을 수행하는 구조이기 때문에 켑스트럼(cepstrum)은 종종 스펙트럼의 스펙트럼이라고 불린다.
퀘프런시(Quefrency)란 켑스트럼(Cepstrum)에서 정의되는 가상의 단위로, 시간(Time)과 주파수(Frequency)라는 말을 뒤집어 만든 단어이다. 예를 들어 신호에 주기적인 패턴(예: 사람의 음성에서 피치)이 있다면 다음과 같이 나타난다.
- 스펙트럼에선 배음 구조(harmonics)로 나타남
- 켑스트럼에선 이 구조가 하나의 봉우리(peak)로 나타남
여기서 봉우리가 위치한 점이 Quefrency 값이다.
다시 돌아와 위 3단계의 과정은 Discrete Cepstrum에 대한 계산 과정이며 최종적으로 도출되는 수식은 다음과 같다.
$$ c[n] = \text{IDFT} \left( \log \left| \text{DFT}(x[n]) \right| \right) $$
- \( \mathcal{F} \): 푸리에 변환(Fourier Transform)
- \( \mathcal{F}^{-1} \): 역 푸리에 변환(Inverse Fourier Transform)
추가적으로 아날로그 정의는 다음과 같다.
$$ \text{Cepstrum} = \mathcal{F}^{-1} \left( \log |\mathcal{F}\{x(t)\}| \right) $$
음성 처리에서의 Cepstrum은 다음과 같이 활용할 수 있다.
- Source-Filter 모델 분석
- 음성을 음원(Source) + 공명 필터(Filter)로 분해할 수 있다.
- 켑스트럼에서 저역수는 필터(포먼트), 고역수는 음원(피치 등)을 나타낸다. - 음성 인식 전처리 (MFCC)
- MFCC(Mel-Frequency Cepstral Coefficient)는 멜 스케일로 스펙트럼을 변형한 후 켑스트럼 계수를 추출한다.
- 음향 모델의 입력으로 널리 사용된다. - 피치 추정
- 반복적인 구조(예: 음성의 기본 주기)를 quefrency 영역에서 분석하면 피치 추정이 가능하다.
관련 포스팅
2025.04.08 - [Data Science/SR & VC] - 푸리에 급수(Fourier Series)와 푸리에 계수(Fourier Coefficient)
2025.04.08 - [Data Science/SR & VC] - 오일러 공식(Euler's Formula)과 푸리에 변환(Fourier Transform)
참고 자료
https://ccrma.stanford.edu/~jos/sasp/Spectral_Envelope_Cepstral_Windowing.html
https://community.sw.siemens.com/s/article/Cepstrum-Analysis
https://blog.naver.com/yeominrock/167235723