Butterworth filter prototype

The function `buttap`

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)}$$

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

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.

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.

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