# Wavelets

## Wavelet `families()`

## Built-in wavelets - `wavelist()`

Custom discrete wavelets are also supported through the `Wavelet` object constructor as described below.

## `Wavelet` object

class pywt.Wavelet(name[, filter_bank=None])

  Describes properties of a discrete wavelet identified by the specified wavelet `name`. For continuous wavelets see `pywt.ContinuousWavelet` instead. In order to use a built-in wavelet the `name` parameter must be a valid wavelet name from the `pywt.wavelist()` list.

  Custom Wavelet objects can be created by passing a user-defined filters set with the `filter_bank` parameter.

  Parameters

    - name – Wavelet name

    - filter_bank – Use a user supplied filter bank instead of a built-in `Wavelet`.

  The filter bank object can be a list of four filters coefficients or an object with `filter_bank` attribute, which returns a list of such filters in the following order:

      [dec_lo, dec_hi, rec_lo, rec_hi]

  Wavelet objects can also be used as a base filter banks. See section on using custom wavelets for more information.

  Example:

      >>> import pywt
      >>> wavelet = pywt.Wavelet('db1')

  name

    Wavelet name.

  short_name

    Short wavelet name.

  dec_lo

    Decomposition filter values.

  dec_hi

    Decomposition filter values.

  rec_lo

    Reconstruction filter values.

  rec_hi

    Reconstruction filter values.

  dec_len

    Decomposition filter length.

  rec_len

    Reconstruction filter length.

  filter_bank

    Returns filters list for the current wavelet in the following order:

        [dec_lo, dec_hi, rec_lo, rec_hi]

  inverse_filter_bank

    Returns list of reverse wavelet filters coefficients. The mapping from the `filter_coeffs` list is as follows:

        [rec_lo[::-1], rec_hi[::-1], dec_lo[::-1], dec_hi[::-1]]

  short_family_name

    Wavelet short family name

  family_name

    Wavelet family name

  orthogonal

    Set if wavelet is orthogonal

  biorthogonal

    Set if wavelet is biorthogonal

  symmetry

    `asymmetric`, `near symmetric`, `symmetric`

  vanishing_moments_psi

    Number of vanishing moments for the wavelet function

  vanishing_moments_phi

    Number of vanishing moments for the scaling function

  Example:

      >>> def format_array(arr):
      ...     return "[%s]" % ", ".join(["%.14f" % x for x in arr])

      >>> import pywt
      >>> wavelet = pywt.Wavelet('db1')
      >>> print(wavelet)
      Wavelet db1
        Family name:    Daubechies
        Short name:     db
        Filters length: 2
        Orthogonal:     True
        Biorthogonal:   True
        Symmetry:       asymmetric
        DWT:            True
        CWT:            False
      >>> print(format_array(wavelet.dec_lo), format_array(wavelet.dec_hi))
      [0.70710678118655, 0.70710678118655] [-0.70710678118655, 0.70710678118655]
      >>> print(format_array(wavelet.rec_lo), format_array(wavelet.rec_hi))
      [0.70710678118655, 0.70710678118655] [0.70710678118655, -0.70710678118655]

### Approximating wavelet and scaling functions - `Wavelet.wavefun()`

Wavelet.wavefun(level)

  Changed in version 0.2: The time (space) localisation of approximation function points was added.

  The `wavefun()` method can be used to calculate approximations of scaling function (`phi`) and wavelet function (`psi`) at the given level of refinement.

  For `orthogonal` wavelets returns approximations of scaling function and wavelet function with corresponding x-grid coordinates:

      [phi, psi, x] = wavelet.wavefun(level)

  Example:

      >>> import pywt
      >>> wavelet = pywt.Wavelet('db2')
      >>> phi, psi, x = wavelet.wavefun(level=5)

  For other (`biorthogonal` but not `orthogonal`) wavelets returns approximations of scaling and wavelet function both for decomposition and reconstruction and corresponding x-grid coordinates:

      [phi_d, psi_d, phi_r, psi_r, x] = wavelet.wavefun(level)

  Example:

      >>> import pywt
      >>> wavelet = pywt.Wavelet('bior3.5')
      >>> phi_d, psi_d, phi_r, psi_r, x = wavelet.wavefun(level=5)

  See also

  You can find live examples of `wavefun()` usage and images of all the built-in wavelets on the Wavelet Properties Browser page. However, this website is no longer actively maintained and does not include every wavelet present in PyWavelets. The precision of the wavelet coefficients at that site is also lower than those included in PyWavelets.

## Using custom wavelets

PyWavelets comes with a `long list` of the most popular wavelets built-in and ready to use. If you need to use a specific wavelet which is not included in the list it is very easy to do so. Just pass a list of four filters or an object with a `filter_bank` attribute as a `filter_bank` argument to the `Wavelet` constructor.

