33 #include <itpp/itexports.h>
53 template <
class T1,
class T2,
class T3>
70 virtual T3
filter(
const T1 Sample) = 0;
97 template <
class T1,
class T2,
class T3>
119 virtual T3 filter(
const T1 Sample);
151 template <
class T1,
class T2,
class T3>
173 virtual T3 filter(
const T1 Sample);
209 template <
class T1,
class T2,
class T3>
235 virtual T3 filter(
const T1 Sample);
268 ITPP_EXPORT vec
filter(
const vec &b,
const vec &a,
const vec &input);
269 ITPP_EXPORT cvec
filter(
const vec &b,
const vec &a,
const cvec &input);
270 ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input);
271 ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const vec &input);
273 ITPP_EXPORT vec
filter(
const vec &b,
const int one,
const vec &input);
274 ITPP_EXPORT cvec
filter(
const vec &b,
const int one,
const cvec &input);
275 ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const cvec &input);
276 ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const vec &input);
278 ITPP_EXPORT vec
filter(
const int one,
const vec &a,
const vec &input);
279 ITPP_EXPORT cvec
filter(
const int one,
const vec &a,
const cvec &input);
280 ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const cvec &input);
281 ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const vec &input);
284 ITPP_EXPORT vec
filter(
const vec &b,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
285 ITPP_EXPORT cvec
filter(
const vec &b,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
286 ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
287 ITPP_EXPORT cvec
filter(
const cvec &b,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
289 ITPP_EXPORT vec
filter(
const vec &b,
const int one,
const vec &input,
const vec &state_in, vec &state_out);
290 ITPP_EXPORT cvec
filter(
const vec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
291 ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
292 ITPP_EXPORT cvec
filter(
const cvec &b,
const int one,
const vec &input,
const cvec &state_in, cvec &state_out);
294 ITPP_EXPORT vec
filter(
const int one,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
295 ITPP_EXPORT cvec
filter(
const int one,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
296 ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
297 ITPP_EXPORT cvec
filter(
const int one,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
306 ITPP_EXPORT vec
fir1(
int N,
double cutoff);
314 template <
class T1,
class T2,
class T3>
319 for (
int i = 0; i < x.
length(); i++) {
328 template <
class T1,
class T2,
class T3>
335 template <
class T1,
class T2,
class T3>
342 template <
class T1,
class T2,
class T3>
354 template <
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();
370 template <
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!");
380 template <
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();
405 template <
class T1,
class T2,
class T3>
412 template <
class T1,
class T2,
class T3>
418 template <
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);
435 template <
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();
451 template <
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!");
461 template <
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);
488 template <
class T1,
class T2,
class T3>
495 template <
class T1,
class T2,
class T3>
501 template <
class T1,
class T2,
class T3>
505 it_assert(a(0) != T2(0),
"ARMA_Filter: a(0) cannot be 0!");
516 template <
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();
532 template <
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!");
542 template <
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);
573 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter<double, double, double>;
574 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< double, std::complex<double>,
575 std::complex<double> >;
576 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< std::complex<double>, double,
577 std::complex<double> >;
578 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT MA_Filter< std::complex<double>, std::complex<double>,
579 std::complex<double> >;
581 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter<double, double, double>;
582 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< double, std::complex<double>,
583 std::complex<double> >;
584 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< std::complex<double>,
585 double, std::complex<double> >;
586 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT AR_Filter< std::complex<double>, std::complex<double>,
587 std::complex<double> >;
589 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter<double, double, double>;
590 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter< double, std::complex<double>,
591 std::complex<double> >;
592 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT ARMA_Filter< std::complex<double>,
593 double, std::complex<double> >;
594 ITPP_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.
Vec< T2 > get_coeffs_a() const
Filter a coefficient access function.
void clear()
Clears the filter memory.
Vec< T3 > get_state() const
Get state of filter.
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_b() const
Filter b coefficient access function.
Autoregressive (AR) Filter Base Class.
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.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
virtual ~AR_Filter()
Class destructor.
AR_Filter()
Class constructor.
void clear()
Clears the filter memory.
Virtual Filter Base Class.
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.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
MA_Filter(const Vec< T2 > &b)
Class constructor setting the coefficients in the filter.
virtual ~MA_Filter()
Class destructor.
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.