Accelerating the pace of engineering and science

# besself

Bessel analog filter design

## Syntax

[b,a] = besself(n,Wo)
[z,p,k] = besself(...)
[A,B,C,D] = besself(...)

## Description

besself designs lowpass, analog Bessel filters, which are characterized by almost constant group delay across the entire passband, thus preserving the wave shape of filtered signals in the passband. besself does not support the design of digital Bessel filters.

[b,a] = besself(n,Wo) designs an order n lowpass analog Bessel filter, where Wo is the frequency up to which the filter's group delay is approximately constant. Larger values of the filter order (n) produce a group delay that better approximates a constant up to frequency Wo.

besself returns the filter coefficients in the length n+1 row vectors b and a, with coefficients in descending powers of s, derived from this transfer function:

$H\left(s\right)=\frac{B\left(s\right)}{A\left(s\right)}=\frac{\text{b(1)}\text{\hspace{0.17em}}{s}^{n}+\text{b(2)}\text{\hspace{0.17em}}{s}^{n-1}+\cdots +\text{b(n+1)}}{\text{a(1)}\text{\hspace{0.17em}}{s}^{n}+\text{a(2)}\text{\hspace{0.17em}}{s}^{n-1}+\cdots +\text{a(n+1)}}.$

[z,p,k] = besself(...) returns the zeros and poles in length n or 2*n column vectors z and p and the gain in the scalar k.

[A,B,C,D] = besself(...) returns the filter design in state-space form, where A, B, C, and D are

$\begin{array}{l}\stackrel{˙}{x}=\text{A}\text{\hspace{0.17em}}x+\text{B}\text{\hspace{0.17em}}u\\ y=\text{C}\text{\hspace{0.17em}}x+\text{D}\text{\hspace{0.17em}}u.\end{array}$

and u is the input, x is the state vector, and y is the output.

## Examples

expand all

### Frequency Response of an Analog Bessel Filter

Design a 5th-order analog lowpass Bessel filter with approximately constant group delay up to 10,000 rad/s. Plot the magnitude and phase responses of the filter using freqs.

```[b,a] = besself(5,10000);
freqs(b,a)
```

### Frequency Response of a Digital Bessel Filter

Design an analog Bessel filter of order 5. Convert it to a digital IIR filter using bilinear. Display its frequency response.

```Fs = 100;                           % Sampling Frequency
[z,p,k] = besself(5,1000);          % Bessel analog filter design
[zd,pd,kd] = bilinear(z,p,k,Fs);    % Analog to digital mapping
sos = zp2sos(zd,pd,kd);             % Convert to SOS form
fvtool(sos)                         % Visualize the digital filter
```

## Limitations

Lowpass Bessel filters have a monotonically decreasing magnitude response, as do lowpass Butterworth filters. Compared to the Butterworth, Chebyshev, and elliptic filters, the Bessel filter has the slowest rolloff and requires the highest order to meet an attenuation specification.

For high order filters, the state-space form is the most numerically accurate, followed by the zero-pole-gain form. The transfer function coefficient form is the least accurate; numerical problems can arise for filter orders as low as 15.

expand all

### Algorithms

besself performs a four-step algorithm:

1. It finds lowpass analog prototype poles, zeros, and gain using the besselap function.

2. It converts the poles, zeros, and gain into state-space form.

3. It transforms the lowpass prototype into a lowpass filter that meets the design specifications.

4. It converts the state-space filter back to transfer function or zero-pole-gain form, as required.

## References

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