Butterworth filter prototype

`[z,p,k] = buttap(n)`

`[z,p,k] = buttap(n)`

returns
the poles and gain of an order `n`

Butterworth
analog lowpass filter prototype. The function returns the poles in
the length `n`

column vector `p`

and
the gain in scalar `k`

. `z`

is an
empty matrix because there are no zeros. The transfer function is

$$H(s)=\frac{z(s)}{p(s)}=\frac{k}{\left(s-p(1)\right)\left(s-p(2)\right)\cdots \left(s-p(n)\right)}$$

Butterworth filters are characterized by a magnitude response
that is maximally flat in the passband and monotonic overall. In the
lowpass case, the first 2`n`

-1 derivatives of the
squared magnitude response are zero at ω = 0. The squared magnitude response function is

$${\left|H(\omega )\right|}^{2}=\frac{1}{1+{(\omega /{\omega}_{0})}^{2n}}$$

corresponding to a transfer function with poles equally spaced
around a circle in the left half plane. The magnitude response at
the cutoff angular frequency ω_{0} is always $$1/\sqrt{2}$$ regardless of the filter order. `buttap`

sets
ω_{0} to 1 for a normalized result.

The function `buttap`

returns zeros, poles, and gain ```
(z,
p, and k)
```

in MATLAB^{®}. However, the generated C/C++ code for `buttap`

returns only poles `p`

and gain `k`

since zeros
`z`

is always an empty matrix.

z = []; p = exp(sqrt(-1)*(pi*(1:2:2*n-1)/(2*n)+pi/2)).'; k = real(prod(-p));

[1] Parks, T. W., and C. S. Burrus. *Digital
Filter Design.* New York: John Wiley & Sons, 1987,
chap. 7.