Note: This page has been translated by MathWorks. Please click here

To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.

To view all translated materials including this page, select Japan from the country navigator on the bottom of this page.

Converting existing FIR or IIR filter designs to a modified IIR form is often done using allpass frequency transformations. Although the resulting designs can be considerably more expensive in terms of dimensionality than the prototype (original) filter, their ease of use in fixed or variable applications is a big advantage.

The general idea of the frequency transformation is to take an existing prototype filter and produce another filter from it that retains some of the characteristics of the prototype, in the frequency domain. Transformation functions achieve this by replacing each delaying element of the prototype filter with an allpass filter carefully designed to have a prescribed phase characteristic for achieving the modifications requested by the designer.

The basic form of mapping commonly used is

$${H}_{T}(z)={H}_{o}[{H}_{A}(z)]$$

The *H _{A}*(

$$\begin{array}{l}{H}_{A}(z)=S\frac{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-i}}}{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-N+i}}}=\frac{{N}_{A}(z)}{{D}_{A}(z)}\\ {\alpha}_{0}=1\end{array}$$

where

*H _{o}*(

*H _{A}*(

*H _{T}*(

Let's look at a simple example of the transformation given by

$${H}_{T}(z)={H}_{o}(-z)$$

The target filter has its poles and zeroes flipped across the
origin of the real and imaginary axes. For the real filter prototype,
it gives a mirror effect against 0.5, which means that lowpass *H _{o}*(

**Example of a Simple Mirror Transformation**

The choice of an allpass filter to provide the frequency mapping is necessary to provide the frequency translation of the prototype filter frequency response to the target filter by changing the frequency position of the features from the prototype filter without affecting the overall shape of the filter response.

The phase response of the mapping filter normalized to *π* can
be interpreted as a translation function:

$$H({w}_{new})={\omega}_{old}$$

The graphical interpretation of the frequency transformation is shown in the figure below. The complex multiband transformation takes a real lowpass filter and converts it into a number of passbands around the unit circle.

**Graphical Interpretation of the Mapping Process**

Most of the frequency transformations are based on the second-order allpass mapping filter:

$${H}_{A}(z)=\pm \frac{1+{\alpha}_{1}{z}^{-1}+{\alpha}_{2}{z}^{-2}}{{\alpha}_{2}+{\alpha}_{1}{z}^{-1}+{z}^{-2}}$$

The two degrees of freedom provided by *α _{1}* and

Choosing the appropriate frequency transformation for achieving the required effect and the correct features of the prototype filter is very important and needs careful consideration. It is not advisable to use a first-order transformation for controlling more than one feature. The mapping filter will not give enough flexibility. It is also not good to use higher order transformation just to change the cutoff frequency of the lowpass filter. The increase of the filter order would be too big, without considering the additional replica of the prototype filter that may be created in undesired places.

**Feature Selection for Real Lowpass to Bandpass
Transformation**

To illustrate the idea, the second-order real multipoint transformation was applied three times to the same elliptic halfband filter in order to make it into a bandpass filter. In each of the three cases, two different features of the prototype filter were selected in order to obtain a bandpass filter with passband ranging from 0.25 to 0.75. The position of the DC feature was not important, but it would be advantageous if it were in the middle between the edges of the passband in the target filter. In the first case the selected features were the left and the right band edges of the lowpass filter passband, in the second case they were the left band edge and the DC, in the third case they were DC and the right band edge.

**Result of Choosing Different Features**

The results of all three approaches are completely different. For each of them only the selected features were positioned precisely where they were required. In the first case the DC is moved toward the left passband edge just like all the other features close to the left edge being squeezed there. In the second case the right passband edge was pushed way out of the expected target as the precise position of DC was required. In the third case the left passband edge was pulled toward the DC in order to position it at the correct frequency. The conclusion is that if only the DC can be anywhere in the passband, the edges of the passband should have been selected for the transformation. For most of the cases requiring the positioning of passbands and stopbands, designers should always choose the position of the edges of the prototype filter in order to make sure that they get the edges of the target filter in the correct places. Frequency responses for the three cases considered are shown in the figure. The prototype filter was a third-order elliptic lowpass filter with cutoff frequency at 0.5.

The MATLAB^{®} code used to generate the figure is given here.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

In the example the requirements are set to create a real bandpass filter with passband edges at 0.1 and 0.3 out of the real lowpass filter having the cutoff frequency at 0.5. This is attempted in three different ways. In the first approach both edges of the passband are selected, in the second approach the left edge of the passband and the DC are chosen, while in the third approach the DC and the right edge of the passband are taken:

[num1,den1] = iirlp2xn(b, a, [-0.5, 0.5], [0.1, 0.3]); [num2,den2] = iirlp2xn(b, a, [-0.5, 0.0], [0.1, 0.2]); [num3,den3] = iirlp2xn(b, a, [ 0.0, 0.5], [0.2, 0.3]);

In general the frequency mapping converts the prototype filter, *H _{o}*(

When the *N*th-order prototype filter is given
with pole-zero form

$${H}_{o}(z)=\frac{{\displaystyle \sum _{i=1}^{N}(z-{z}_{i})}}{{\displaystyle \sum _{i=1}^{N}(z-{p}_{i})}}$$

the mapping will replace each pole, *p _{i}*,
and each zero,

$${H}_{o}(z)=\frac{{\displaystyle \sum _{i=1}^{N}}\left(S{\displaystyle \sum _{k=0}^{N-1}{\alpha}_{k}{z}^{k}-{z}_{i}\cdot {\displaystyle \sum _{k=0}^{N-1}{\alpha}_{k}{z}^{N}{}^{-k}}}\right)}{{\displaystyle \sum _{i=1}^{N}}\left(S{\displaystyle \sum _{k=0}^{N-1}{\alpha}_{k}{z}^{k}-{p}_{i}\cdot {\displaystyle \sum _{k=0}^{N-1}{\alpha}_{k}{z}^{N}{}^{-k}}}\right)}$$

$$$$

The root finding needs to be used on the bracketed expressions in order to find the poles and zeros of the target filter.

When the prototype filter is described in the numerator-denominator form:

$${H}_{T}(z)={\frac{{\beta}_{0}{z}^{N}+{\beta}_{1}{z}^{N-1}+\dots +{\beta}_{N}}{{\alpha}_{0}{z}^{N}+{\alpha}_{1}{z}^{N-1}+\dots +{\alpha}_{N}}|}_{z={H}_{A}(z)}$$

Then the mapping process will require a number of convolutions in order to calculate the numerator and denominator of the target filter:

$${H}_{T}(z)=\frac{{\beta}_{1}{N}_{A}{(z)}^{N}+{\beta}_{2}{N}_{A}{(z)}^{N-1}{D}_{A}(z)+\dots +{\beta}_{N}{D}_{A}{(z)}^{N}}{{\beta}_{1}{N}_{A}{(z)}^{N}+{\beta}_{2}{N}_{A}{(z)}^{N-1}{D}_{A}(z)+\dots +{\beta}_{N}{D}_{A}{(z)}^{N}}$$

For each coefficient *α _{i}* and

`N`

**Advantages**

Most frequency transformations are described by closed-form solutions or can be calculated from the set of linear equations.

They give predictable and familiar results.

Ripple heights from the prototype filter are preserved in the target filter.

They are architecturally appealing for variable and adaptive filters.

**Disadvantages**

There are cases when using optimization methods to design the required filter gives better results.

High-order transformations increase the dimensionality of the target filter, which may give expensive final results.

Starting from fresh designs helps avoid locked-in compromises.

This section discusses real frequency transformations that take the real lowpass prototype filter and convert it into a different real target filter. The target filter has its frequency response modified in respect to the frequency response of the prototype filter according to the characteristic of the applied frequency transformation.

Real frequency shift transformation uses a second-order allpass mapping filter. It performs an exact mapping of one selected feature of the frequency response into its new location, additionally moving both the Nyquist and DC features. This effectively moves the whole response of the lowpass filter by the distance specified by the selection of the feature from the prototype filter and the target filter. As a real transformation, it works in a similar way for positive and negative frequencies.

$${H}_{A}(z)={z}^{-1}\cdot \frac{1-\alpha {z}^{-1}}{\alpha -{z}^{-1}}$$

with α given by

$$\alpha =\{\begin{array}{lll}\frac{\mathrm{cos}\frac{\pi}{2}({\omega}_{old}-2{\omega}_{new})}{\mathrm{cos}\frac{\pi}{2}{\omega}_{old}}\hfill & for\hfill & \left|\mathrm{cos}\frac{\pi}{2}({\omega}_{old}-2{\omega}_{new})\right|<1\hfill \\ \frac{\mathrm{sin}\frac{\pi}{2}({\omega}_{old}-2{\omega}_{new})}{\mathrm{sin}\frac{\pi}{2}{\omega}_{old}}\hfill & otherwise\hfill & \hfill \end{array}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new}* —
Position of the feature originally at

The following example shows how this transformation can be used to move the response of the prototype lowpass filter in either direction. Please note that because the target filter must also be real, the response of the target filter will inherently be disturbed at frequencies close to Nyquist and close to DC. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation moves the feature originally at 0.5 to 0.9:

[num,den] = iirshift(b, a, 0.5, 0.9);

**Example of Real Frequency Shift Mapping**

Real lowpass filter to real lowpass filter transformation uses a first-order allpass mapping filter. It performs an exact mapping of one feature of the frequency response into the new location keeping DC and Nyquist features fixed. As a real transformation, it works in a similar way for positive and negative frequencies. It is important to mention that using first-order mapping ensures that the order of the filter after the transformation is the same as it was originally.

$${H}_{A}(z)=-\left(\frac{1-\alpha {z}^{-1}}{\alpha -{z}^{-1}}\right)$$

with *α* given by

$$\alpha =\frac{\mathrm{sin}\frac{\pi}{2}({\omega}_{old}-{\omega}_{new})}{\mathrm{sin}\frac{\pi}{2}({\omega}_{old}-{\omega}_{new})}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new}* —
Frequency location of the same feature in the target filter

The example below shows how to modify the cutoff frequency of the prototype filter. The MATLAB code for this example is shown in the following figure.

The prototype filter is a halfband elliptic, real, third-order filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The cutoff frequency moves from 0.5 to 0.75:

[num,den] = iirlp2lp(b, a, 0.5, 0.75);

**Example of Real Lowpass to Real Lowpass Mapping**

Real lowpass filter to real highpass filter transformation uses a first-order allpass mapping filter. It performs an exact mapping of one feature of the frequency response into the new location additionally swapping DC and Nyquist features. As a real transformation, it works in a similar way for positive and negative frequencies. Just like in the previous transformation because of using a first-order mapping, the order of the filter before and after the transformation is the same.

$${H}_{A}(z)=-\left(\frac{1+\alpha {z}^{-1}}{\alpha +{z}^{-1}}\right)$$

with *α* given by

$$\alpha =-\left(\frac{\mathrm{cos}\frac{\pi}{2}({\omega}_{old}+{\omega}_{new})}{\mathrm{cos}\frac{\pi}{2}({\omega}_{old}-{\omega}_{new})}\right)$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new}* —
Frequency location of the same feature in the target filter

The example below shows how to convert the lowpass filter into a highpass filter with arbitrarily chosen cutoff frequency. In the MATLAB code below, the lowpass filter is converted into a highpass with cutoff frequency shifted from 0.5 to 0.75. Results are shown in the figure.

The prototype filter is a halfband elliptic, real, third-order filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example moves the cutoff frequency from 0.5 to 0.75:

[num,den] = iirlp2hp(b, a, 0.5, 0.75);

**Example of Real Lowpass to Real Highpass Mapping**

Real lowpass filter to real bandpass filter transformation uses a second-order allpass mapping filter. It performs an exact mapping of two features of the frequency response into their new location additionally moving a DC feature and keeping the Nyquist feature fixed. As a real transformation, it works in a similar way for positive and negative frequencies.

$${H}_{A}(z)=-\left(\frac{1-\beta (1+\alpha ){z}^{-1}-\alpha {z}^{-2}}{\alpha -\beta (1+\alpha ){z}^{-1}+{z}^{-2}}\right)$$

with *α* and *β* given
by

$$\alpha =\frac{\mathrm{sin}\frac{\pi}{4}(2{\omega}_{old}-{\omega}_{new,2}+{\omega}_{new,1})}{\mathrm{sin}\frac{\pi}{4}(2{\omega}_{old}+{\omega}_{new,2}-{\omega}_{new,1})}$$

$$\beta =\mathrm{cos}\frac{\pi}{2}({\omega}_{new,1}+{\omega}_{new,2})$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new,1}* —
Position of the feature originally at (-

*ω _{new,2}* —
Position of the feature originally at (+

The example below shows how to move the response of the prototype lowpass filter in either direction. Please note that because the target filter must also be real, the response of the target filter will inherently be disturbed at frequencies close to Nyquist and close to DC. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates the passband between 0.5 and 0.75:

[num,den] = iirlp2bp(b, a, 0.5, [0.5, 0.75]);

**Example of Real Lowpass to Real Bandpass Mapping**

Real lowpass filter to real bandstop filter transformation uses a second-order allpass mapping filter. It performs an exact mapping of two features of the frequency response into their new location additionally moving a Nyquist feature and keeping the DC feature fixed. This effectively creates a stopband between the selected frequency locations in the target filter. As a real transformation, it works in a similar way for positive and negative frequencies.

$${H}_{A}(z)=\frac{1-\beta (1+\alpha ){z}^{-1}+\alpha {z}^{-2}}{\alpha -\beta (1+\alpha ){z}^{-1}+{z}^{-2}}$$

with *α * and *β* given
by

$$\begin{array}{l}\alpha =\frac{\mathrm{cos}\frac{\pi}{4}(2{\omega}_{old}+{\omega}_{new,2}-{\omega}_{new,1})}{\mathrm{cos}\frac{\pi}{4}(2{\omega}_{old}-{\omega}_{new,2}+{\omega}_{new,1})}\\ \beta =\mathrm{cos}\frac{\pi}{2}({\omega}_{new,1}+{\omega}_{new,2})\end{array}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new,1}* —
Position of the feature originally at (-

*ω _{new,2}* —
Position of the feature originally at (+

The following example shows how this transformation can be used to convert the prototype lowpass filter with cutoff frequency at 0.5 into a real bandstop filter with the same passband and stopband ripple structure and stopband positioned between 0.5 and 0.75. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates a stopband from 0.5 to 0.75:

[num,den] = iirlp2bs(b, a, 0.5, [0.5, 0.75]);

**Example of Real Lowpass to Real Bandstop Mapping**

This high-order transformation performs an exact mapping of
one selected feature of the prototype filter frequency response into
a number of new locations in the target filter. Its most common use
is to convert a real lowpass with predefined passband and stopband
ripples into a real multiband filter with *N* arbitrary
band edges, where *N* is the order of the allpass
mapping filter.

$$\begin{array}{l}{H}_{A}(z)=S\frac{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}^{}{z}^{-i}}}{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}^{}{z}^{-N+i}}}\\ {\alpha}_{0}=1\end{array}$$

The coefficients *α* are given by

$$\{\begin{array}{l}\begin{array}{cc}{\alpha}_{0}=1& k=1,\dots ,N\end{array}\\ {\alpha}_{k}=-S\frac{\mathrm{sin}\frac{\pi}{2}(N{\omega}_{new}+{(-1)}^{k}{\omega}_{old})}{\mathrm{sin}\frac{\pi}{2}((N-2k){\omega}_{new}+{(-1)}^{k}{\omega}_{old})}\end{array}$$

where

*ω _{old,k}* —
Frequency location of the first feature in the prototype filter

*ω _{new,k}* —
Position of the feature originally at

The mobility factor, *S*, specifies the mobility
or either DC or Nyquist feature:

$$S=\{\begin{array}{cc}1& Nyquist\\ -1& DC\end{array}$$

The example below shows how this transformation can be used
to convert the prototype lowpass filter with cutoff frequency at 0.5
into a filter having a number of bands positioned at arbitrary edge
frequencies 1/5, 2/5, 3/5 and 4/5. Parameter `S`

was
such that there is a passband at DC. Here is the MATLAB code
for generating the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates three stopbands, from DC to 0.2, from 0.4 to 0.6 and from 0.8 to Nyquist:

[num,den] = iirlp2mb(b, a, 0.5, [0.2, 0.4, 0.6, 0.8], `pass');

**Example of Real Lowpass to Real Multiband Mapping**

This high-order frequency transformation performs an exact mapping of a number of selected features of the prototype filter frequency response to their new locations in the target filter. The mapping filter is given by the general IIR polynomial form of the transfer function as given below.

$$\begin{array}{l}{H}_{A}(z)=S\frac{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-i}}}{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-N+i}}}\\ {\alpha}_{0}=1\end{array}$$

For the *N*th-order multipoint frequency transformation
the coefficients *α* are

$$\{\begin{array}{l}{\displaystyle \sum _{i=1}^{N}{\alpha}_{N-i}{z}_{old,k}\cdot {z}_{new,k}^{i}-S\cdot {z}_{new,k}^{N-i}=-{z}_{old,k}-S\cdot {z}_{new,k}}\hfill \\ {z}_{old,k}={e}^{j\pi {\omega}_{old,k}}\hfill \\ {z}_{new,k}={e}^{j\pi {\omega}_{new,k}}\hfill \\ k=1,\dots ,N\hfill \end{array}$$

where

*ω _{old,k}* —
Frequency location of the first feature in the prototype filter

*ω _{new,k}* —
Position of the feature originally at

The mobility factor, *S*, specifies the mobility
of either DC or Nyquist feature:

$$S=\{\begin{array}{cc}1& Nyquist\\ -1& DC\end{array}$$

The example below shows how this transformation can be used to move features of the prototype lowpass filter originally at -0.5 and 0.5 to their new locations at 0.5 and 0.75, effectively changing a position of the filter passband. Here is the MATLAB code for generating the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates a passband from 0.5 to 0.75:

[num,den] = iirlp2xn(b, a, [-0.5, 0.5], [0.5, 0.75], `pass');

**Example of Real Lowpass to Real Multipoint Mapping**

This section discusses complex frequency transformation that take the complex prototype filter and convert it into a different complex target filter. The target filter has its frequency response modified in respect to the frequency response of the prototype filter according to the characteristic of the applied frequency transformation from:

Complex frequency shift transformation is the simplest first-order transformation that performs an exact mapping of one selected feature of the frequency response into its new location. At the same time it rotates the whole response of the prototype lowpass filter by the distance specified by the selection of the feature from the prototype filter and the target filter.

$${H}_{A}(z)=\alpha {z}^{-1}$$

with *α* given by

$$\alpha ={e}^{j2\pi ({\nu}_{new}-{\nu}_{old})}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new}* —
Position of the feature originally at

A special case of the complex frequency shift is a, so called,
Hilbert Transformer. It can be designed by setting the parameter to
|*α*|=*1*, that is

$$\alpha =\{\begin{array}{cc}1& forward\\ -1& inverse\end{array}$$

The example below shows how to apply this transformation to rotate the response of the prototype lowpass filter in either direction. Please note that because the transformation can be achieved by a simple phase shift operator, all features of the prototype filter will be moved by the same amount. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation moves the feature originally at 0.5 to 0.3:

[num,den] = iirshiftc(b, a, 0.5, 0.3);

**Example of Complex Frequency Shift Mapping**

This first-order transformation performs an exact mapping of one selected feature of the prototype filter frequency response into two new locations in the target filter creating a passband between them. Both Nyquist and DC features can be moved with the rest of the frequency response.

$${H}_{A}(z)=\frac{\beta -\alpha {z}^{-1}}{{z}^{-1}-\alpha \beta}$$

with* α* and *β* are
given by

$$\begin{array}{l}\alpha =\frac{\mathrm{sin}\frac{\pi}{4}(2{\omega}_{old}-{\omega}_{new,2}+{\omega}_{new,1})}{\mathrm{sin}\pi (2{\omega}_{old}+{\omega}_{new,2}-{\omega}_{new,1})}\\ \beta ={e}^{-j\pi ({\omega}_{new}-{\omega}_{old})}\end{array}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new,1}* —
Position of the feature originally at (-

*ω _{new,2}* —
Position of the feature originally at (+

The following example shows the use of such a transformation for converting a real halfband lowpass filter into a complex bandpass filter with band edges at 0.5 and 0.75. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a half band elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The transformation creates a passband from 0.5 to 0.75:

[num,den] = iirlp2bpc(b, a, 0.5, [0.5 0.75]);

**Example of Real Lowpass to Complex Bandpass Mapping**

This first-order transformation performs an exact mapping of one selected feature of the prototype filter frequency response into two new locations in the target filter creating a stopband between them. Both Nyquist and DC features can be moved with the rest of the frequency response.

$${H}_{A}(z)=\frac{\beta -\alpha {z}^{-1}}{\alpha \beta -{z}^{-1}}$$

with *α* and *β* are
given by

$$\begin{array}{l}\alpha =\frac{\mathrm{cos}\pi (2{\omega}_{old}+{\nu}_{new,2}-{\nu}_{new,1})}{\mathrm{cos}\pi (2{\omega}_{old}-{\nu}_{new,2}+{\nu}_{new,1})}\\ \beta ={e}^{-j\pi ({\omega}_{new}-{\omega}_{old})}\end{array}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new,1}* —
Position of the feature originally at (-

*ω _{new,2}* —
Position of the feature originally at (+

The example below shows the use of such a transformation for converting a real halfband lowpass filter into a complex bandstop filter with band edges at 0.5 and 0.75. Here is the MATLAB code for generating the example in the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The transformation creates a stopband from 0.5 to 0.75:

[num,den] = iirlp2bsc(b, a, 0.5, [0.5 0.75]);

**Example of Real Lowpass to Complex Bandstop Mapping**

This high-order transformation performs an exact mapping of
one selected feature of the prototype filter frequency response into
a number of new locations in the target filter. Its most common use
is to convert a real lowpass with predefined passband and stopband
ripples into a multiband filter with arbitrary band edges. The order
of the mapping filter must be even, which corresponds to an even number
of band edges in the target filter. The *N*th-order
complex allpass mapping filter is given by the following general transfer
function form:

$$\begin{array}{l}{H}_{A}(z)=S\frac{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-i}}}{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}\pm {z}^{-N+i}}}\\ {\alpha}_{0}=1\end{array}$$

The coefficients *α* are calculated from
the system of linear equations:

$$\{\begin{array}{l}{\displaystyle \sum _{i=1}^{N}\Re ({\alpha}_{i})\cdot \left[\mathrm{cos}{\beta}_{1,k}-\mathrm{cos}{\beta}_{2,k}\right]+\Im ({\alpha}_{i})\cdot \left[\mathrm{sin}{\beta}_{1,k}+\mathrm{sin}{\beta}_{2,k}\right]=\mathrm{cos}{\beta}_{3,k}}\\ {\displaystyle \sum _{i=1}^{N}\Re ({\alpha}_{i})\cdot \left[\mathrm{sin}{\beta}_{1,k}-\mathrm{sin}{\beta}_{2,k}\right]-\Im ({\alpha}_{i})\cdot \left[\mathrm{cos}{\beta}_{1,k}+\mathrm{cos}{\beta}_{2,k}\right]=\mathrm{sin}{\beta}_{3,k}}\\ {\beta}_{1,k}=-\pi \left[{\nu}_{old}\cdot {(-1)}^{k}+{\nu}_{new,k}(N-k)\right]\\ {\beta}_{2,k}=-\pi \left[\Delta C+{\nu}_{new,k}k\right]\\ {\beta}_{3,k}=-\pi \left[{\nu}_{old}\cdot {(-1)}^{k}+{\nu}_{new,k}N\right]\\ k=1\dots N\end{array}$$

where

*ω _{old}* —
Frequency location of the selected feature in the prototype filter

*ω _{new,i}* —
Position of features originally at ±

Parameter *S* is the additional rotation factor
by the frequency distance *ΔC*, giving the
additional flexibility of achieving the required mapping:

$$S={e}^{-j\pi \Delta C}$$

The example shows the use of such a transformation for converting a prototype real lowpass filter with the cutoff frequency at 0.5 into a multiband complex filter with band edges at 0.2, 0.4, 0.6 and 0.8, creating two passbands around the unit circle. Here is the MATLAB code for generating the figure.

**Example of Real Lowpass to Complex Multiband Mapping**

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates two complex passbands:

[num,den] = iirlp2mbc(b, a, 0.5, [0.2, 0.4, 0.6, 0.8]);

This high-order transformation performs an exact mapping of
a number of selected features of the prototype filter frequency response
to their new locations in the target filter. The *N*th-order
complex allpass mapping filter is given by the following general transfer
function form.

$$\begin{array}{l}{H}_{A}(z)=S\frac{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}{z}^{-i}}}{{\displaystyle \sum _{i=0}^{N}{\alpha}_{i}\pm {z}^{-N+i}}}\\ {\alpha}_{0}=1\end{array}$$

The coefficients *α* can be calculated
from the system of linear equations:

$$\{\begin{array}{l}{\displaystyle \sum _{i=1}^{N}\Re ({\alpha}_{i})\cdot \left[\mathrm{cos}{\beta}_{1,k}-\mathrm{cos}{\beta}_{2,k}\right]+\Im ({\alpha}_{i})\cdot \left[\mathrm{sin}{\beta}_{1,k}+\mathrm{sin}{\beta}_{2,k}\right]=\mathrm{cos}{\beta}_{3,k}}\\ {\displaystyle \sum _{i=1}^{N}\Re ({\alpha}_{i})\cdot \left[\mathrm{sin}{\beta}_{1,k}-\mathrm{sin}{\beta}_{2,k}\right]-\Im ({\alpha}_{i})\cdot \left[\mathrm{cos}{\beta}_{1,k}+\mathrm{cos}{\beta}_{2,k}\right]=\mathrm{sin}{\beta}_{3,k}}\\ {\beta}_{1,k}=-\frac{\pi}{2}\left[{\omega}_{old,k}+{\omega}_{new,k}(N-k)\right]\\ {\beta}_{2,k}=-\frac{\pi}{2}\left[2\Delta C+{\omega}_{new,k}k\right]\\ {\beta}_{3,k}=-\frac{\pi}{2}\left[{\omega}_{old,k}+{\omega}_{new,k}N\right]\\ k=1\dots N\end{array}$$

where

*ω _{old,k}* —
Frequency location of the first feature in the prototype filter

*ω _{new,k}* —
Position of the feature originally at

Parameter *S* is the additional rotation factor
by the frequency distance *ΔC*, giving the
additional flexibility of achieving the required mapping:

$$S={e}^{-j\pi \Delta C}$$

The following example shows how this transformation can be used to move one selected feature of the prototype lowpass filter originally at -0.5 to two new frequencies -0.5 and 0.1, and the second feature of the prototype filter from 0.5 to new locations at -0.25 and 0.3. This creates two nonsymmetric passbands around the unit circle, creating a complex filter. Here is the MATLAB code for generating the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates two nonsymmetric passbands:

[num,den] = iirlp2xc(b,a,0.5*[-1,1,-1,1], [-0.5,-0.25,0.1,0.3]);

**Example of Real Lowpass to Complex Multipoint Mapping**

This first-order transformation performs an exact mapping of two selected features of the prototype filter frequency response into two new locations in the target filter. Its most common use is to adjust the edges of the complex bandpass filter.

$${H}_{A}(z)=\frac{\alpha (\gamma -\beta {z}^{-1})}{{z}^{-1}-\beta \gamma}$$

with *α* and *β* are
given by

$$\begin{array}{l}\alpha =\frac{\mathrm{sin}\frac{\pi}{4}(({\omega}_{old,2}-{\omega}_{old,1})-({\omega}_{new,2}-{\omega}_{new,1}))}{\mathrm{sin}\frac{\pi}{4}(({\omega}_{old,2}-{\omega}_{old,1})+({\omega}_{new,2}-{\omega}_{new,1}))}\\ \alpha ={e}^{-j\pi ({\omega}_{old,2}-{\omega}_{old,1})}\\ \gamma ={e}^{-j\pi ({\omega}_{new,2}-{\omega}_{new,1})}\end{array}$$

where

*ω _{old,1}* —
Frequency location of the first feature in the prototype filter

*ω _{old,2}* —
Frequency location of the second feature in the prototype filter

*ω _{new,1}* —
Position of the feature originally at

*ω _{new,2}* —
Position of the feature originally at

The following example shows how this transformation can be used to modify the position of the passband of the prototype filter, either real or complex. In the example below the prototype filter passband spanned from 0.5 to 0.75. It was converted to having a passband between -0.5 and 0.1. Here is the MATLAB code for generating the figure.

The prototype filter is a halfband elliptic, real, third-order lowpass filter:

[b, a] = ellip(3, 0.1, 30, 0.409);

The example transformation creates a passband from 0.25 to 0.75:

[num,den] = iirbpc2bpc(b, a, [0.25, 0.75], [-0.5, 0.1]);

**Example of Complex Bandpass to Complex Bandpass Mapping**

Was this topic helpful?