Polyphase FFT analysis filter bank
DSP System Toolbox / Filtering / Multirate Filters
The Channelizer block separates a broadband input signal into multiple
narrow subbands using an FFTbased analysis filter bank. The filter bank uses a
prototype lowpass filter and is implemented using a polyphase structure. You can specify
the filter coefficients directly or through design parameters. When you specify the
design parameters, the filter is designed using the designMultirateFIR
function.
This block accepts variablesize inputs. That is, during the simulation, you can change the size of each input channel. The number of channels cannot change.
x
— Broadband signalInput broadband signal, which the channelizer splits into multiple narrow bands. The number of rows in the input signal must be a multiple of the number of frequency bands of the filter bank. Each column of the input corresponds to a separate channel.
This port is unnamed until you set Polyphase filter
specification to Coefficients
and select the Specify coefficients from input port
parameter.
Data Types: single
 double
Complex Number Support: Yes
coeffs
— Prototype lowpass filter coefficientsCoefficients of the prototype lowpass filter. There must be at least one coefficient per frequency band. If the length of the lowpass filter is less than the number of frequency bands, the block zeropads the coefficients.
If you specify complex coefficients, the block designs a prototype filter that is centered at a nonzero frequency, also known as a bandpass filter. The modulated versions of the prototype bandpass filter appear with respect to the prototype filter and are wrapped around the frequency range [−F_{s} F_{s}].
This port appears when you set Polyphase filter
specification to
Coefficients
and select the
Specify coefficients from input port
parameter.
Data Types: single
 double
Complex Number Support: Yes
Port_1
— Multiple narrowband signalsMultiple narrow subbands of the input broadband signal. Each narrow band signal forms a column in the output.
If the input is one of the following:
Lby1 column vector — The output is a L/MbyM matrix. M is the number of frequency bands.
LbyN matrix — The output is a L/MbyMbyN matrix.
Data Types: single
 double
Complex Number Support: Yes
If a parameter is listed as tunable, then you can change its value during simulation.
Number of frequency bands
— Number of frequency bands8
(default)  positive integer greater than 1Number of frequency bands M into which the block separates the input broadband signal. This parameter indicates the FFT length and the decimation factor used by the algorithm.
Polyphase filter specification
— Filter design parameters or coefficientsNumber of taps per band and stopband
attenuation
(default)  Coefficients
Number of taps per band and stopband
attenuation
— Specify the filter design
parameters through the Number of filter taps per
frequency band and Stopband attenuation
(dB) parameters. When you specify the design
parameters, the filter is designed using the designMultirateFIR
function.
Coefficients
— Specify the
filter coefficients directly using the Prototype
lowpass filter coefficients parameter or input
them through the coeffs port.
DecimationFactor
— Decimation factor8
(default)  positive integerDecimation factor D specified as a positive integer less than or equal to the number of frequency bands M.
If the decimation factor D equals the number of frequency bands M, then the M/D ratio equals 1, and the channelizer is known as the maximally decimated channelizer.
If the M/D ratio is greater than
1
, the output sample rate is different from the
channel spacing, and the channelizer is known as the nonmaximally decimated
channelizer. If the ratio is an integer, the channelizer is known as the
integeroversampled channelizer. If the ratio is not an integer, say 4/3,
the channelizer is known as the rationally oversampled channelizer. For more
details, see Algorithm.
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
Number of filter taps per frequency band
— Number of filter coefficients per frequency band12
(default)  positive integerNumber of filter coefficients that each polyphase branch uses. The number of polyphase branches matches the number of frequency bands. The total number of filter coefficients for the prototype lowpass filter is given by Number of frequency bands × Number of filter taps per frequency band. For a given stopband attenuation, increasing the number of taps per band narrows the transition width of the filter. As a result, there is more usable bandwidth for each frequency band, at the expense of increased computation.
To enable this parameter, set Polyphase filter
specification to Number of taps per band and
stopband attenuation
.
Stopband attenuation (dB)
— Stopband attenuation80
(default)  positive real scalarStopband attenuation of the lowpass filter, in dB. This value controls the maximum amount of aliasing from one frequency band to the next. As the stopband attenuation increases, the passband ripple decreases.
To enable this parameter, set Polyphase filter
specification to Number of taps per band and
stopband attenuation
.
Specify coefficients from input port
— Flag to specify lowpass filter coefficientsWhen you select this parameter, the lowpass filter coefficients are input through the coeffs port. When you clear this parameter, the coefficients are specified on the block dialog through the Prototype lowpass filter coefficients parameter.
To enable this parameter, set Polyphase filter
specification to
Coefficients
.
Prototype lowpass filter coefficients
— Coefficients of prototype lowpass filterrcosdesign(0.25,6,8,'sqrt')
(default)  row vectorCoefficients of the prototype lowpass filter. The default value is the
coefficients vector that rcosdesign(0.25,6,8,'sqrt')
returns. There must be at least one coefficient per frequency band. If the
length of the lowpass filter is less than the number of frequency bands, the
block zeropads the coefficients.
If you specify complex coefficients, the block designs a prototype filter that is centered at a nonzero frequency, also known as a bandpass filter. The modulated versions of the prototype bandpass filter appear with respect to the prototype filter and are wrapped around the frequency range [−F_{s} F_{s}].
Tunable: Yes
To enable this parameter, set Polyphase filter
specification to Coefficients
and clear the Specify coefficients from input port
parameter.
Complex Number Support: Yes
Simulate using
— Type of simulation to runInterpreted execution
(default)  Code generation
Interpreted execution
Simulate model using the MATLAB^{®} interpreter. This option shortens startup time and
has faster simulation speed compared to Code
generation
.
Code generation
Simulate model using generated C code. The first time you run a simulation, Simulink^{®} generates C code for the block. The C code is reused for subsequent simulations, as long as the model does not change. This option requires additional startup time but provides faster subsequent simulations.
Data Types 

