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 vec
filter(
const vec &b,
const vec &a,
const vec &input);
269 cvec
filter(
const vec &b,
const vec &a,
const cvec &input);
270 cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input);
271 cvec
filter(
const cvec &b,
const cvec &a,
const vec &input);
273 vec
filter(
const vec &b,
const int one,
const vec &input);
274 cvec
filter(
const vec &b,
const int one,
const cvec &input);
275 cvec
filter(
const cvec &b,
const int one,
const cvec &input);
276 cvec
filter(
const cvec &b,
const int one,
const vec &input);
278 vec
filter(
const int one,
const vec &a,
const vec &input);
279 cvec
filter(
const int one,
const vec &a,
const cvec &input);
280 cvec
filter(
const int one,
const cvec &a,
const cvec &input);
281 cvec
filter(
const int one,
const cvec &a,
const vec &input);
284 vec
filter(
const vec &b,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
285 cvec
filter(
const vec &b,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
286 cvec
filter(
const cvec &b,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
287 cvec
filter(
const cvec &b,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
289 vec
filter(
const vec &b,
const int one,
const vec &input,
const vec &state_in, vec &state_out);
290 cvec
filter(
const vec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
291 cvec
filter(
const cvec &b,
const int one,
const cvec &input,
const cvec &state_in, cvec &state_out);
292 cvec
filter(
const cvec &b,
const int one,
const vec &input,
const cvec &state_in, cvec &state_out);
294 vec
filter(
const int one,
const vec &a,
const vec &input,
const vec &state_in, vec &state_out);
295 cvec
filter(
const int one,
const vec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
296 cvec
filter(
const int one,
const cvec &a,
const cvec &input,
const cvec &state_in, cvec &state_out);
297 cvec
filter(
const int one,
const cvec &a,
const vec &input,
const cvec &state_in, cvec &state_out);
306 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!");
427 mem.
set_size(coeffs.size() - 1,
false);
434 template <
class T1,
class T2,
class T3>
437 it_assert(init ==
true,
"AR_Filter: filter coefficients are not set!");
442 for (
int n = 0; n < mem.size(); n++) {
443 state(n) = mem(offset);
444 offset = (offset + 1) % mem.size();
450 template <
class T1,
class T2,
class T3>
453 it_assert(init ==
true,
"AR_Filter: filter coefficients are not set!");
454 it_assert(state.
size() == mem.size(),
"AR_Filter: Invalid state vector!");
460 template <
class T1,
class T2,
class T3>
463 it_assert(init ==
true,
"AR_Filter: Filter coefficients are not set!");
469 int L = mem.size() - inptr;
470 for (
int i = 0; i < L; i++) {
471 s -= mem(i + inptr) * coeffs(i + 1);
473 for (
int i = 0; i < inptr; i++) {
474 s -= mem(i) * coeffs(L + i + 1);
487 template <
class T1,
class T2,
class T3>
494 template <
class T1,
class T2,
class T3>
500 template <
class T1,
class T2,
class T3>
504 it_assert(a(0) != T2(0),
"ARMA_Filter: a(0) cannot be 0!");
515 template <
class T1,
class T2,
class T3>
518 it_assert(init ==
true,
"ARMA_Filter: filter coefficients are not set!");
523 for (
int n = 0; n < mem.size(); n++) {
524 state(n) = mem(offset);
525 offset = (offset + 1) % mem.size();
531 template <
class T1,
class T2,
class T3>
534 it_assert(init ==
true,
"ARMA_Filter: filter coefficients are not set!");
535 it_assert(state.
size() == mem.size(),
"ARMA_Filter: Invalid state vector!");
541 template <
class T1,
class T2,
class T3>
544 it_assert(init ==
true,
"ARMA_Filter: Filter coefficients are not set!");
548 for (
int i = 0; i < acoeffs.size() - 1; i++) {
549 z -= mem((i + inptr) % mem.size()) * acoeffs(i + 1);
553 for (
int i = 0; i < bcoeffs.size() - 1; i++) {
554 s += mem((i + inptr) % mem.size()) * bcoeffs(i + 1);
575 extern template class MA_Filter<double, double, double>;
576 extern template class MA_Filter < double, std::complex<double>,
577 std::complex<double> >;
578 extern template class MA_Filter < std::complex<double>, double,
579 std::complex<double> >;
580 extern template class MA_Filter < std::complex<double>, std::complex<double>,
581 std::complex<double> >;
583 extern template class AR_Filter<double, double, double>;
584 extern template class AR_Filter < double, std::complex<double>,
585 std::complex<double> >;
586 extern template class AR_Filter < std::complex<double>,
587 double, std::complex<double> >;
588 extern template class AR_Filter < std::complex<double>, std::complex<double>,
589 std::complex<double> >;
591 extern template class ARMA_Filter<double, double, double>;
592 extern template class ARMA_Filter < double, std::complex<double>,
593 std::complex<double> >;
594 extern template class ARMA_Filter < std::complex<double>,
595 double, std::complex<double> >;
596 extern template class ARMA_Filter < std::complex<double>, std::complex<double>,
597 std::complex<double> >;
605 #endif // #ifndef FILTER_H