33#include <itpp/itexports.h>
53template <
class T1,
class T2,
class T3>
70 virtual T3
filter(
const T1 Sample) = 0;
97template <
class T1,
class T2,
class T3>
119 virtual T3 filter(
const T1 Sample);
151template <
class T1,
class T2,
class T3>
173 virtual T3 filter(
const T1 Sample);
209template <
class T1,
class T2,
class T3>
235 virtual T3 filter(
const T1 Sample);
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>
319 for (
int i = 0; i < x.
length(); i++) {
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++) {
363 state(n) = mem(offset);
364 offset = (offset + 1) % mem.size();
370template <
class T1,
class T2,
class T3>
373 it_assert(init ==
true,
"MA_Filter: filter coefficients are not set!");
374 it_assert(state.
size() == mem.size(),
"MA_Filter: Invalid state vector!");
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++) {
444 state(n) = mem(offset);
445 offset = (offset + 1) % mem.size();
451template <
class T1,
class T2,
class T3>
454 it_assert(init ==
true,
"AR_Filter: filter coefficients are not set!");
455 it_assert(state.
size() == mem.size(),
"AR_Filter: Invalid state vector!");
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!");
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++) {
525 state(n) = mem(offset);
526 offset = (offset + 1) % mem.size();
532template <
class T1,
class T2,
class T3>
535 it_assert(init ==
true,
"ARMA_Filter: filter coefficients are not set!");
536 it_assert(state.
size() == mem.size(),
"ARMA_Filter: Invalid state vector!");
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.
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.
int size() const
The size of the vector.
void clear()
Set the vector to the all zero vector.
void set_size(int size, bool copy=false)
Set length of vector. if copy = true then keeping the old values.
int length() const
The size of the 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.
T max(const Vec< T > &v)
Maximum value of vector.
Templated Vector Class Definitions.