SOPT
Sparse OPTimisation
Public Member Functions | Friends | List of all members
sopt::wavelets::Wavelet Class Reference

Performs direct and indirect wavelet transforms. More...

#include <wavelets.h>

+ Inheritance diagram for sopt::wavelets::Wavelet:
+ Collaboration diagram for sopt::wavelets::Wavelet:

Public Member Functions

virtual ~Wavelet ()
 Destructor. More...
 
template<typename T0 >
auto direct (Eigen::ArrayBase< T0 > const &signal) const -> decltype(direct_transform(signal, 1, *this))
 Direct transform. More...
 
template<typename T0 , typename T1 >
auto direct (Eigen::ArrayBase< T1 > &coefficients, Eigen::ArrayBase< T0 > const &signal) const -> decltype(direct_transform(coefficients, signal, 1, *this))
 Direct transform. More...
 
template<typename T0 , typename T1 >
auto direct (Eigen::ArrayBase< T1 > &&coefficients, Eigen::ArrayBase< T0 > const &signal) const -> decltype(direct_transform(coefficients, signal, 1, *this))
 Direct transform. More...
 
template<typename T0 >
auto indirect (Eigen::ArrayBase< T0 > const &coefficients) const -> decltype(indirect_transform(coefficients, 1, *this))
 Indirect transform. More...
 
template<typename T0 , typename T1 >
auto indirect (Eigen::ArrayBase< T1 > const &coefficients, Eigen::ArrayBase< T0 > &signal) const -> decltype(indirect_transform(coefficients, signal, 1, *this))
 Indirect transform. More...
 
template<typename T0 , typename T1 >
auto indirect (Eigen::ArrayBase< T1 > const &coeffs, Eigen::ArrayBase< T0 > &&signal) const -> decltype(indirect_transform(coeffs, signal, 1, *this))
 Indirect transform. More...
 
t_uint levels () const
 Number of levels over which to do transform. More...
 
void levels (t_uint l)
 Sets number of levels over which to do transform. More...
 
- Public Member Functions inherited from sopt::wavelets::WaveletData
 WaveletData (std::initializer_list< t_scalar > const &coefs)
 Constructs from initializers. More...
 
 WaveletData (t_vector const &coefs)
 Constructs from vector. More...
 

Friends

Wavelet factory (const std::string &name, t_uint nlevels)
 Creates a wavelet transform object. More...
 

Additional Inherited Members

- Public Types inherited from sopt::wavelets::WaveletData
using t_scalar = t_real
 Type of the underlying scalar. More...
 
using t_vector = Array< t_real >
 Type of the underlying vector. More...
 
- Public Attributes inherited from sopt::wavelets::WaveletData
t_vector const coefficients
 Wavelet coefficient per-se. More...
 
struct sopt::wavelets::WaveletData::DirectFilter direct_filter
 
struct {
   t_vector   low_even
 High-pass filter for direct transform. More...
 
   t_vector   low_odd
 
   t_vector   high_even
 
   t_vector   high_odd
 
indirect_filter
 Holds filters for indirect transform. More...
 

Detailed Description

Performs direct and indirect wavelet transforms.

Definition at line 21 of file wavelets.h.

Constructor & Destructor Documentation

◆ ~Wavelet()

virtual sopt::wavelets::Wavelet::~Wavelet ( )
inlinevirtual

Destructor.

Definition at line 30 of file wavelets.h.

30 {}

Member Function Documentation

◆ direct() [1/3]

template<typename T0 >
auto sopt::wavelets::Wavelet::direct ( Eigen::ArrayBase< T0 > const &  signal) const -> decltype(direct_transform(signal, 1, *this))
inline

Direct transform.

Parameters
[in]signalcomputes wavelet coefficients for this signal. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d transform).
Returns
wavelet coefficients

Supports 1 and 2 dimensional tranforms for real and complex data.

