Bessel filter

From Infogalactic: the planetary knowledge core
Jump to: navigation, search

Lua error in package.lua at line 80: module 'strict' not found.

In electronics and signal processing, a Bessel filter is a type of analog linear filter with a maximally flat group/phase delay (maximally linear phase response), which preserves the wave shape of filtered signals in the passband.[1] Bessel filters are often used in audio crossover systems.

The filter's name is a reference to German mathematician Friedrich Bessel (1784–1846), who developed the mathematical theory on which the filter is based. The filters are also called Bessel–Thomson filters in recognition of W. E. Thomson, who worked out how to apply Bessel functions to filter design in 1949.[2] (In fact, a paper by Kiyasu of Japan predates this by several years.[3][4])

The Bessel filter is very similar to the Gaussian filter, and tends towards the same shape as filter order increases.[5][6] While the time-domain step response of the Gaussian filter has zero overshoot,[7] the Bessel filter has a small amount of overshoot,[8][9] but still much less than common frequency domain filters.

Compared to finite-order approximations of the Gaussian filter, the Bessel filter has better shaping factor, flatter phase delay, and flatter group delay than a Gaussian of the same order, though the Gaussian has lower time delay and zero overshoot.[10]

The transfer function

File:Bessel4 GainDelay.png
A plot of the gain and group delay for a fourth-order low pass Bessel filter. Note that the transition from the pass band to the stop band is much slower than for other filters, but the group delay is practically constant in the passband. The Bessel filter maximizes the flatness of the group delay curve at zero frequency.

A Bessel low-pass filter is characterized by its transfer function:[11]

H(s) = \frac{\theta_n(0)}{\theta_n(s/\omega_0)}\,

where \theta_n(s) is a reverse Bessel polynomial from which the filter gets its name and \omega_0 is a frequency chosen to give the desired cut-off frequency. The filter has a low-frequency group delay of 1 / \omega_0. Since \theta_n (0) is indeterminate by the definition of reverse Bessel polynomials, but is a removable singularity, it is defined that \theta_n (0) = \lim_{x \rightarrow 0} \theta_n (x) .

Bessel polynomials

File:Bessel 3rd-order poles.svg
The roots of the third-order Bessel polynomial are the poles of filter transfer function in the s plane, here plotted as crosses.

The transfer function of the Bessel filter is a rational function whose denominator is a reverse Bessel polynomial, such as the following:

n=1; \quad s+1
n=2; \quad s^2+3s+3
n=3; \quad s^3+6s^2+15s+15
n=4; \quad s^4+10s^3+45s^2+105s+105
n=5; \quad s^5+15s^4+105s^3+420s^2+945s+945

The reverse Bessel polynomials are given by:[11]

\theta_n(s)=\sum_{k=0}^n a_ks^k,

where

a_k=\frac{(2n-k)!}{2^{n-k}k!(n-k)!} \quad k=0,1,\ldots,n.

Example

File:Bessel 3rd-order gain.svg
Gain plot of the third-order Bessel filter, versus normalized frequency
File:Bessel 3rd-order delay.svg
Group delay plot of the third-order Bessel filter, illustrating flat unit delay in the passband

The transfer function for a third-order (three-pole) Bessel low-pass filter, normalized to have unit group delay, is

H(s)=\frac{15}{s^3+6s^2+15s+15}.

The roots of the denominator polynomial, the filter's poles, include a real pole at s = −2.3222, and a complex-conjugate pair of poles at s = −1.8389 ± j1.7544, plotted above. The numerator 15 is chosen to give a gain of 1 at DC (at s = 0).

The gain is then

G(\omega) = |H(j\omega)| = \frac{15}{\sqrt{\omega^6+6\omega^4+45\omega^2+225}}. \,

The phase is

\phi(\omega)=-\arg(H(j\omega))=
-\arctan\left(\frac{15\omega-\omega^3}{15-6\omega^2}\right). \,

The group delay is

D(\omega)=-\frac{d\phi}{d\omega} =
\frac{6 \omega^4+ 45 \omega^2+225}{\omega^6+6\omega^4+45\omega^2+225}. \,

The Taylor series expansion of the group delay is

D(\omega) = 1-\frac{\omega^6}{225}+\frac{\omega^8}{1125}+\cdots.

Note that the two terms in ω2 and ω4 are zero, resulting in a very flat group delay at ω = 0. This is the greatest number of terms that can be set to zero, since there are a total of four coefficients in the third order Bessel polynomial, requiring four equations in order to be defined. One equation specifies that the gain be unity at ω = 0 and a second specifies that the gain be zero at ω = ∞, leaving two equations to specify two terms in the series expansion to be zero. This is a general property of the group delay for a Bessel filter of order n: the first n − 1 terms in the series expansion of the group delay will be zero, thus maximizing the flatness of the group delay at ω = 0.

Digital

As the important characteristic of a Bessel filter is its maximally-flat group delay, and not the amplitude response, it is inappropriate to use the bilinear transform to convert the analog Bessel filter into a digital form (since this preserves the amplitude response but not the group delay).

The digital equivalent is the Thiran filter, also an all-pole low-pass filter with maximally-flat group delay,[12][13] which can also be transformed into an allpass filter, to implement fractional delays.[14][15]

See also

References

  1. Lua error in package.lua at line 80: module 'strict' not found.
  2. Thomson, W.E., "Delay Networks having Maximally Flat Frequency Characteristics", Proceedings of the Institution of Electrical Engineers, Part III, November 1949, Vol. 96, No. 44, pp. 487–490.
  3. Lua error in package.lua at line 80: module 'strict' not found.
  4. Lua error in package.lua at line 80: module 'strict' not found.
  5. Lua error in package.lua at line 80: module 'strict' not found.
  6. Lua error in package.lua at line 80: module 'strict' not found.
  7. Lua error in package.lua at line 80: module 'strict' not found.
  8. Lua error in package.lua at line 80: module 'strict' not found.
  9. Lua error in package.lua at line 80: module 'strict' not found.
  10. Lua error in package.lua at line 80: module 'strict' not found.
  11. 11.0 11.1 Lua error in package.lua at line 80: module 'strict' not found.
  12. Lua error in package.lua at line 80: module 'strict' not found.
  13. Lua error in package.lua at line 80: module 'strict' not found.
  14. Lua error in package.lua at line 80: module 'strict' not found.
  15. Lua error in package.lua at line 80: module 'strict' not found.

External links