7-6 Frequency-domain: Cepstrum

另一個在頻域上的音高追蹤的方法,則是使用「倒頻譜」(Cepstrum),其定義是 $$ cepstrum = |ifft(log(|fft(frame)|))| $$ 倒頻譜的物理意義,可用下圖說明:

典型的範例如下:

因此,只要使用 high-pass liftering,就可以把在 low quefrency 部分拿掉,凸顯高點,就可以抓出基頻的位置。

在下面這個範例,我們對一個音框進行倒頻譜的計算:

Example 1: frame2ceps01.mwaveFile='soo.wav'; au=myAudioRead(waveFile); startIndex=15000; frameSize=round(32*au.fs/1000); % 32 ms frame=au.signal(startIndex:startIndex+frameSize-1); zeroPaddedFactor=15; ceps=frame2ceps(frame, au.fs, zeroPaddedFactor, 1);

Then we can use the following example for pitch tracking using cepstrum:

Example 2: ptByCeps01.mwaveFile='soo.wav'; opt=pitchTrackBasic('defaultOpt'); opt.frame2pitchOpt.pdf='ceps'; showPlot=1; pitch=pitchTrackBasic(waveFile, opt, showPlot);


Audio Signal Processing and Recognition (音訊處理與辨識)