 # Math::Libgsl::Wavelet

zef:FRITH   # NAME

Math::Libgsl::Wavelet - An interface to libgsl, the Gnu Scientific Library - Wavelet Transform

# SYNOPSIS

```use Math::Libgsl::Wavelet;
use Math::Libgsl::Constants;

constant \N    = 256;
constant \kind =   4;

my @data;
for ^N X ^N -> (\$i, \$j) {
@data[\$i * N + \$j] = (\$i * N + \$j).Num / (N * N);
}

my Math::Libgsl::Wavelet \$w .= new: DAUBECHIES, kind;
my @fdata = \$w.forward2d(@data);
```

# DESCRIPTION

Math::Libgsl::Wavelet is an interface to the Wavelet Transform functions of libgsl, the Gnu Scientific Library.

### new(UInt:D :\$type!, UInt:D :\$variant!)

The constructor accepts two simple or named arguments: the type of wavelet function and the specific member of the wavelet family.

The available wavelet functions are:

• DAUBECHIES

• DAUBECHIES_CENTERED

• HAAR

• HAAR_CENTERED

• BSPLINE

• BSPLINE_CENTERED

There are two methods for dealing with 1D transforms (direct and inverse):

### forward1d(@data, UInt:D \$stride where { \$_ < @data.elems / 2 } = 1, UInt:D \$size where { is-powerof2(\$_) } = @data.elems --> List)

Forward 1D transform.

The @data array is the only mandatory argument. The array may be larger than the set of values that one wants to transform; in that case the \$stride and \$size arguments define the set of values that will be transformed.

### inverse1d(@data, UInt:D \$stride where { \$_ < @data.elems / 2 } = 1, UInt:D \$size where { is-powerof2(\$_) } = @data.elems --> List)

Inverse 1D transform.

The @data array is the only mandatory argument. The array may be larger than the set of values that one wants to transform; in that case the \$stride and \$size arguments define the set of values that will be transformed.

### forward2d(Math::Libgsl::Matrix \$data! where { \$data.matrix.size1 == \$data.matrix.size2 && is-powerof2(\$data.matrix.size1) }, :\$nonstandard --> Math::Libgsl::Matrix)

Forward 2D transform.

There are two forms of this method: one accepts an array as its first argument, the other works on a Math::Libgsl::Matrix object.

The first form takes an array @data which represents a square matrix that must have a number of elements which is a power of 2. The @data array may contain more values than those one wants to transform; in this case the \$size argument is the dimension of the (square) matrix to be processed and \$tda is the physical row length.

The second form accepts a square Math::Libgsl::Matrix object whose sizes are powers of 2.

Both forms allow for a named argument :\$nonstandard, which selects the non-standard form of the computation as detailed in the C library documentation.

### inverse2d(Math::Libgsl::Matrix \$data! where { \$data.matrix.size1 == \$data.matrix.size2 && is-powerof2(\$data.matrix.size1) }, :\$nonstandard --> Math::Libgsl::Matrix)

Inverse 2D transform.

There are two forms of this method: one accepts an array as its first argument, the other works on a Math::Libgsl::Matrix object.

The first form takes an array @data which represents a square matrix that must have a number of elements which is a power of 2. The @data array may contain more values than those one wants to transform; in this case the \$size argument is the dimension of the (square) matrix to be processed and \$tda is the physical row length.

The second form accepts a square Math::Libgsl::Matrix object whose sizes are powers of 2.

Both forms allow for a named argument :\$nonstandard, which selects the non-standard form of the computation as detailed in the C library documentation.

# C Library Documentation

For more details on libgsl see https://www.gnu.org/software/gsl/. The excellent C Library manual is available here https://www.gnu.org/software/gsl/doc/html/index.html, or here https://www.gnu.org/software/gsl/doc/latex/gsl-ref.pdf in PDF format.

# Prerequisites

This module requires the libgsl library to be installed. Please follow the instructions below based on your platform:

## Debian Linux and Ubuntu 20.04+

``````sudo apt install libgsl23 libgsl-dev libgslcblas0
``````

That command will install libgslcblas0 as well, since it's used by the GSL.

## Ubuntu 18.04

libgsl23 and libgslcblas0 have a missing symbol on Ubuntu 18.04. I solved the issue installing the Debian Buster version of those three libraries:

# Installation

To install it using zef (a module management tool):

``````\$ zef install Math::Libgsl::Wavelet
``````

# AUTHOR

Fernando Santagata nando.santagata@gmail.com