scipy.signal.

besselap#

scipy.signal.besselap(N, norm='phase', *, xp=None, device=None)[source]#

Return (z,p,k) for analog prototype of an Nth-order Bessel filter.

Parameters:
Nint

The order of the filter.

norm{‘phase’, ‘delay’, ‘mag’}, optional

Frequency normalization:

phase

The filter is normalized such that the phase response reaches its midpoint at an angular (e.g., rad/s) cutoff frequency of 1. This happens for both low-pass and high-pass filters, so this is the “phase-matched” case. [6]

The magnitude response asymptotes are the same as a Butterworth filter of the same order with a cutoff of Wn.

This is the default, and matches MATLAB’s implementation.

delay

The filter is normalized such that the group delay in the passband is 1 (e.g., 1 second). This is the “natural” type obtained by solving Bessel polynomials

mag

The filter is normalized such that the gain magnitude is -3 dB at angular frequency 1. This is called “frequency normalization” by Bond. [1]

Added in version 0.18.0.

xparray_namespace, optional

Optional array namespace. Should be compatible with the array API standard, or supported by array-api-compat. Default: numpy

device: any

optional device specification for output. Should match one of the supported device specification in xp.

Returns:
zndarray[float64]

Zeros of the transfer function. Is always an empty array.

pndarray[complex128]

Poles of the transfer function.

kfloat

Gain of the transfer function. For phase-normalized, this is always 1.

See also

bessel

Filter design function using this prototype

Notes

To find the pole locations, approximate starting points are generated [2] for the zeros of the ordinary Bessel polynomial [3], then the Aberth-Ehrlich method [4] [5] is used on the Kv(x) Bessel function to calculate more accurate zeros, and these locations are then inverted about the unit circle.

Array API Standard Support

besselap has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable SCIPY_ARRAY_API=1 and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

Library

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

n/a

See Support for the array API standard for more information.

References

[1]

C.R. Bond, “Bessel Filter Constants”, http://www.crbond.com/papers/bsf.pdf

[2]

Campos and Calderon, “Approximate closed-form formulas for the zeros of the Bessel Polynomials”, arXiv:1105.0957.

[3]

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.

[4]

Aberth, “Iteration Methods for Finding all Zeros of a Polynomial Simultaneously”, Mathematics of Computation, Vol. 27, No. 122, April 1973

[5]

Ehrlich, “A modified Newton method for polynomials”, Communications of the ACM, Vol. 10, Issue 2, pp. 107-108, Feb. 1967, DOI:10.1145/363067.363115

[6]

Miller and Bohn, “A Bessel Filter Crossover, and Its Relation to Others”, RaneNote 147, 1998, https://www.ranecommercial.com/legacy/note147.html