# lp2bp

Transform lowpass analog filters to bandpass

## Syntax

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

## Description

`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.

### Transfer Function Form (Polynomial)

`[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\left(s\right)}{A\left(s\right)}=\frac{b\left(1\right){s}^{n}+\cdots +b\left(n\right)s+b\left(n+1\right)}{a\left(1\right){s}^{m}+\cdots +a\left(m\right)s+a\left(m+1\right)}$`

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`.

### State-Space Form

`[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}\stackrel{˙}{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`.

## Algorithms

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

`$\begin{array}{l}\stackrel{˙}{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\left(s\right)=AX\left(s\right)+BU\left(s\right)$`

Now if a bandpass filter is to have center frequency ω0 and bandwidth Bw, the standard s-domain transformation is

`$s=Q\left({p}^{2}+1\right)/p$`

where Q = ω0/Bw and p = s0. Substituting this for s in the Laplace transformed state-space equation, and considering the operator p as d/dt results in

`$Q\stackrel{¨}{x}+Qx=\stackrel{˙}{A}x+B\stackrel{˙}{u}$`

or

`$Q\stackrel{¨}{x}-\stackrel{˙}{A}x-B\stackrel{˙}{u}=-Qx$`

Now define

`$Q\stackrel{˙}{\omega }=-Qx$`

`$Q\stackrel{˙}{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.