# Wavelets

## Wavelet `families()`

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

## `Wavelet` object

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

  Describes properties of a 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.

  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.

## 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 continous 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:     db
        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:     db
        Symmetry:       anti-symmetric
        DWT:            False
        CWT:            True
        Complex CWT:    False