9 #ifndef MCL_FIRFILTER_H
10 #define MCL_FIRFILTER_H
26 FirFilter(
const std::vector<Real> B) noexcept;
37 virtual void Filter(
const Real* __restrict input_data,
const Int num_samples,
38 Real* __restrict output_data) noexcept;
54 const Int update_length = 0) noexcept;
57 void Reset() noexcept;
73 #ifdef MCL_APPLE_ACCELERATE
74 Real FilterAppleDsp(
Real input_sample) noexcept;
75 void FilterAppleDsp(
const Real* __restrict input_data,
const Int num_samples,
76 Real* __restrict output_data) noexcept;
80 void GetExtendedInput(
const Real* __restrict input_data,
const Int num_samples,
81 T* __restrict extended_input_data) {
84 for (
Int i=0; i<counter_; ++i) {
85 extended_input_data[i] = delay_line_[counter_-i-1];
91 for (
Int i=counter_; i<(length_-1); ++i) {
92 extended_input_data[i] = delay_line_[length_-1-(i-counter_)];
97 for (
Int i=(length_-1); i<(length_-1+num_samples); ++i) {
98 extended_input_data[i] = input_data[i-(length_-1)];
102 Real FilterStraight(
Real input_sample) noexcept;
104 std::vector<Real> FilterSequential(
const std::vector<Real>& input) noexcept;
110 void UpdateCoefficients() noexcept;
112 std::vector<
Real> impulse_response_;
113 std::vector<
Real> impulse_response_old_;
121 std::vector<
Real> coefficients_;
122 std::vector<
Real> delay_line_;
137 Real* output_data) noexcept {
138 Multiply(input_data, num_samples, gain_, output_data);
155 Real* output_data) noexcept {
156 for (
Int i=0; i<num_samples; ++i) {
157 output_data[i] = input_data[i];