Bessel filter

From testwiki
Jump to navigation Jump to search

Template:Short description Template:Linear analog electronic filter

In electronics and signal processing, a Bessel filter is a type of analog linear filter with a maximally flat group delay (i.e., 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]

The Bessel filter is very similar to the Gaussian filter, and tends towards the same shape as filter order increases.[3][4] While the time-domain step response of the Gaussian filter has zero overshoot,[5] the Bessel filter has a small amount of overshoot,[6][7] but still much less than other common frequency-domain filters, such as Butterworth filters. It has been noted that the impulse response of Bessel–Thomson filters tends towards a Gaussian as the order of the filter is increased.[3]

Compared to finite-order approximations of the Gaussian filter, the Bessel filter has a slightly better shaping factor (i.e., how well a particular filter approximates the ideal lowpass response), flatter phase delay, and flatter group delay than a Gaussian filter of the same order, although the Gaussian has lower time delay and zero overshoot.[8]

The transfer function

A plot of the gain and group delay for a fourth-order low-pass Bessel filter. Note that the transition from the passband to the stopband 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:[9]

H(s)=θn(0)θn(s/ω0)

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

Bessel polynomials

The roots of the third-order Bessel polynomial are the poles of the 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:s+1
n=2:s2+3s+3
n=3:s3+6s2+15s+15
n=4:s4+10s3+45s2+105s+105
n=5:s5+15s4+105s3+420s2+945s+945

The reverse Bessel polynomials are given by:[9]

θn(s)=k=0naksk,

where

ak=(2nk)!2nkk!(nk)!k=0,1,,n.

Setting the cutoff attenuation

There is no standard set attenuation value for Bessel filters.[8] However, −3.0103 dB is a common choice. Some applications may use a higher or lower attenuation such as −1 dB or −20 dB. Setting the cut-off attenuation frequency involves first finding the frequency that achieves the desired attenuation, which will be referred to as ωc, and then scaling the H(s) polynomials to the inverse of that frequency. To scale the polynomials, simply append ωc to the s term in each coefficient, as shown in the 3 pole Bessel filter example below.

H(s)=15s3+6s2+15s+15H(s)=H(s)desired dB at ω=1=15(ωcs)3+6(ωcs)2+15ωcs+15

ωc may be found with Newton's method, or with root finding.

Finding attenuation frequency with Newton's method

Newton's method requires a known magnitude value and derivative magnitude value for the for |H(jωc)|. However, it is easier to operate on |H(jωc)H(jωc)| and use the square of the desired cutoff gain, and is just as accurate, so the square terms will be used.

To obtain ωc, follow the steps below.

  1. If H(s)H(s) is not already available, multiply H(s) by H(s) to obtain H(s)H(s).
  2. negate all terms of sn when (n+2) is divisible by 4. That would be s2, s6, s10, and so on. The modified function will be called H2(s)H2(s), and this modification will allow the use of real numbers instead of complex numbers when evaluating the polynomial and its derivative. the real ωacan now be used in place of the complex jωa
  3. Convert the desired attenuation in dB, AdB, to a squared arithmetic gain value, Barith2, by using Barith2=10AdB/10. For example, 3.010 dB converts to 0.5, 1 dB converts to 0.79432823 and so on.
  4. Calculate the modified |H2(s)H2(s)| in Newton's method using the real value, ωa. Always take the absolute value.
  5. Calculate the derivative the modified H2(ωa)H2(ωa) with respect to the real value, ωa. DO NOT take the absolute value of the derivative.

When steps 1) through 4) are complete, the expression involving Newton's method may be written as:

ωa=ωa(|H2(ωa)H2(ωa)|B2)/(d[H2(ωa)H2(ωa)]/dωa)

using a real value for ωawith no complex arithmetic needed. The movement of ωa should be limited to prevent it from going negative early in the iterations for increased reliability. When complete, ωa can used for the ωc that can be used to scale the original H(s) transfer function denominator. The attenuation of the modified G(s) will then be virtually the exact desired value at 1 rad/sec. If performed properly, only a handful of iterations are needed to set the attenuation through a wide range of desired attenuation values for both small and very large order filters.

Finding attenuation frequency from the roots

