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 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.
Oversampling ratio
— Oversampling ratio1
(default)  positive integerOversampling ratio, specified as a positive scalar divisor of the number of frequency bands.
If the value is greater than 1
, the output sample rate
is different from the channel spacing. The channelizer is then known as the
nonmaximally decimated channelizer or 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 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. This 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 models the first branch of the filter bank. The other M – 1 branches are modeled by 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,...,M1, 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.
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. 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 MIMO 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]$$
Maximally decimated channelizer (D = M)
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 illustration, 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.
For all M channels in the filter bank, the MIMO 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 prototype based filter bank looks like the following.
Nonmaximally decimated channelizer (D < 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. In addition to that, the nonmaximally decimated channelizers offer increased design freedom, but at the expense of increasing computational cost.
Here is the multirate noble identity for decimation, assuming that D < M.
For illustration, 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.
For all M channels in the filter bank, the MIMO 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/D})\\ {E}_{1}({z}^{M/D})\\ \vdots \\ {E}_{M1}({z}^{M/D})\end{array}\right]$$
The matrix on the left is a discrete Fourier transform (DFT) matrix.
The commutator switch in the case of the nonmaximally decimated channelizer starts at the position (M/D) − 1 and progresses up the stack to branch 0. In the twodimensional polyphase filter, new inputs samples are delivered to the first set of M/D addresses in the first column. The formal contents of these addresses are shifted to the next set of M/D addresses. The content in the last set of M/D addresses shifts to the first M/D addresses in the next column. All the samples in the twodimensional filter undergo a serpentine shift. This is equivalent to performing a linear shift through the prototype onedimensional filter prior to the polyphase partition.
For D = 2, here is how the data in the memory moves:
For every M/D samples that is fed as an input, the polyphase structure outputs M samples. This process increases the output sample rate from f_{s}/M to Df_{s}/M.
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 shown in Fig.30 of [2] 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:
[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.