From 61a63a673ca3759d5c7c168cbad0e8cc9cacabb6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 26 Nov 2018 22:34:04 -0500 Subject: [PATCH] Adds a negative operator. --- SignalProcessing/FIRFilter.cpp | 13 +++++++++++++ SignalProcessing/FIRFilter.hpp | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/SignalProcessing/FIRFilter.cpp b/SignalProcessing/FIRFilter.cpp index e7d593dd9..ef92db1f7 100644 --- a/SignalProcessing/FIRFilter.cpp +++ b/SignalProcessing/FIRFilter.cpp @@ -114,6 +114,9 @@ FIRFilter::FIRFilter(std::size_t number_of_taps, float input_sample_rate, float std::size_t Np = (number_of_taps - 1) / 2; float two_over_sample_rate = 2.0f / input_sample_rate; + // Clamp the high cutoff frequency. + high_frequency = std::min(high_frequency, input_sample_rate * 0.5f); + std::vector A(Np+1); A[0] = 2.0f * (high_frequency - low_frequency) / input_sample_rate; for(unsigned int i = 1; i <= Np; ++i) { @@ -146,6 +149,16 @@ FIRFilter FIRFilter::operator+(const FIRFilter &rhs) const { return FIRFilter(sum); } +FIRFilter FIRFilter::operator-() const { + std::vector negative_coefficients; + + for(const auto coefficient: get_coefficients()) { + negative_coefficients.push_back(1.0f - coefficient); + } + + return FIRFilter(negative_coefficients); +} + FIRFilter FIRFilter::operator*(const FIRFilter &rhs) const { std::vector coefficients = get_coefficients(); std::vector rhs_coefficients = rhs.get_coefficients(); diff --git a/SignalProcessing/FIRFilter.hpp b/SignalProcessing/FIRFilter.hpp index c6c7e7e56..8ee2d09bd 100644 --- a/SignalProcessing/FIRFilter.hpp +++ b/SignalProcessing/FIRFilter.hpp @@ -83,6 +83,11 @@ class FIRFilter { */ FIRFilter operator*(const FIRFilter &) const; + /*! + @returns A filter that would have the opposite effect of this filter. + */ + FIRFilter operator-() const; + private: std::vector filter_coefficients_;