/* MCL Copyright (c) 2012-18, Enzo De Sena All rights reserved. Authors: Enzo De Sena, enzodesena@gmail.com */ #ifndef MCL_DIGITALFILTER_H #define MCL_DIGITALFILTER_H #include #include "mcltypes.h" namespace mcl { /** Digital filter abstract class */ class DigitalFilter { public: virtual void Filter(const Real* input_data, const Int num_samples, Real* output_data) noexcept { FilterSerial(input_data, num_samples, output_data); } void FilterSerial(const Real* input_data, const Int num_samples, Real* output_data) noexcept { ASSERT(num_samples>=0); ASSERT(input_data); ASSERT(output_data); for (Int i=0; i Filter(const std::vector& input) noexcept { std::vector output(input.size(), 0.0); Filter(input.data(), input.size(), output.data()); return output; } /** Resets the state of the filter */ virtual void Reset() = 0; virtual ~DigitalFilter() {}; }; /** Filter bank abstract class */ class FilterBank { public: /** Returns the output of the filter bank for an input equal to `input`. Hello world! */ virtual std::vector Filter(const Real input) = 0; /** Returns the output of the filter bank for a given input. */ virtual std::vector > Filter(const std::vector& input) = 0; /** Resets the state of the filter */ virtual void Reset() = 0; virtual Int num_filters() = 0; virtual ~FilterBank() {}; }; } // namespace mcl #endif