Skip to content

sig.cepstrum

Olivier Lartillot edited this page Jan 6, 2018 · 4 revisions

Spectral analysis of a spectrum distribution. Based on an Inverse Fourier transform (IFT) of the logarithm of the estimated spectrum of a signal.

  • We compute the complex FFT (Xk in the equation defining 'sig.spectrum')
  • A logarithm is performed in order to allow an additive separability of product components of the original spectrum. For instance, for the voice in particular, the spectrum is composed of a product of a vocal cord elementary burst, their echoes, and the vocal track. In the logarithm representations, these components are now added one to each other, and we will then be able to detect the periodic signal as one of the components.

  • Then because the logarithm provokes some modification of the phase, it is important to ensure that the phase remains continuous.

  • Finally the second Fourier transform is performed in order to find the periodic sequences. As it is sometime a little difficult to conceive what a Fourier transform of Fourier transform is really about, we can simply say, as most say, that it is in fact an Inverse Fourier Transform (as it is the same thing, after all), and the results can then be expressed in a kind of temporal domain, with unit called “quefrency”.

For instance for this spectrum:

we obtain the following cepstrum:

The cepstrum can also be computed from the spectrum amplitude only, by simply taking the logarithm, and directly computing the Fourier transform.

In this case, the phase of the spectrum is not computed.

Flowchart Interconnections

sig.cepstrum accepts either:

  • sig.spectrum objects, or
  • sig.signal objects (same as for 'sig.spectrum'),
  • file name(s) or the 'Folder' keyword.

Frame decomposition

sig.cepstrum(…,'Frame',…) performs first a frame decomposition, with by default a frame length of 50 ms and half overlapping. For the specification of other frame configuration using additional parameters, cf. the previous SigFrame vs. 'Frame' section.

Parameter specifications

  • sig.cepstrum(…,'Freq'): The results can be represented, instead of using the quefrency domain (in seconds), back to the frequency domain (in Hz) by taking the inverse of each abscissae value. In this frequency representation, each peak is located on a position that directly in dicates the associated fundamental frequency.

  • sig.cepstrum(…,'Min',min) specifies the lowest delay taken into consideration, in seconds. Default value: 0.0002 s (corresponding to a maximum frequency of 5 kHz). This default value is not set to 0 s in order to exclude the very high peaks confined in the lowest quefrency region: these high peaks seem to come from the fact that the spectrum is a non-centered signal, thus with high (quasi-)stationary energy. However, the value can be forced to 0 using this 'Min' option.

  • sig.cepstrum(…,'Max',max) specifies the highest delay taken into consideration, in seconds. Default value: 0.05 s (corresponding to a minimum frequency of 20 Hz). This default value is not set to Inf in order to exclude the very high peaks confined in the highest quefrency region: these high peaks seem to come from the fact that the spectrum is a highly variable signal, thus with high energy on its highest frequencies. However, the value can be forced to Inf using this 'Max' option.

  • sig.cepstrum(…,'Complex') computes the cepstrum using the complex spectrum. By default, the cepstrum is computed from the spectrum amplitude only.

Accessible Output

Accessible using the get method.

  • 'Phase': the phase associated to each bin (only if 'Complex' option is used)

  • To obtain the frequency or quefrency values associated to each bin, we recommend using 'Xdata', and using also 'Xname' to check if those values are of type 'Frequency' or 'Quefrency'

Clone this wiki locally