Fast Octave Filter Banks

Let's now apply the above technique to the design of an octave filter
bank.^{11.19} At
first sight, this appears to be a natural fit, because it is
immediately easy to partition a power of 2 (typical for the FFT size
`N`) into octaves, each having a width in bins that is a power of 2. For
example, when `N == 8`, we have the following stack of
frequency-response vectors for the rectangular-window, no-zero-padding,
complex-signal case:

H = [ ... 0 0 0 0 1 1 1 1 ; ... 0 0 1 1 0 0 0 0 ; ... 0 1 0 0 0 0 0 0 ; ... 1 0 0 0 0 0 0 0 ];Figure 10.31 depicts the resulting filter bank schematically in the frequency domain.

A schematic of the filter-bank implementation using FFTs is shown in
Fig.10.30. The division by `N` called for by `ifft(N)` is often
spread out among the `ifft` butterfly stages as divisions by 2
(one-bit right-shifts in fixed-point arithmetic) after each of them.
For conservation of dynamic range, half of the right-shifts can be
spread out among every other forward-FFT butterfly stage [28]
as well.

The simple spectral partitioning of Fig.10.31 is
appropriate for *complex* signals--those for which the spectrum
is regarded as spanning 0 Hz to the sampling rate. For real signals,
we need a spectral partition more like that in
Fig.10.32.

Unfortunately, the number of spectral samples in Fig.10.32 is 14--not a power of 2. (The previous length 8 complex case maps to length 14 real case because the dc and Nyquist-limit samples do not have complex-conjugate counterparts.) Discarding the sample at the Nyquist limit--number 8 in Fig.10.32--does not help, since that gives 13 samples--still not a power of 2. In summary, there is no obvious way to octave-partition the spectral samples of a real signal while maintaining the power-of-2 condition for each band and symmetrically partitioning positive and negative frequencies.

A real signal can of course be converted to its corresponding
``analytic signal'' by filtering out the negative-frequency
components. This is normally done by designing a *Hilbert
transform filter* [133,223].
However, such filters are large-order FIR filters, exactly like we are
trying to design! If we design our filter bank properly, we can use
*it* to zero the negative-frequency components.

[How to cite this work] [Order a printed hardcopy] [Comment on this page via email]

[Lecture Video] [Exercises] [Examination]

Copyright ©

Center for Computer Research in Music and Acoustics (CCRMA), Stanford University