In mathematics and signal processing, the constant-Q transform transforms a data series to the frequency domain. It is related to the Fourier transform and very closely related to the complex Morlet wavelet transform. The transform can be thought of as a series of filters fk, logarithmically spaced in frequency, with the k-th filter having a spectral widthδfkequal to a multiple of the previous filter's width: where δfk is the bandwidth of the k-th filter, fmin is the central frequency of the lowest filter, and n is the number of filters per octave.
Calculation
The short-time Fourier transform of x for a frame shifted to sample m is calculated as follows: Given a data series sampled at fs = 1/T, T being the sampling period of our data, for each frequency bin we can define the following:
Filter width, δfk.
Q, the "quality factor":
Window length for the k-th bin:
The equivalent transform kernel can be found by using the following substitutions:
The window length of each bin is now a function of the bin number:
The relative power of each bin will decrease at higher frequencies, as these sum over fewer terms. To compensate for this, we normalize by N.
Any windowing function will be a function of window length, and likewise a function of window number. For example, the equivalent Hamming window would be
Our digital frequency,, becomes.
After these modifications, we are left with
Fast calculation
The direct calculation of the constant-Q transform is slow when compared against the fast Fourier transform. However, the FFT can itself be employed, in conjunction with the use of a kernel, to perform the equivalent calculation but much faster. An approximate inverse to such an implementation was proposed in 2006; it works by going back to the DFT, and is only suitable for pitch instruments. A development on this method with improved invertibility involves performing CQT octave-by-octave, using lowpass filtered and downsampled results for consecutively lower pitches. Implementations of this method include the MATLAB implementation and LibROSA's Python implementation. LibROSA combines the subsampled method with the direct FFT method by having the latter process higher frequencies as a whole.
Comparison with the Fourier transform
In general, the transform is well suited to musical data, and this can be seen in some of its advantages compared to the fast Fourier transform. As the output of the transform is effectively amplitude/phase against log frequency, fewer frequency bins are required to cover a given range effectively, and this proves useful where frequencies span several octaves. As the range of human hearing covers approximately ten octaves from 20 Hz to around 20 kHz, this reduction in output data is significant. The transform exhibits a reduction in frequency resolution with higher frequency bins, which is desirable for auditory applications. The transform mirrors the human auditory system, whereby at lower-frequencies spectral resolution is better, whereas temporal resolution improves at higher frequencies. At the bottom of the piano scale, a difference of 1 semitone is a difference of approximately 1.5 Hz, whereas at the top of the musical scale, a difference of 1 semitone is a difference of approximately 200 Hz. So for musical data the exponential frequency resolution of constant-Q transform is ideal. In addition, the harmonics of musical notes form a pattern characteristic of the timbre of the instrument in this transform. Assuming the same relative strengths of each harmonic, as the fundamental frequency changes, the relative position of these harmonics remains constant. This can make identification of instruments much easier. The constant Q transform can also be used for automatic recognition of musical keys based on accumulated chroma content. Relative to the Fourier transform, implementation of this transform is more tricky. This is due to the varying number of samples used in the calculation of each frequency bin, which also affects the length of any windowing function implemented. Also note that because the frequency scale is logarithmic, there is no true zero-frequency / DC term present, which may in some cases be a drawback.