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>
110 void set_coeffs(
const Vec<T2> &b);
116 void set_state(
const Vec<T3> &state);
119 virtual T3
filter(
const T1 Sample);
151 template <
class T1,
class T2,
class T3>
164 void set_coeffs(
const Vec<T2> &a);
170 void set_state(
const Vec<T3> &state);
173 virtual T3
filter(
const T1 Sample);
209 template <
class T1,
class T2,
class T3>
232 void set_state(
const Vec<T3> &state);
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!");
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!");
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!");
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);
575 std::complex<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> >;
583 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> >;
591 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> >;
601 #endif // #ifndef FILTER_H int size() const
The size of the vector.
Vec< T3 > get_state() const
Get state of filter.
void set_state(const Vec< T3 > &state)
Set state of filter.
Autoregressive (AR) Filter Base Class.This class implements a autoregressive (AR) filter according to...
AR_Filter()
Class constructor.
virtual ~AR_Filter()
Class destructor.
virtual ~ARMA_Filter()
Class destructor.
MA_Filter()
Class default constructor.
virtual T3 operator()(const T1 Sample)
Filter a single sample.
Vec< T2 > get_coeffs_b() const
Filter b coefficient access function.
virtual T3 filter(const T1 Sample)=0
Pure virtual filter function. This is where the real filtering is done. Implement this function to cr...
void set_size(int size, bool copy=false)
Set length of vector. if copy = true then keeping the old values.
vec fir1(int N, double cutoff)
Design a Nth order FIR filter with cut-off frequency cutoff using the window method.
#define it_assert(t, s)
Abort if t is not true.
void clear()
Clears the filter memory.
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.
Virtual Filter Base Class.The class is templated as follows:
void set_state(const Vec< T3 > &state)
Set state of filter.
T max(const Vec< T > &v)
Maximum value of vector.
Moving Average Filter Base Class.This class implements a moving average (MA) filter according to whe...
vec filter(const vec &b, const vec &a, const vec &input)
ARMA filter functionThese functions implements a autoregressive moving average (ARMA) filter accordin...
void clear()
Clears the filter memory.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
int length() const
The size of the vector.
virtual ~MA_Filter()
Class destructor.
Autoregressive Moving Average (ARMA) Filter Base Class.This class implements a autoregressive moving ...
ARMA_Filter()
Class constructor.
Vec< T2 > get_coeffs() const
Filter coefficient access function.
void set_coeffs(const Vec< T2 > &a)
Set the filter coefficients (and order)
void get_coeffs(Vec< T2 > &b, Vec< T2 > &a) const
Filter coefficient access function.
void clear()
Set the vector to the all zero vector.
Vec< T3 > get_state() const
Get state of filter.
Filter()
Default constructor.
virtual ~Filter()
Virtual destructor.
void clear()
Clears the filter memory.
Templated Vector Class Definitions.