The filters list, either in a form of a simple Python list or returned via the `filter_bank` attribute, must be in the following order:

> - lowpass decomposition filter

> - highpass decomposition filter

> - lowpass reconstruction filter

> - highpass reconstruction filter

just as for the `filter_bank` attribute of the `Wavelet` class.

The Wavelet object created in this way is a standard `Wavelet` instance.

The following example illustrates the way of creating custom Wavelet objects from plain Python lists of filter coefficients and a filter bank-like object.

> Example:

>     >>> import pywt, math
>     >>> c = math.sqrt(2)/2
>     >>> dec_lo, dec_hi, rec_lo, rec_hi = [c, c], [-c, c], [c, c], [c, -c]
>     >>> filter_bank = [dec_lo, dec_hi, rec_lo, rec_hi]
>     >>> myWavelet = pywt.Wavelet(name="myHaarWavelet", filter_bank=filter_bank)
>     >>>
>     >>> class HaarFilterBank(object):
>     ...     @property
>     ...     def filter_bank(self):
>     ...         c = math.sqrt(2)/2
>     ...         dec_lo, dec_hi, rec_lo, rec_hi = [c, c], [-c, c], [c, c], [c, -c]
>     ...         return [dec_lo, dec_hi, rec_lo, rec_hi]
>     >>> filter_bank = HaarFilterBank()
>     >>> myOtherWavelet = pywt.Wavelet(name="myHaarWavelet", filter_bank=filter_bank)

## `ContinuousWavelet` object

class pywt.ContinuousWavelet(name)

  Describes properties of a continuous wavelet identified by the specified wavelet `name`. In order to use a built-in wavelet the `name` parameter must be a valid wavelet name from the `pywt.wavelist()` list.

  Parameters

    name – Wavelet name

  Example:

      >>> import pywt
      >>> wavelet = pywt.ContinuousWavelet('gaus1')

  name

    Continuous Wavelet name.

  short_family_name

    Wavelet short family name

  family_name

    Wavelet family name

  orthogonal

    Set if wavelet is orthogonal

  biorthogonal

    Set if wavelet is biorthogonal

  complex_cwt

    Returns if wavelet is complex

  lower_bound

    Set the lower bound of the effective support

  upper_bound

    Set the upper bound of the effective support

  center_frequency

    Set the center frequency for the shan, fbsp and cmor wavelets

  bandwidth_frequency

    Set the bandwidth frequency for the shan, fbsp and cmor wavelets

  fbsp_order

    Set the order for the fbsp wavelet

  symmetry

    `asymmetric`, `near symmetric`, `symmetric`, `anti-symmetric`

  Example:

      >>> import pywt
      >>> wavelet = pywt.ContinuousWavelet('gaus1')
      >>> print(wavelet)
      ContinuousWavelet gaus1
        Family name:    Gaussian
        Short name:     gaus
        Symmetry:       anti-symmetric
        DWT:            False
        CWT:            True
        Complex CWT:    False

### Approximating wavelet functions - `ContinuousWavelet.wavefun()`

ContinuousWavelet.wavefun(level, length=None)

  The `wavefun()` method can be used to calculate approximations of scaling function (`psi`) with grid (`x`). The vector length is set by `length`. The vector length can also be defined by `2**level` if `length` is not set.

  For `complex_cwt` wavelets returns a complex approximations of wavelet function with corresponding x-grid coordinates:

      [psi, x] = wavelet.wavefun(level)

  Example:

      >>> import pywt
      >>> wavelet = pywt.ContinuousWavelet('gaus1')
      >>> psi, x = wavelet.wavefun(level=5)

### Approximating wavelet functions - `ContinuousWavelet.wavefun()`

pywt.DiscreteContinuousWavelet(name[, filter_bank = None])
  The `DiscreteContinuousWavelet()` returns a

    Wavelet or a ContinuousWavelet object depending on the given name.

  Example:

      >>> import pywt
      >>> wavelet = pywt.DiscreteContinuousWavelet('db1')
      >>> print(wavelet)
      Wavelet db1
        Family name:    Daubechies
        Short name:     db
        Filters length: 2
        Orthogonal:     True
        Biorthogonal:   True
        Symmetry:       asymmetric
        DWT:            True
        CWT:            False
      >>> wavelet = pywt.DiscreteContinuousWavelet('gaus1')
      >>> print(wavelet)
      ContinuousWavelet gaus1
        Family name:    Gaussian
        Short name:     gaus
        Symmetry:       anti-symmetric
        DWT:            False
        CWT:            True
        Complex CWT:    False