Transform lowpass analog filters to bandpass

`[bt,at] = lp2bp(b,a,Wo,Bw)`

[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw)

`lp2bp`

transforms analog lowpass filter prototypes with a
cutoff angular frequency of 1 rad/s into bandpass filters with desired bandwidth
and center frequency. The transformation is one step in the digital filter design
process for the `butter`

, `cheby1`

, `cheby2`

, and `ellip`

functions.

`lp2bp`

can perform the transformation on two different linear system representations: transfer
function form and state-space form. In both cases, the input system must be an analog
filter prototype.

`[bt,at] = lp2bp(b,a,Wo,Bw)`

transforms an analog lowpass filter prototype given by polynomial coefficients into
a bandpass filter with center frequency `Wo`

and bandwidth
`Bw`

. Row vectors `b`

and `a`

specify the coefficients of the numerator and denominator of the prototype in
descending powers of *s*.

$$\frac{B(s)}{A(s)}=\frac{b(1){s}^{n}+\cdots +b(n)s+b(n+1)}{a(1){s}^{m}+\cdots +a(m)s+a(m+1)}$$

Scalars `Wo`

and `Bw`

specify the center
frequency and bandwidth in units of rad/s. For a filter with lower band edge
`w1`

and upper band edge `w2`

, use
`Wo`

= `sqrt(w1*w2)`

and
`Bw`

= `w2-w1`

.

`lp2bp`

returns the frequency transformed filter in row vectors
`bt`

and `at`

.

`[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw)`

converts the continuous-time state-space lowpass filter prototype in matrices
`A`

, `B`

, `C`

,
`D`

shown below

$$\begin{array}{l}\dot{x}=Ax+Bu\\ y=Cx+Du\end{array}$$

into a bandpass filter with center frequency `Wo`

and bandwidth
`Bw`

. For a filter with lower band edge `w1`

and upper band edge `w2`

, use
`Wo`

= `sqrt(w1*w2)`

and
`Bw`

= `w2-w1`

.

The bandpass filter is returned in matrices `At`

,
`Bt`

, `Ct`

, `Dt`

.

`lp2bp`

is a highly accurate state-space formulation of the classic
analog filter frequency transformation. Consider the state-space system

$$\begin{array}{l}\dot{x}=Ax+Bu\\ y=Cx+Du\end{array}$$

where *u* is the input, *x* is the state vector, and
*y* is the output. The Laplace transform of the first equation
(assuming zero initial conditions) is

$$sX(s)=AX(s)+BU(s)$$

Now if a bandpass filter is to have center frequency ω_{0} and
bandwidth *B*_{w}, the standard
*s*-domain transformation is

$$s=Q({p}^{2}+1)/p$$

where
*Q* = ω_{0}/*B*_{w}
and *p* = *s*/ω_{0}.
Substituting this for *s* in the Laplace transformed state-space
equation, and considering the operator *p* as
*d*/*dt* results in

$$Q\ddot{x}+Qx=\dot{A}x+B\dot{u}$$

or

$$Q\ddot{x}-\dot{A}x-B\dot{u}=-Qx$$

Now define

$$Q\dot{\omega}=-Qx$$

which, when substituted, leads to

$$Q\dot{x}=Ax+Q\omega +Bu$$

The last two equations give equations of state. Write them in standard form and
multiply the differential equations by ω_{0} to recover the
time/frequency scaling represented by *p* and find state matrices for
the bandpass filter:

Q = Wo/Bw; [ma,m] = size(A); At = Wo*[A/Q eye(ma,m);-eye(ma,m) zeros(ma,m)]; Bt = Wo*[B/Q; zeros(ma,n)]; Ct = [C zeros(mc,ma)]; Dt = d;

If the input to `lp2bp`

is in transfer function form, the function
transforms it into state-space form before applying this algorithm.