Constant-Q transform

From Hydrogenaudio Knowledgebase
Jump to: navigation, search
A constant-Q spectrogram. Notice that lower frequencies (the bottom part) having horizontal/time-axis blur.
In comparison, the constant-bandwidth version of Goertzel algorithm spectrogram have same time-axis blur for all frequencies (vertical slices), but it is blurrier in vertical axis at bottom part of the spectrogram.

Constant-Q and variable-Q transforms (CQT/VQT) are spectral analysis algorithms that usually have logarithmic frequency spacing and time/frequency resolution following octave series. Due to its usually logarithmic frequency resolution, it is suited for musical representation.


Usually, the FFT are linearly-spaced in frequency and are constant-bandwidth, which is better suited for perfect reconstruction, however, due to the fact musical notes are logarithmically-spaced and how auditory perception works, the FFT is not suited for anything musical even though it is used in some RTA analyzers.

The constant-Q transform can be constructed using multi-band Goertzel algorithm with each one has its own window size; lower frequencies have larger window size and vice versa, and with logarithmic frequency spacing (a 120-band Goertzels covering 20Hz-20kHz range and each band corresponds to musical notes). However, while the auditory perception are non-linear, it is not exactly logarithmic as the pitch perception is linear and constant-bandwidth at bass region.[1]

Variable-Q transform have benefits of better temporal resolution at lower frequencies (albeit with slightly bad frequency resolution at lower frequencies), just like traditional STFT while having pseudo-logarithmic resolution at higher frequencies.
In comparison, the CQT version have poor time resolution on lower frequencies but it has sharper frequency-axis resolution than VQT version.

Additionally, the gamma parameter can be used to gradually reduce the Q factor for lower frequencies to improve temporal resolution for that region. Alternatively, the band spacing can be set to perceptual frequency scales like Mel and Bark but it works best when the bandwidth is set according to abs(high - low) for each band. Either way, this becomes a variable-Q transform.[2]

Although FFT itself can be used in conjunction with frequency-domain kernels, calculating a CQT directly is slow even with Goertzel algorithm unless a sliding DFT is used.


  1. Christian Schörkhuber, Anssi Klapuri, Nicki Holighaus, Monika Dörfler (2014). A Matlab Toolbox for Efficient Perfect Reconstruction Time-Frequency Transforms with Log-Frequency Resolution.
  2. Filip ZAPLATA, Miroslav KASAL (2015). Efficient Spectral Power Estimation on an Arbitrary Frequency Scale.

List of audio applications that uses CQT