Since |H(jωa)| does not contain any phase information, directly factoring the transfer function will not produce usable results. However, the transfer function may be modified by multiplying it with H(s) to eliminate all odd powers of H(jωa), which in turn forces H(jωa) to be real at all frequencies, and then finding the frequency that result on the square of the desired attention.

  1. If H(s)H(s) is not already available, multiply H(s) by H(s) to obtain H(s)H(s).
  2. Convert the desired attenuation in dB, AdB, to a squared arithmetic gain value, Barith2, by using Barith2=10AdB/10. For example, 3.010 dB converts to 0.5, 1 dB converts to 0.79432823 and so on.
  3. Find P(S)=Hnum(S)Hnum(S)Barith2Hden(S)Hden(S)
  4. Find the roots of P(S) using a root finding algorithm.
  5. Of the set of roots from above, select the positive imaginary root for odd order filters, and positive real root for even order filters.
    1. Cutoff attenuations that are above the pass band ripple or below the stop band ripple will come back with multiple roots, so the correct root will have to be selected.

Simple cut-off frequency example with root finding

A 20-dB cut-off frequency attenuation example using the 3-pole Bessel example below is set as follows.

H(s)=15s3+6s2+15s+15 (from the example below)Barith2=1020/10=0.01 (the arithmetic gain squared)Find H(s) such that |H(s)|=20 dB at ω=1.H(s)H(s)=225s6+6s4452s+225P(s)=225Barith2(s6+6s4452s+225)=0.01s60.06s4+0.45s2+222.75 (polynomial to be factored)R=j5.0771344 (the positive imaginary root for the above polynomial)For even order filters, use the positive real root.ω20 dB atten=ωc=5.0771344 rad/sec (20 dB attenuation frequency)H(s)=H(s)A=20 dB at ω=1=15(5.07713443)s3+(6×5.07713442)s2+(15×5.0771344)s+15=15130.87478s3+154.66376s2+76.157016s+15Check:|H(j)|=|15130.87478j3+154.66376j2+76.157016j+15|=0.1=20 dB Gain

Example

Gain plot of the third-order Bessel low-pass filter, versus normalized frequency.
Group delay plot of the third-order Bessel low-pass filter, illustrating flat unit delay in the passband.

The transfer function for a third-order (three-pole) Bessel low-pass filter with ω0=1 is

H(s)=15s3+6s2+15s+15,

where the numerator has been chosen to give unity gain at zero frequency (s=0).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 gain is then

G(ω)=|H(jω)|=15ω6+6ω4+45ω2+225.

The −3-dB point, where |H(jω)|=12, occurs at ω=1.756. This is conventionally called the cut-off frequency.

The phase is

ϕ(ω)=arg(H(jω))=arctan(15ωω3156ω2).

The group delay is

D(ω)=dϕdω=6ω4+45ω2+225ω6+6ω4+45ω2+225.

The Taylor series expansion of the group delay is

D(ω)=1ω6225+ω81125+.

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 Template:Nowrap terms in the series expansion of the group delay will be zero, thus maximizing the flatness of the group delay at Template:Nowrap.

Digital

Although the bilinear transform is used to convert continuous-time (analog) filters to discrete-time (digital) infinite impulse response (IIR) filters with comparable frequency response, IIR filters obtained by the bilinear transformation do not have constant group delay.[10] Since the important characteristic of a Bessel filter is its maximally-flat group delay, the bilinear transform is inappropriate for converting an analog Bessel filter into a digital form.

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

See also

References

Template:Reflist

  1. Cite error: Invalid <ref> tag; no text was provided for refs named BesselFilterTI
  2. Cite error: Invalid <ref> tag; no text was provided for refs named Thomson1949
  3. 3.0 3.1 Cite error: Invalid <ref> tag; no text was provided for refs named RobertsTRT
  4. Cite error: Invalid <ref> tag; no text was provided for refs named compdsp
  5. Cite error: Invalid <ref> tag; no text was provided for refs named nuhertz
  6. Cite error: Invalid <ref> tag; no text was provided for refs named tuiasi
  7. Cite error: Invalid <ref> tag; no text was provided for refs named kecktaylor
  8. 8.0 8.1 Cite error: Invalid <ref> tag; no text was provided for refs named Paarmann2001
  9. 9.0 9.1 Cite error: Invalid <ref> tag; no text was provided for refs named Bianchi2007
  10. Cite error: Invalid <ref> tag; no text was provided for refs named Zhang2008
  11. Cite error: Invalid <ref> tag; no text was provided for refs named Thiran1971
  12. Cite error: Invalid <ref> tag; no text was provided for refs named Madisetti1997
  13. Cite error: Invalid <ref> tag; no text was provided for refs named Smith2015
  14. Cite error: Invalid <ref> tag; no text was provided for refs named Valimaki1995