Multidimensional Signals 

VariableSize Signals 

The generic analysis filter bank consists of a series of parallel bandpass filters that split an input broadband signal, x(n), into a series of narrow subbands. Each bandpass filter retains a different portion of the input signal. After the bandwidth is reduced by one of the bandpass filters, the signal is downsampled to a lower sampling rate commensurate with the new bandwidth.
To implement the analysis filter bank efficiently, the channelizer uses a prototype lowpass filter.
The prototype lowpass filter has an impulse response of h[n], a normalized twosided bandwidth of 2π/M, and a cutoff frequency of π/M. M is the number of frequency bands, that is, the branches of the analysis filter bank. This value corresponds to the FFT length that the filter bank uses. M can be high on the order of 2048 or more. The stopband attenuation determines the minimum level of interference (aliasing) from one frequency band to another. The passband ripple must be small so that the input signal is not distorted in the passband.
The prototype lowpass filter corresponds to H_{0}(z) in the filter bank. The first branch of the filter bank contains H_{0}(z) followed by the decimator. The other M – 1 branches contain filters that are modulated versions of the prototype filter. The modulation factor is given by the following equation:
$${e}^{j{w}_{k}n},\text{\hspace{1em}}{w}_{k}=2\pi k/M,\text{\hspace{1em}}k=0,1,\mathrm{...},M1$$
The transfer function of the modulated kth bandpass filter is given by:
$${H}_{k}(z)={H}_{0}(z{e}^{j{w}_{k}}),\text{\hspace{1em}}{w}_{k}=2\pi k/M,\text{\hspace{1em}}k=1,2,\mathrm{...},M1$$
This figure shows the frequency response of M filters.
To obtain the frequency response characteristics of the filter H_{k}(z), where k = 1,..., M−1, uniformly shift the frequency response of the prototype filter, H_{0}(z), by multiples of 2π/M. Each subband filter, H_{k}(z), {k = 1,..., M – 1}, is derived from the prototype filter.
Following is an equivalent representation of the frequency response diagram with ω ranging from [−π π].
The frequency components in the input signal, x(n), are translated in frequency to baseband by multiplying x(n) with the complex exponentials, $${e}^{j{w}_{k}n},\text{\hspace{0.17em}}{w}_{k}=2\pi k/M,\text{\hspace{0.17em}}k=1,2,\mathrm{..},M1$$ , where $${w}_{k}=2\pi k/M$$, and $$k=1,2,\mathrm{...},M1$$. The resulting product signals are passed through the lowpass filters, H_{0}(z). The output of the lowpass filter is relatively narrow in bandwidth. Downsample the signal commensurate with the new bandwidth. Choose a decimation factor, D ≤ M, where M is the number of branches of the analysis filter bank. When D < M, the channelizer is known as oversampled or nonmaximally decimated channelizer.
The figure shows an analysis filter bank that uses the prototype lowpass filter.
y_{1}(n), y_{2}(n), ..., y_{M1}(n) are narrow subband signals translated into baseband.
The analysis filter bank can be implemented efficiently using the polyphase structure. For more details on the analysis filter bank, see Analysis Filter Bank.
To derive the polyphase structure, start with the transfer function of the prototype lowpass filter:
$${H}_{0}(z)={b}_{0}+{b}_{1}{z}^{1}+\mathrm{...}+{b}_{N}{z}^{N}$$
N+1 is the length of the prototype filter.
You can rearrange this equation as follows:
$${H}_{0}(z)=\begin{array}{c}\left({b}_{0}+{b}_{M}{z}^{M}+{b}_{2M}{z}^{2M}+\mathrm{..}+{b}_{NM+1}{z}^{(NM+1)}\right)+\\ {z}^{1}\left({b}_{1}+{b}_{M+1}{z}^{M}+{b}_{2M+1}{z}^{2M}+\mathrm{..}+{b}_{NM+2}{z}^{(NM+1)}\right)+\\ \begin{array}{c}\vdots \\ {z}^{(M1)}\left({b}_{M1}+{b}_{2M1}{z}^{M}+{b}_{3M1}{z}^{2M}+\mathrm{..}+{b}_{N}{z}^{(NM+1)}\right)\end{array}\end{array}$$
M is the number of polyphase components.
You can write this equation as:
$${H}_{0}(z)={E}_{0}({z}^{M})+{z}^{1}{E}_{1}({z}^{M})+\mathrm{...}+{z}^{(M1)}{E}_{M1}({z}^{M})$$
E_{0}(z^{M}), E_{1}(z^{M}), ..., E_{M1}(z^{M}) are polyphase components of the prototype lowpass filter H_{0}(z).
The other filters in the filter bank, H_{k}(z), where k = 1, ..., M1, are modulated versions of this prototype filter.
You can write the transfer function of the kth modulated bandpass filter as $${H}_{k}(z)={H}_{0}(z{e}^{j{w}_{k}})$$.
Replacing z with ze^{jwk},
$${H}_{k}(z)={h}_{0}+{h}_{1}{e}^{jwk}{z}^{1}+{h}_{2}{e}^{j2wk}{z}^{2}\mathrm{...}+{h}_{N}{e}^{jNwk}{z}^{N}$$
N+1 is the length of the kth filter.
In polyphase form, the equation is as follows:
$${H}_{k}(z)=\left[\begin{array}{ccccc}1& {e}^{j{w}_{k}}& {e}^{j2{w}_{k}}& \cdots & {e}^{j(M1){w}_{k}}\end{array}\right]\left[\begin{array}{c}{E}_{0}({z}^{M})\\ {z}^{1}{E}_{1}({z}^{M})\\ \vdots \\ {z}^{(M1)}{E}_{M1}({z}^{M})\end{array}\right]$$
For all M channels in the filter bank, the transfer function H(z) is given by:
$$H(z)=\left[\begin{array}{ccccc}1& 1& 1& \cdots & 1\\ 1& {e}^{j{w}_{1}}& {e}^{j2{w}_{1}}& \cdots & {e}^{j(M1){w}_{1}}\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1& {e}^{j{w}_{M1}}& {e}^{j2{w}_{M1}}& \cdots & {e}^{j(M1){w}_{M1}}\end{array}\right]\left[\begin{array}{c}{E}_{0}({z}^{M})\\ {z}^{1}{E}_{1}({z}^{M})\\ \vdots \\ {z}^{(M1)}{E}_{M1}({z}^{M})\end{array}\right]$$
When D = M, the channelizer is known as the maximally decimated channelizer or critically sampled channelizer.
Here is the multirate noble identity for decimation, assuming that D = M.
For example, consider the first branch of the filter bank that contains the lowpass filter.
Replace H_{0}(z) with its polyphase representation.
After applying the noble identity for decimation, you can replace the delays and the decimation factor with a commutator switch. The switch starts on the first branch 0 and moves in the counterclockwise direction as shown in the following diagram. The accumulator at the output receives the processed input samples from each branch of the polyphase structure and accumulates these processed samples until the switch goes to branch 0. When the switch goes to branch 0, the accumulator outputs the accumulated value.
For all M channels in the filter bank, the transfer function H(z) is given by:
$$H(z)=\left[\begin{array}{ccccc}1& 1& 1& \cdots & 1\\ 1& {e}^{j{w}_{1}}& {e}^{j2{w}_{1}}& \cdots & {e}^{j(M1){w}_{1}}\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1& {e}^{j{w}_{M1}}& {e}^{j2{w}_{M1}}& \cdots & {e}^{j(M1){w}_{M1}}\end{array}\right]\left[\begin{array}{c}{E}_{0}(z)\\ {E}_{1}(z)\\ \vdots \\ {E}_{M1}(z)\end{array}\right]$$
The matrix on the left is a discrete Fourier transform (DFT) matrix. With the DFT matrix, the efficient implementation of the lowpass prototypebased filter bank looks like this.
When the first input sample is delivered, the switch feeds this input to the branch 0 and the channelizer computes the first set of output values. As more input samples come in, the switch moves in the counterclockwise direction through branches M−1, M−2, all the way up to branch 0, delivering one sample at a time to each branch. When the switch comes to branch 0, the channelizer outputs the next set of output values. This process continues as the data keeps coming in. Every time the switch comes to the first branch 0, the channelizer outputs y_{0}[m], y_{1}[m], …, y_{M1}[m]. Each branch in the channelizer effectively outputs one sample for every M samples it receives. Hence, the sample rate at the output of the channelizer is fs/M.
When D < M, the channelizer is known as the nonmaximally decimated channelizer or oversampled channelizer. In this configuration, the output sample rate is different from the channel spacing. The nonmaximally decimated channelizers offer increased design freedom, but at the expense of increasing computational cost.
If the ratio M/D equals an integer that is greater than 1 and is less than or equal to M−1, the channelizer is known as integeroversampled channelizer. If the ratio M/D is not an integer, then the channelizer is known as rationallyoversampled channelizer.
In this configuration, when the first input sample is delivered, the switch feeds this input to branch 0 and the channelizer computes the first set of output values. As more input samples come in, the switch moves in the counterclockwise direction through branches D−1, D−2, all the way up to branch 0, delivering one sample at a time to each branch. When the switch comes to branch 0, the channelizer outputs the next set of output values. This process continues as the data keeps coming in. Every time the switch comes to the first branch 0, the channelizer outputs y_{0}[m], y_{1}[m], …, y_{M1}[m].
As more data keeps coming in and the switch feeds these samples to the first D addresses, the formal contents of these addresses are shifted to the next set of D addresses, and this process of data shift continues every time there is a new set of D input samples.
For every D input samples that are fed to the polyphase structure, the channelizer outputs M samples, y_{0}[m], y_{1}[m], … , y_{M1}[m]. This process increases the output sample rate from f_{s}/M in the case of a maximally decimated channelizer, to f_{s}/D in the case of a nonmaximally decimated channelizer.
For more details, see [2].
After each Dpoint data sequence is delivered to the partitioned Mstage polyphase filter, the outputs of the M stages are computed and conditioned for delivery to the Mpoint FFT. The data shifting through the filter introduces frequencydependent phase shift. To correct for this phase shift and alias all bands to DC, a circular shift buffer is inserted after the polyphase filters and before the Mpoint FFT.
With the commutator switch followed by Mstage polyphase filter, circular shift buffer, and a DFT matrix, the efficient implementation of the lowpass prototypebased filter bank looks like this.
[1] Harris, Fredric J, Multirate Signal Processing for Communication Systems, Prentice Hall PTR, 2004.
[2] Harris, F.J., Chris Dick, and Michael Rice. "Digital Receivers and Transmitters Using Polyphase Filter Banks for Wireless Communications." IEEE^{®} Transactions on Microwave Theory and Techniques. 51, no. 4 (2003).
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.