Definition at line 52 of file wavelets.h.

53  {
55  return direct_transform(signal, levels(), *this);
56  }
t_uint levels() const
Number of levels over which to do transform.
Definition: wavelets.h:129
std::enable_if< T1::IsVectorAtCompileTime, void >::type direct_transform(Eigen::ArrayBase< T0 > &coeffs, Eigen::ArrayBase< T1 > const &signal, t_uint levels, WaveletData const &wavelet)
N-levels 1d direct transform.
Definition: direct.h:61
#define SOPT_WAVELET_MACRO_MULTIPLE(NAME)
Definition: wavelets.h:33

References sopt::wavelets::direct_transform(), levels(), and SOPT_WAVELET_MACRO_MULTIPLE.

◆ direct() [2/3]

template<typename T0 , typename T1 >
auto sopt::wavelets::Wavelet::direct ( Eigen::ArrayBase< T1 > &&  coefficients,
Eigen::ArrayBase< T0 > const &  signal 
) const -> decltype(direct_transform(coefficients, signal, 1, *this))
inline

Direct transform.

Parameters
[in,out]coefficientsOutput wavelet coefficients. Must be of the same size and type as the input.
[in]signalcomputes wavelet coefficients for this signal. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d transform).

Supports 1 and 2 dimensional tranforms for real and complex data. This version allows non-constant Eigen expressions to be passe on without the ugly const_cast of the cannonical approach.

Definition at line 83 of file wavelets.h.

84  {
87  return direct_transform(coefficients, signal, levels(), *this);
88  }
t_vector const coefficients
Wavelet coefficient per-se.
Definition: wavelet_data.h:17
#define SOPT_WAVELET_MACRO_EQUAL_SIZE(A, B)
Definition: wavelets.h:41

References sopt::wavelets::WaveletData::coefficients, sopt::wavelets::direct_transform(), levels(), SOPT_WAVELET_MACRO_EQUAL_SIZE, and SOPT_WAVELET_MACRO_MULTIPLE.

◆ direct() [3/3]

template<typename T0 , typename T1 >
auto sopt::wavelets::Wavelet::direct ( Eigen::ArrayBase< T1 > &  coefficients,
Eigen::ArrayBase< T0 > const &  signal 
) const -> decltype(direct_transform(coefficients, signal, 1, *this))
inline

Direct transform.

Parameters
[in,out]coefficientsOutput wavelet coefficients. Must be of the same size and type as the input.
[in]signalcomputes wavelet coefficients for this signal. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d transform).

Supports 1 and 2 dimensional tranforms for real and complex data.

Definition at line 66 of file wavelets.h.

67  {
70  return direct_transform(coefficients, signal, levels(), *this);
71  }

References sopt::wavelets::WaveletData::coefficients, sopt::wavelets::direct_transform(), levels(), SOPT_WAVELET_MACRO_EQUAL_SIZE, and SOPT_WAVELET_MACRO_MULTIPLE.

◆ indirect() [1/3]

template<typename T0 >
auto sopt::wavelets::Wavelet::indirect ( Eigen::ArrayBase< T0 > const &  coefficients) const -> decltype(indirect_transform(coefficients, 1, *this))
inline

Indirect transform.

Parameters
[in]coefficientsInput wavelet coefficients. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d transform).

Supports 1 and 2 dimensional tranforms for real and complex data.

Definition at line 95 of file wavelets.h.

96  {
98  return indirect_transform(coefficients, levels(), *this);
99  }
std::enable_if< T1::IsVectorAtCompileTime, void >::type indirect_transform(Eigen::ArrayBase< T0 > const &coeffs, Eigen::ArrayBase< T1 > &signal, t_uint levels, WaveletData const &wavelet)
N-levels 1d indirect transform.
Definition: indirect.h:58

References sopt::wavelets::WaveletData::coefficients, sopt::wavelets::indirect_transform(), levels(), and SOPT_WAVELET_MACRO_MULTIPLE.

