33#include <itpp/itexports.h>
53template <
class T1,
class T2,
class T3>
97template <
class T1,
class T2,
class T3>
151template <
class T1,
class T2,
class T3>
209template <
class T1,
class T2,
class T3>
268ITPP_EXPORT vec
filter(
const vec &b,
const vec &a,
const vec &input);
269ITPP_EXPORT cvec
filter(
const vec &b,
const vec &a,
const cvec &input);
270ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input);
271ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const vec &input);
273ITPP_EXPORT vec
filter(
const vec &b,
const int one,
const vec &input);
274ITPP_EXPORT cvec
filter(
const vec &b,
const int one,
const cvec &input);
275ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const cvec &input);
276ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const vec &input);
278ITPP_EXPORT vec
filter(
const int one,
const vec &a,
const vec &input);
279ITPP_EXPORT cvec
filter(
const int one,
const vec &a,
const cvec &input);
280ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const cvec &input);
281ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const vec &input);
284ITPP_EXPORT vec
filter(
const vec &b,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
285ITPP_EXPORT cvec
filter(
const vec &b,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
286ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
287ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
289ITPP_EXPORT vec
filter(
const vec &b,
const int one,
const vec &input,
const vec &state_in, vec &state_out);
290ITPP_EXPORT cvec
filter(
const vec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
291ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
292ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const vec &input,
const cvec &state_in, cvec &state_out);
294ITPP_EXPORT vec
filter(
const int one,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
295ITPP_EXPORT cvec
filter(
const int one,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
296ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
297ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
306ITPP_EXPORT vec
fir1(
int N,
double cutoff);
314template <
class T1,
class T2,
class T3>
328template <
class T1,
class T2,
class T3>
335template <
class T1,
class T2,
class T3>
342template <
class T1,
class T2,
class T3>
354template <
class T1,
class T2,
class T3>
357 it_assert(init ==
true,
"MA_Filter: filter coefficients are not set!");
362 for (
int n = 0; n < mem.size(); n++) {
370template <
class T1,
class T2,
class T3>
373 it_assert(init ==
true,
"MA_Filter: filter coefficients are not set!");
380template <
class T1,
class T2,
class T3>
383 it_assert(init ==
true,
"MA_Filter: Filter coefficients are not set!");
387 int L = mem.
length() - inptr;
389 for (
int i = 0;
i < L;
i++) {
390 s += coeffs(
i) * mem(inptr +
i);
392 for (
int i = 0; i < inptr; i++) {
393 s += coeffs(L + i) * mem(i);
398 inptr += mem.length();
405template <
class T1,
class T2,
class T3>
412template <
class T1,
class T2,
class T3>
418template <
class T1,
class T2,
class T3>
422 it_assert(
a(0) !=
T2(0),
"AR_Filter: a(0) cannot be 0!");
428 mem.set_size(coeffs.size() - 1,
false);
435template <
class T1,
class T2,
class T3>
438 it_assert(init ==
true,
"AR_Filter: filter coefficients are not set!");
443 for (
int n = 0; n < mem.size(); n++) {
451template <
class T1,
class T2,
class T3>
454 it_assert(init ==
true,
"AR_Filter: filter coefficients are not set!");
461template <
class T1,
class T2,
class T3>
464 it_assert(init ==
true,
"AR_Filter: Filter coefficients are not set!");
470 int L = mem.
size() - inptr;
471 for (
int i = 0;
i < L;
i++) {
472 s -= mem(
i + inptr) * coeffs(
i + 1);
474 for (
int i = 0; i < inptr; i++) {
475 s -= mem(i) * coeffs(L + i + 1);
488template <
class T1,
class T2,
class T3>
495template <
class T1,
class T2,
class T3>
501template <
class T1,
class T2,
class T3>
505 it_assert(
a(0) !=
T2(0),
"ARMA_Filter: a(0) cannot be 0!");
510 mem.set_size(std::max(
a.
size(), b.
size()) - 1,
false);
516template <
class T1,
class T2,
class T3>
519 it_assert(init ==
true,
"ARMA_Filter: filter coefficients are not set!");
524 for (
int n = 0; n < mem.size(); n++) {
532template <
class T1,
class T2,
class T3>
535 it_assert(init ==
true,
"ARMA_Filter: filter coefficients are not set!");
542template <
class T1,
class T2,
class T3>
545 it_assert(init ==
true,
"ARMA_Filter: Filter coefficients are not set!");
549 for (
int i = 0;
i < acoeffs.
size() - 1;
i++) {
550 z -= mem((
i + inptr) % mem.size()) * acoeffs(
i + 1);
554 for (
int i = 0; i < bcoeffs.size() - 1; i++) {
555 s += mem((i + inptr) % mem.size()) * bcoeffs(i + 1);
573ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter<double, double, double>;
574ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< double, std::complex<double>,
575 std::complex<double> >;
576ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< std::complex<double>, double,
577 std::complex<double> >;
578ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< std::complex<double>, std::complex<double>,
579 std::complex<double> >;
581ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter<double, double, double>;
582ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< double, std::complex<double>,
583 std::complex<double> >;
584ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< std::complex<double>,
585 double, std::complex<double> >;
586ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< std::complex<double>, std::complex<double>,
587 std::complex<double> >;
589ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter<double, double, double>;
590ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter< double, std::complex<double>,
591 std::complex<double> >;
592ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter< std::complex<double>,
593 double, std::complex<double> >;
594ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter< std::complex<double>, std::complex<double>,
595 std::complex<double> >;
Autoregressive Moving Average (ARMA) Filter Base Class.
void get_coeffs(Vec< T2 > &b, Vec< T2 > &a) const
Filter coefficient access function.
virtual ~ARMA_Filter()
Class destructor.
void clear()
Clears the filter memory.
Vec< T3 > get_state() const
Get state of filter.
Vec< T2 > get_coeffs_b() const
Filter b coefficient access function.
ARMA_Filter()
Class constructor.
void set_state(const Vec< T3 > &state)
Set state of filter.
void set_coeffs(const Vec< T2 > &b, const Vec< T2 > &a)
Set the filter coefficients (and order)
Vec< T2 > get_coeffs_a() const
Filter a coefficient access function.
Autoregressive (AR) Filter Base Class.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
void set_coeffs(const Vec< T2 > &a)
Set the filter coefficients (and order)
Vec< T3 > get_state() const
Get state of filter.
void set_state(const Vec< T3 > &state)
Set state of filter.
virtual ~AR_Filter()
Class destructor.
AR_Filter()
Class constructor.
void clear()
Clears the filter memory.
int size() const
Returns the number of data elements in the array object.
void set_size(int n, bool copy=false)
Resizing an Array<T>.
int length() const
Returns the number of data elements in the array object.
Virtual Filter Base Class.
virtual Vec< T3 > operator()(const Vec< T1 > &v)
Filter a vector.
virtual ~Filter()
Virtual destructor.
virtual T3 filter(const T1 Sample)=0
Pure virtual filter function. This is where the real filtering is done. Implement this function to cr...
virtual T3 operator()(const T1 Sample)
Filter a single sample.
Filter()
Default constructor.
Moving Average Filter Base Class.
void set_coeffs(const Vec< T2 > &b)
Set the filter coefficients.
void set_state(const Vec< T3 > &state)
Set state of filter.
MA_Filter()
Class default constructor.
MA_Filter(const Vec< T2 > &b)
Class constructor setting the coefficients in the filter.
virtual ~MA_Filter()
Class destructor.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
Vec< T3 > get_state() const
Get state of filter.
void clear()
Clears the filter memory.
void clear()
Set the vector to the all zero vector.
#define it_assert(t, s)
Abort if t is not true.
vec fir1(int N, double cutoff)
Design a Nth order FIR filter with cut-off frequency cutoff using the window method.
vec filter(const vec &b, const vec &a, const vec &input)
ARMA filter function.
Templated Vector Class Definitions.