panwave
All Classes Functions
WaveletMath.h
1 //-------------------------------------------------------------------------------------------------------
2 // Copyright (C) Taylor Woll and panwave contributors. All rights reserved.
3 // Licensed under the MIT license. See LICENSE.txt file in the project root for
4 // full license information.
5 //-------------------------------------------------------------------------------------------------------
6 
7 #ifndef WAVELETMATH_H
8 #define WAVELETMATH_H
9 
10 #include <cstdint>
11 #include <vector>
12 
13 namespace panwave {
14 class Wavelet;
15 } // namespace panwave
16 
17 namespace panwave {
18 
24 enum class DyadicMode : uint8_t { Even = 0, Odd };
25 
31 enum class PaddingMode : uint8_t { Zeroes = 0, Symmetric };
32 
41 class WaveletMath {
42  public:
58  static void Decompose(const std::vector<double>* data, const Wavelet* wavelet,
59  std::vector<double>* approx_coeffs,
60  std::vector<double>* details_coeffs,
61  DyadicMode dyadic_mode, PaddingMode padding_mode);
62 
79  static void Reconstruct(const std::vector<double>* coeffs,
80  const std::vector<double>* reconstruction_coeffs,
81  std::vector<double>* data, const Wavelet* wavelet,
82  size_t data_size, DyadicMode dyadic_mode,
83  PaddingMode padding_mode);
84 
103  static void DyadicUpsample(const std::vector<double>* data,
104  std::vector<double>* data_upsampled,
105  DyadicMode dyadic_mode);
106 
126  static void DyadicDownsample(const std::vector<double>* data,
127  std::vector<double>* data_downsampled,
128  DyadicMode dyadic_mode);
129 
137  static void Convolve(const std::vector<double>* data,
138  const std::vector<double>* coeffs,
139  std::vector<double>* result);
140 
164  static void Pad(const std::vector<double>* data,
165  std::vector<double>* extended_data, size_t pad_left,
166  size_t pad_right, PaddingMode padding_mode);
167 };
168 
169 } // namespace panwave
170 
171 #endif // WAVELETMATH_H
panwave::Wavelet
Definition: Wavelet.h:21
panwave::WaveletMath
Definition: WaveletMath.h:41
panwave::WaveletMath::Decompose
static void Decompose(const std::vector< double > *data, const Wavelet *wavelet, std::vector< double > *approx_coeffs, std::vector< double > *details_coeffs, DyadicMode dyadic_mode, PaddingMode padding_mode)
Definition: WaveletMath.cc:118
panwave::WaveletMath::DyadicUpsample
static void DyadicUpsample(const std::vector< double > *data, std::vector< double > *data_upsampled, DyadicMode dyadic_mode)
Definition: WaveletMath.cc:98
panwave::WaveletMath::Reconstruct
static void Reconstruct(const std::vector< double > *coeffs, const std::vector< double > *reconstruction_coeffs, std::vector< double > *data, const Wavelet *wavelet, size_t data_size, DyadicMode dyadic_mode, PaddingMode padding_mode)
Definition: WaveletMath.cc:144
panwave::WaveletMath::Pad
static void Pad(const std::vector< double > *data, std::vector< double > *extended_data, size_t pad_left, size_t pad_right, PaddingMode padding_mode)
Definition: WaveletMath.cc:16
panwave::WaveletMath::DyadicDownsample
static void DyadicDownsample(const std::vector< double > *data, std::vector< double > *data_downsampled, DyadicMode dyadic_mode)
Definition: WaveletMath.cc:84
panwave::WaveletMath::Convolve
static void Convolve(const std::vector< double > *data, const std::vector< double > *coeffs, std::vector< double > *result)
Definition: WaveletMath.cc:61