◆ indirect() [2/3]

template<typename T0 , typename T1 >
auto sopt::wavelets::Wavelet::indirect ( Eigen::ArrayBase< T1 > const &  coefficients,
Eigen::ArrayBase< T0 > &  signal 
) const -> decltype(indirect_transform(coefficients, signal, 1, *this))
inline

Indirect transform.

Parameters
[in]coefficientsInput wavelet coefficients. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d
[in,out]signalReconstructed signal. Must be of the same size and type as the input.

Supports 1 and 2 dimensional tranforms for real and complex data.

Definition at line 106 of file wavelets.h.

107  {
110  return indirect_transform(coefficients, signal, levels(), *this);
111  }

References sopt::wavelets::WaveletData::coefficients, sopt::wavelets::indirect_transform(), levels(), SOPT_WAVELET_MACRO_EQUAL_SIZE, and SOPT_WAVELET_MACRO_MULTIPLE.

◆ indirect() [3/3]

template<typename T0 , typename T1 >
auto sopt::wavelets::Wavelet::indirect ( Eigen::ArrayBase< T1 > const &  coeffs,
Eigen::ArrayBase< T0 > &&  signal 
) const -> decltype(indirect_transform(coeffs, signal, 1, *this))
inline

Indirect transform.

Parameters
[in]coefficientsInput wavelet coefficients. Its size must be a multiple of $2^l$ where $l$ is the number of levels. Can be a matrix (2d-transform) or a column vector (1-d
[in,out]signalReconstructed signal. Must be of the same size and type as the input.

Supports 1 and 2 dimensional tranforms for real and complex data. This version allows non-constant Eigen expressions to be passe on without the ugly const_cast of the cannonical approach.

Definition at line 120 of file wavelets.h.

121  {
123  SOPT_WAVELET_MACRO_EQUAL_SIZE(signal, coeffs);
124  return indirect_transform(coeffs, signal, levels(), *this);
125  }

References sopt::wavelets::indirect_transform(), levels(), SOPT_WAVELET_MACRO_EQUAL_SIZE, and SOPT_WAVELET_MACRO_MULTIPLE.

◆ levels() [1/2]

t_uint sopt::wavelets::Wavelet::levels ( ) const
inline

Number of levels over which to do transform.

Definition at line 129 of file wavelets.h.

129 { return levels_; }

Referenced by direct(), and indirect().

◆ levels() [2/2]

void sopt::wavelets::Wavelet::levels ( t_uint  l)
inline

Sets number of levels over which to do transform.

Definition at line 131 of file wavelets.h.

131 { levels_ = l; }

Friends And Related Function Documentation

◆ factory

Wavelet factory ( const std::string &  name,
t_uint  nlevels 
)
friend

Creates a wavelet transform object.

Definition at line 8 of file wavelets.cc.

8  {
9  if (name == "dirac" or name == "Dirac") {
10  SOPT_MEDIUM_LOG("Creating Dirac Wavelet");
11  return Wavelet(daubechies_data(1), 0);
12  }
13 
14  if (name.substr(0, 2) == "DB" or name.substr(0, 2) == "db") {
15  std::istringstream sstr(name.substr(2, name.size() - 2));
16  t_uint l(0);
17  sstr >> l;
18  SOPT_MEDIUM_LOG("Creating Daubechies Wavelet {}, level {}", l, nlevels);
19  return Wavelet(daubechies_data(l), nlevels);
20  }
21  // Unknown input wavelet
22  throw std::exception();
23 }
#define SOPT_MEDIUM_LOG(...)
Medium priority message.
Definition: logging.h:225
WaveletData const & daubechies_data(t_uint n)
Factory function returning specific daubechie wavelet data.
size_t t_uint
Root of the type hierarchy for unsigned integers.
Definition: types.h:15

The documentation for this class was generated from the following file: