MCL
A C++ library mirroring some of the most common Matlab functions.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
digitalfilter.h
Go to the documentation of this file.
1 /*
2  MCL
3  Copyright (c) 2012-18, Enzo De Sena
4  All rights reserved.
5 
6  Authors: Enzo De Sena, enzodesena@gmail.com
7  */
8 
9 #ifndef MCL_DIGITALFILTER_H
10 #define MCL_DIGITALFILTER_H
11 
12 #include <vector>
13 
14 #include "mcltypes.h"
15 
16 namespace mcl {
17 
20 public:
21 
22  virtual void Filter(const Real* input_data, const Int num_samples,
23  Real* output_data) noexcept {
24  FilterSerial(input_data, num_samples, output_data);
25  }
26 
27  void FilterSerial(const Real* input_data, const Int num_samples,
28  Real* output_data) noexcept {
29  ASSERT(num_samples>=0);
30  ASSERT(input_data);
31  ASSERT(output_data);
32  for (Int i=0; i<num_samples; ++i) {
33  output_data[i] = Filter(input_data[i]);
34  }
35  }
36 
38  virtual Real Filter(const Real input) noexcept = 0;
39 
41  std::vector<Real> Filter(const std::vector<Real>& input) noexcept {
42  std::vector<Real> output(input.size(), 0.0);
43  Filter(input.data(), input.size(), output.data());
44  return output;
45  }
46 
48  virtual void Reset() = 0;
49 
50  virtual ~DigitalFilter() {};
51 };
52 
54 class FilterBank {
55 public:
57  virtual std::vector<Real> Filter(const Real input) = 0;
58 
60  virtual std::vector<std::vector<Real> >
61  Filter(const std::vector<Real>& input) = 0;
62 
64  virtual void Reset() = 0;
65 
66  virtual Int num_filters() = 0;
67 
68  virtual ~FilterBank() {};
69 };
70 
71 
72 } // namespace mcl
73 
74 #endif