Multirate Filter Bank Implementation

The upfirdn function alters the sampling rate of a signal by an integer ratio P/Q. It computes the result of a cascade of three systems that performs the following tasks:

  • Upsampling (zero insertion) by integer factor p

  • Filtering by FIR filter h

  • Downsampling by integer factor q

For example, to change the sample rate of a signal from 44.1 kHz to 48 kHz, we first find the smallest integer conversion ratio p/q. Set

d = gcd(48000,44100);
p = 48000/d;
q = 44100/d;

In this example, p = 160 and q = 147. Sample rate conversion is then accomplished by typing

y = upfirdn(x,h,p,q)

This cascade of operations is implemented in an efficient manner using polyphase filtering techniques, and it is a central concept of multirate filtering. Note that the quality of the resampling result relies on the quality of the FIR filter h.

Filter banks may be implemented using upfirdn by allowing the filter h to be a matrix, with one FIR filter per column. A signal vector is passed independently through each FIR filter, resulting in a matrix of output signals.

Other functions that perform multirate filtering (with fixed filter) include resample, interp, and decimate.