40#include "MathSupplement.h"
49 static const char errPoleisNaN[] =
"Pole to add is NaN.";
50 static const char errZeroisNaN[] =
"Zero to add is NaN.";
52 static const char errCantAdd2ndOrder[] =
"Can't add 2nd order after a 1st order filter.";
54 static const char errPolesNotComplexConj[] =
"Poles not complex conjugate.";
55 static const char errZerosNotComplexConj[] =
"Zeros not complex conjugate.";
57 static const char pairIndexOutOfBounds[] =
"Pair index out of bounds.";
74 , m_maxPoles (maxPoles)
82 m_maxPoles = other.m_maxPoles;
83 m_pair = other.m_pair;
91 int getNumPoles ()
const
96 int getMaxPoles ()
const
101 void add (
const complex_t& pole,
const complex_t& zero)
104 throw_invalid_argument(errCantAdd2ndOrder);
105 if (Iir::is_nan(pole))
106 throw_invalid_argument(errPoleisNaN);
107 if (Iir::is_nan(zero))
108 throw_invalid_argument(errZeroisNaN);
113 void addPoleZeroConjugatePairs (
const complex_t& pole,
114 const complex_t& zero)
117 throw_invalid_argument(errCantAdd2ndOrder);
118 if (Iir::is_nan(pole))
119 throw_invalid_argument(errPoleisNaN);
120 if (Iir::is_nan(zero))
121 throw_invalid_argument(errZeroisNaN);
123 pole, zero, std::conj (pole), std::conj (zero));
130 throw_invalid_argument(errCantAdd2ndOrder);
132 throw_invalid_argument(errPolesNotComplexConj);
134 throw_invalid_argument(errZerosNotComplexConj);
135 m_pair[m_numPoles/2] =
PoleZeroPair (poles.first, zeros.first,
136 poles.second, zeros.second);
142 if ((pairIndex < 0) || (pairIndex >= (m_numPoles+1)/2))
143 throw_invalid_argument(pairIndexOutOfBounds);
144 return m_pair[pairIndex];
149 return getPair (pairIndex);
152 double getNormalW ()
const
157 double getNormalGain ()
const
162 void setNormal (
double w,
double g)
172 double m_normalW = 0;
173 double m_normalGain = 1;
181 template <
int MaxPoles>
Definition: Biquad.cpp:40
bool isMatchedPair() const
Definition: Types.h:77