# Filter bank
A **filter bank** is an array of band-pass [[Filter_(signal_processing)|filters]] that splits an input signal into a set of narrower sub-band signals, each carrying a different slice of the original spectrum. Splitting a signal this way is called analysis, and reassembling the sub-bands back into a single signal is called synthesis; the two together let each band be examined, coded or altered on its own before the whole is put back together, a structure common to a [[Signal_processing|signal-processing]] chain wherever different parts of a spectrum call for different treatment.
The everyday example is a graphic equaliser, which splits audio into bands, lets each one's level be raised or lowered independently, and adds the bands back together into a modified version of the original. Digital filter banks generalise the same idea to speech and [[Image_compression|image]] coding, to [[MP3]] and other [[Data_compression|data-compression]] formats, and to communications, where the same analysis-and-synthesis structure demodulates or modulates several channels of a link at once.
A filter bank reproduces its input exactly, a property called perfect reconstruction, only when its bands overlap in a particular way: the power leaving every band, summed back together, must equal the power that went in at every frequency, so that no gap and no double-counted overlap survives the round trip. Choosing how much the bands overlap is therefore not a matter of taste but the central [[Filter_design|design]] trade-off the rest of this article works through.
The article's primary microsim, *Filter bank*, splits a signal into an adjustable number of overlapping bands, lets the reader raise or lower each one like the sliders on a graphic equaliser, and plots the composite response the bands add up to, so that perfect reconstruction is something the reader can see rather than take on faith.
## FFT filter banks
An FFT filter bank builds a whole array of narrow, evenly spaced band-pass channels at once by borrowing the fast [[Fast_Fourier_transform|Fourier transform]] rather than running each channel as its own [[Digital_filter|digital filter]]. Every bin of an `N`-point [[Discrete_Fourier_transform|discrete Fourier transform]] is itself the output of a narrow band-pass filter centred at that bin's frequency, spaced `fs/N` apart,[^b100_129] so a sliding [[Short-time_Fourier_transform|short-time Fourier transform]], each frame weighted by an analysis [[Window_function|window]], already is a bank of `N` such channels running in parallel at the cost of one FFT rather than `N` separate convolutions.
The channels this method produces are only as clean as the input's own frequencies line up with the bin centres: a tone exactly on a bin gives one clean line, while a tone between bins leaks across several neighbouring channels at once.[^b100_143] Zero-padding a frame before the transform narrows the bin spacing and so appears to sharpen the channels, but it interpolates the same underlying spectrum rather than adding any new information about the signal.[^b100_144] A single channel, tuned correctly, does exactly what a hand-designed band-pass filter would: from a mixture of tones at 50, 100, 250 and 350 Hz, a channel covering 200 to 300 Hz keeps only the 250 Hz component and discards the rest.[^b057_6568]
## Filter banks as time–frequency distributions
Because a filter bank's channels divide a signal by frequency while the sliding window behind an FFT filter bank divides it by time, the whole set of channel outputs, plotted together against time, is a time–frequency distribution in exactly the sense that a [[Spectrogram|spectrogram]] is one: the squared magnitude of a short-time Fourier transform, read one frame at a time, is nothing but the power leaving each channel of a uniform FFT filter bank. A [[Wavelet_transform|wavelet transform]] builds the same kind of picture with unequal bandwidths instead, wide filters covering high frequencies and narrow ones covering low frequencies, which trades a uniform bank's fixed frequency resolution for one that improves in time wherever it is given up in frequency, and the reverse, rather than fixing both at once the way a single window length does.
The same delay-and-add building block that makes a comb filter, a single delayed copy of a signal added back to itself, illustrates how little it takes to carve a spectrum into bands at all: a delay of 167 microseconds already produces peaks at 0, 6 and 12 kHz and notches at 3, 9 and 15 kHz,[^b057_6570] and a real filter bank simply arranges many such elementary responses, each centred and shaped on purpose, side by side across the spectrum instead of leaving them to fall wherever one delay happens to place them.
## Multirate filter bank
Once a signal has been split into `M` narrower bands, each band's content changes more slowly than the original and can legitimately be [[Sampling_(signal_processing)|re-sampled]] at a lower rate without losing information, typically down to `1/M` of the original rate, since a band whose energy already sits below its new [[Nyquist_frequency|Nyquist frequency]] loses nothing by the reduction. This decimation is what makes a filter bank a genuinely multirate system rather than merely `M` parallel filters, and it is also what makes decimated sub-bands vulnerable to their own [[Aliasing|aliasing]] unless the analysis and synthesis filters, most conveniently designed and checked through their [[Z-transform|Z-transform]], cancel each other's aliasing exactly on the way back up.
### Narrow lowpass filter
A cosine-modulated filter bank, the common way to build a large number of evenly spaced channels cheaply and akin to the cosine modulation behind a [[Discrete_cosine_transform|discrete cosine transform]], generates every band-pass channel by shifting a single [[Low-pass_filter|lowpass]] prototype filter to a different centre frequency, so the whole bank is only as good as that one prototype. A simple, short filter has a wide transition band and leaks between neighbouring channels, illustrated by how little separation a bare two-tap filter already provides, `|H(w_hat)| = 2*|cos(w_hat)|`, a smooth curve with no flat stopband at all;[^b057_7980] a sharp, narrow-transition prototype needs many more [[Finite_impulse_response|taps]], so the length of that one lowpass filter is the main cost of the entire bank.
### Statistically optimized filter bank (Eigen filter bank)
Rather than fixing the channel shapes in advance and hoping they suit whatever signal arrives, a statistically optimized filter bank chooses them to fit a particular signal's own statistics, typically its autocorrelation or power spectrum, so that the bands carrying the most energy or the most predictable structure are given the finest frequency resolution. The channel filters that come out of this optimisation are the eigenvectors of the signal's correlation matrix, which is why the design is also called an eigen filter bank; it can pack more coding gain into a fixed number of bands than any fixed prototype, at the cost of a design that must be recomputed whenever the signal's statistics change.
## Multidimensional filter banks
Splitting a two-dimensional signal such as an image, or a three-dimensional one such as video, into sub-bands follows the same analysis-and-synthesis pattern, but the bands now tile a plane or a volume of frequency rather than a single line, and the channel filters are two- or higher-dimensional functions rather than one-dimensional ones. The most direct construction runs a one-dimensional filter bank along each axis in turn, a separable design that is simple to build and to invert but that treats every direction identically, which is a poor match for images, whose edges and textures run at every angle rather than only horizontally and vertically — the same limitation the [[Discrete_wavelet_transform|discrete wavelet transform]] inherits when it is built the same separable way.
### Perfect reconstruction filter banks
The one-dimensional condition for perfect reconstruction, that the power leaving every band sum back to the power that went in, generalises directly to multiple dimensions, but verifying it is harder: a multidimensional filter bank is usually checked and designed through its polyphase matrix, a compact array that packages every sub-filter's coefficients so that perfect reconstruction becomes a single matrix condition, the multidimensional analogue of the power-complementary sum the sketch on this page draws for the one-dimensional case.
## Multidimensional filter design
Designing a multidimensional filter is harder than the one-dimensional theory suggests, mainly because a polynomial in two or more variables does not factor into simple roots the way a one-variable polynomial does: much of one-dimensional filter design leans on being able to place and move individual poles and zeros, a [[Pole–zero_plot|pole–zero]] freedom that has no clean multidimensional analogue. Practical multidimensional design therefore tends to follow one of two routes: mapping a well-understood one-dimensional prototype into two or more dimensions through a chosen frequency-plane transformation, so that a known good lowpass shape becomes a circular, fan- or diamond-shaped multidimensional one, or specifying the desired multidimensional response directly and searching numerically for filter coefficients that approximate it as closely as a chosen error measure allows. Both routes trade the closed-form guarantees of one-dimensional design for weaker, checked-after-the-fact guarantees, in return for a filter shaped exactly to a multidimensional need no one-dimensional prototype was built for.
## Directional filter banks
A directional filter bank splits a multidimensional spectrum by orientation rather than only by radial frequency, so that each channel keeps the content of an image or a video frame whose edges run in one particular direction and discards the rest. Because a photograph's edges and textures run at every angle, a representation that can isolate the diagonal content near 30 degrees separately from the near-horizontal content captures the structure of natural images far more efficiently than a bank of only horizontal and vertical channels does, which is why directional filter banks sit behind texture analysis and edge-oriented [[Image_compression|image compression]] and [[Digital_image_processing|image-processing]] pipelines that need to treat an edge differently from the smooth region it borders. The channels are usually built as a tree of simple two-way splits, each dividing the surviving band into two directional halves, rather than as one filter per final direction, which keeps the design problem at each stage as simple as a single well-understood two-channel split.
## Filter-bank transceiver
A filter bank runs just as naturally at the two ends of a communications link as it does in audio or image coding: the synthesis side becomes a modulator that packs many narrow-band channels, each carrying its own stream of symbols, into one wideband transmitted signal, and a matching analysis bank at the receiver separates the channels back out. Because a filter bank's channels are shaped to a chosen [[Frequency_response|frequency response]] rather than left as the plain rectangular slices an ordinary multicarrier system uses, a filter-bank transceiver can hold neighbouring channels closer together, with less energy leaking between them, than a scheme that relies on tight time synchronisation to keep its rectangular channels from interfering. This is the idea behind filter-bank multicarrier modulation, studied as an alternative to the cyclic-prefixed schemes most wireless standards use today, since shaped, overlapping channels can pack together with less wasted spectrum at their edges even though they cost more computation than a single large transform does.
## Microsims
The page's primary microsim, *Filter bank*, splits a test signal into an adjustable number of overlapping bands built from raised-cosine bumps in frequency, applies an independent gain to each band, and plots both the individual band responses and their composite sum, the quantity `T(f) = sum_k g_k*|H_k(f)|^2` that a perfectly reconstructing bank holds flat at 1 when every gain is 0 dB. **bands M** sets how many channels split the spectrum, from 3 to 12, default 6; **overlap** sets each band's width as a multiple of the spacing between band centres, from 0.4x to 1.6x, default 1.34x, the knob that pushes the composite sum toward holes, when the bands barely touch, or toward ripples above unity, when they overlap too generously; **gain** raises or lowers the currently selected band by up to 18 dB, played like the sliders of a graphic equaliser and adjustable from the keyboard as well as the mouse; and a **signal** button cycles the test input through a multitone mixture, a bass-and-treble pair, a harmonic stack and an evenly spaced comb of tones.
*Try:* Leave the defaults, 6 bands at 1.34x overlap and every gain at 0 dB, and watch the white composite curve sit flat across the spectrum, the visible signature of perfect reconstruction; then reduce overlap toward 0.4x and watch holes open up between the bands' centres. Return to the default overlap, select a low band and raise its gain to +18 dB: the composite curve now shows a bump instead of a flat line, and the output signal is bass-heavy in exactly the same way turning up the bass knob on a real equaliser would be.
A three.js companion on this page renders the spectrum splitting into parallel channels for analysis, decimation and resynthesis. The sketch above runs live at https://editor.p5js.org/sciencenibber/full/BJF0prIGY and can be forked at https://editor.p5js.org/sciencenibber/sketches/BJF0prIGY .
<!-- SIGSIM:BEGIN g35 — Signal Processing portal microsim (framework build, specs/sims/Filter_bank.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework), pending deploy:** *Filter banks: one spectrum split into parallel channels* will play here once `https://wikitube-3d-microsims.netlify.app/signal/Filter_bank.html` is live.
<!-- pending: <div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/signal/Filter_bank.html" data-title="Filter bank"></div> -->
*Built from `MICROSIM_GUIDE/specs/sims/Filter_bank.json`; part of the [[Signal_processing]] set ([[PORTAL_Signal_Processing]]).*
<!-- SIGSIM:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Filter_bank) : [Wikitube](https://en.wikitube.io/wiki/Filter_bank)
Skeleton mirrored at revision 1362697748. Prose, emphasis and the microsims are Wikitube's own.
## Notes
The sketch is ILLUSTRATIVE: each band is a fixed raised-cosine bump in frequency rather than a filter designed by any of the methods described above, and no decimation or resampling actually occurs, so the multirate behaviour discussed in this article is a property the reader is told about rather than one the sketch demonstrates directly. Page numbers below are PDF pages of the open editions.
## References
[^b100_129]: Tiberius, C.; Mulder, M. *Engineering Signal Analysis: From Fourier to filtering: Theory*. 2026, p. 129 (PDF page): the windowed DFT `x_nT = w_n*x_n` and the bin spacing `df = fs/N = 1/T`, Eqs. 12.1–12.2. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/engineering-signal-analysis-from-fourier-to-filtering-theory . CC BY.
[^b100_143]: Tiberius, C.; Mulder, M. *Engineering Signal Analysis: From Fourier to filtering: Theory*. 2026, pp. 143–144 (PDF pages): Example 12.5, a 4 Hz cosine at 64 samples per second for 1 s falling in a single bin, and a 4.5 Hz cosine leaking across many bins. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/engineering-signal-analysis-from-fourier-to-filtering-theory . CC BY.
[^b100_144]: Tiberius, C.; Mulder, M. *Engineering Signal Analysis: From Fourier to filtering: Theory*. 2026, p. 144 (PDF page): zero-padding narrows the bin spacing but adds no new information about the signal. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/engineering-signal-analysis-from-fourier-to-filtering-theory . CC BY.
[^b057_6568]: Stiber, M.; Stiber, B.; Larson, E. *Signal Computing: Digital Signals in the Software Domain*. 2020, pp. 65–68 (PDF pages): an ideal 200–300 Hz band-pass filter keeps only a 250 Hz tone out of a 50/100/250/350 Hz mixture. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain . CC BY-SA.
[^b057_6570]: Stiber, M.; Stiber, B.; Larson, E. *Signal Computing: Digital Signals in the Software Domain*. 2020, pp. 69–70 (PDF pages): a one-tap delay of 167 µs gives magnitude maxima at 0, 6 and 12 kHz and notches at 3, 9 and 15 kHz. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain . CC BY-SA.
[^b057_7980]: Stiber, M.; Stiber, B.; Larson, E. *Signal Computing: Digital Signals in the Software Domain*. 2020, pp. 79–80 (PDF pages): for `y[n] = x[n] + x[n-2]`, `|H| = 2|cos(w_hat)|`, a two-tap filter with no flat stopband. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain . CC BY-SA.
### Further reading
- Christian Tiberius; Max Mulder. *Engineering Signal Analysis: From Fourier to filtering: Theory*. 2026. CC BY. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/engineering-signal-analysis-from-fourier-to-filtering-theory
- Michael Stiber; Bilin Stiber; Eric Larson. *Signal Computing: Digital Signals in the Software Domain*. 2020. CC BY-SA. Open Textbook Library: https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain
<!-- Hubs: Signal_processing. Portals: PORTAL_Signal_Processing. Signal Processing portal wave 1 · 2026-09-17 · drafted. -->