36#include <itpp/itexports.h>
88ITPP_EXPORT
void fft(
const cvec &in, cvec &out);
90ITPP_EXPORT cvec
fft(
const cvec &in);
97ITPP_EXPORT cvec
fft(
const cvec &in,
const int N);
99ITPP_EXPORT
void ifft(
const cvec &in, cvec &out);
101ITPP_EXPORT cvec
ifft(
const cvec &in);
108ITPP_EXPORT cvec
ifft(
const cvec &in,
const int N);
111ITPP_EXPORT
void fft_real(
const vec& in, cvec &out);
120ITPP_EXPORT cvec
fft_real(
const vec &in,
const int N);
195ITPP_EXPORT
void dct(
const vec &in, vec &out);
197ITPP_EXPORT vec
dct(
const vec &in);
204ITPP_EXPORT vec
dct(
const vec &in,
const int N);
206ITPP_EXPORT
void idct(
const vec &in, vec &out);
208ITPP_EXPORT vec
idct(
const vec &in);
215ITPP_EXPORT vec
idct(
const vec &in,
const int N);
257 for(
int i = 0; i < N1; ++i) {
277 it_assert_debug((1 << m) == N,
"dht(): The vector size must be a power of two");
282 for(
int ib = 0; ib < N; ib += 2) {
283 vout(ib) = vin(ib) + vin(ib + 1);
284 vout(ib + 1) = vin(ib) - vin(ib + 1);
289 for(
int i = 1; i < m; ++i) {
292 for(
int k = 0; k < N; ++k) {
293 for(
int j = 0; j < l; ++j) {
295 vout(ib + j) += vout(ib + j + l);
296 vout(ib + j + l) = t - vout(ib + j + l);
303 vout /=
static_cast<T
>(std::sqrt(
static_cast<double>(vin.
size())));
311 it_assert_debug((1 << m) == N,
"self_dht(): The vector size must be a power "
315 for(
int i = 0; i < m; ++i) {
318 for(
int k = 0; k < N; ++k) {
319 for(
int j = 0; j < l; ++j) {
321 v(ib + j) += v(ib + j + l);
322 v(ib + j + l) = t - v(ib + j + l);
329 v /=
static_cast<T
>(std::sqrt(
static_cast<double>(v.
size())));
361 for(
int i = 0; i < m.
rows(); ++i) {
366 for(
int i = 0; i < m.
cols(); ++i) {
381 for(
int i = 0; i < m.
rows(); ++i) {
386 for(
int i = 0; i < m.
cols(); ++i) {
401ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
dht(
const vec &v);
402ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
dht(
const cvec &v);
403ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void dht(
const vec &vin, vec &vout);
404ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void dht(
const cvec &vin, cvec &vout);
406ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void self_dht(vec &v);
407ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void self_dht(cvec &v);
409ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
dwht(
const vec &v);
410ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
dwht(
const cvec &v);
411ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void dwht(
const vec &vin, vec &vout);
412ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void dwht(
const cvec &vin, cvec &vout);
414ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void self_dwht(vec &v);
415ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void self_dwht(cvec &v);
417ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT mat
dht2(
const mat &m);
418ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cmat
dht2(
const cmat &m);
420ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT mat
dwht2(
const mat &m);
421ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cmat
dwht2(
const cmat &m);
Vec< Num_T > get_row(int r) const
Get row r.
void set_col(int c, const Vec< Num_T > &v)
Set column c to vector v.
int rows() const
The number of rows.
int cols() const
The number of columns.
void set_row(int r, const Vec< Num_T > &v)
Set row r to vector v.
Vec< Num_T > get_col(int c) const
Get column c.
int size() const
The size of the vector.
void set_size(int size, bool copy=false)
Set length of vector. if copy = true then keeping the old values.
ITPP_EXPORT void idct(const vec &in, vec &out)
Inverse Discrete Cosine Transform (IDCT)
ITPP_EXPORT void dct(const vec &in, vec &out)
Discrete Cosine Transform (DCT)
ITPP_EXPORT bool have_cosine_transforms()
Run-time test if library is built with cosine transforms enabled.
#define it_assert_debug(t, s)
Abort if t is not true and NDEBUG is not defined.
ITPP_EXPORT void ifft(const cvec &in, cvec &out)
Inverse Fast Fourier Transform.
ITPP_EXPORT void fft_real(const vec &in, cvec &out)
Real Fast Fourier Transform.
ITPP_EXPORT void ifft_real(const cvec &in, vec &out)
Inverse Real Fast Fourier Transform.
ITPP_EXPORT bool have_fourier_transforms()
Run-time test if library is built with Fast Fourier Transforms enabled.
ITPP_EXPORT void fft(const cvec &in, cvec &out)
Fast Fourier Transform.
Mat< T > dwht2(const Mat< T > &m)
Fast 2D Walsh Hadamard Transform.
Vec< T > dwht(const Vec< T > &v)
Fast Walsh Hadamard Transform.
Vec< T > dht(const Vec< T > &v)
Fast Hadamard Transform.
void self_dht(Vec< T > &v)
Fast Hadamard Transform - memory efficient. Stores the result in v.
Mat< T > dht2(const Mat< T > &m)
Fast 2D Hadamard Transform.
void self_dwht(Vec< T > &v)
Fast Walsh Hadamard Transform - memory efficient (result in v)
int levels2bits(int n)
Calculate the number of bits needed to represent n different values (levels).
void transpose(const Mat< T > &m, Mat< T > &out)
Transposition of the matrix m returning the transposed matrix in out.
Matrix Class Definitions.
Various functions on vectors and matrices - header file.
void bitrv(Vec< T > &out)
Bit reverse.
Templated Vector Class Definitions.