Create a Bessel filter.


[b,a] = besself(n,Wp)

[b,a] = besself(n,Wp,band)

[b,a] = besself(n,Wp,domain)

[b,a] = besself(n,Wp,band,domain)


The filter order.
Type: integer
Dimension: scalar
A scalar specifying the frequency band of a low or high pass filter, or a two element vector specifying the band of a bandpass or bandstop filter. For a digital filter, the values (in Hz) are normalized relative to the Nyquist frequency. For an analog filter, the values are in radians/sec. See the Comments below.
Type: double
Dimension: scalar | vector
The band type of the filter. Omit for low pass or bandpass. Use 'high' for high pass, and 'stop' for bandstop.
Type: string
  • Use 'z' for digital filters (default).
  • Use 's' for analog filters.


The numerator polynomial coefficients of the filter.
Type: vector
The denominator polynomial coefficients of the filter.
Type: vector


Create a fourth order Bessel low pass digital filter with a 300 Hz cutoff frequency and a 1000 Hz sampling frequency.

[b,a] = besself(4,300/500)
b = [Matrix] 1 x 5
0.14044  0.56175  0.84263  0.56175  0.14044
a = [Matrix] 1 x 5
1.00000  0.72195  0.42631  0.08850  0.01025


The cutoff frequency is not the 3dB attenuation frequency, but specifies the band for which the group delay will be nearly constant. The filter has the same asymptotic behavior as the Butterworth filter with the same 3dB cutoff frequency. Compare with besself3.

Bessel filters are desirable for their property of having a maximally linear phase response in the pass band of an analog filter. For digital filters, this property is lost unless the sampling frequency is substantially higher than the cutoff frequency.

Filters can become unstable for high orders, and more easily so for bandpass or stopband filters.