36 #ifndef IIR1_CASCADE_H
37 #define IIR1_CASCADE_H
42 #include "MathSupplement.h"
64 : maxStages (maxStages_)
65 , stageArray (stageArray_)
69 const int maxStages = 0;
70 Biquad*
const stageArray =
nullptr;
86 if ((index < 0) || (index >= m_numStages))
87 throw_invalid_argument(
"Index out of bounds.");
88 return m_stageArray[index];
95 complex_t response (
double normalizedFrequency)
const;
100 std::vector<PoleZeroPair> getPoleZeros ()
const;
105 void setCascadeStorage (
const Storage& storage);
107 void applyScale (
double scale);
114 Biquad* m_stageArray =
nullptr;
125 template <
int MaxStages,
class StateType>
133 for (
auto &state: m_states)
143 void setup (
const double (&sosCoefficients)[MaxStages][6]) {
144 for (
int i = 0; i < MaxStages; i++) {
145 m_stages[i].setCoefficients(
146 sosCoefficients[i][3],
147 sosCoefficients[i][4],
148 sosCoefficients[i][5],
149 sosCoefficients[i][0],
150 sosCoefficients[i][1],
151 sosCoefficients[i][2]);
161 template <
typename Sample>
165 StateType* state = m_states;
166 for (
const auto &stage: m_stages)
167 out = (state++)->filter(out, stage);
168 return static_cast<Sample
> (out);
180 Biquad m_stages[MaxStages] = {};
181 StateType m_states[MaxStages] = {};
Definition: Cascade.h:126
const Cascade::Storage getCascadeStorage()
Definition: Cascade.h:174
void setup(const double(&sosCoefficients)[MaxStages][6])
Definition: Cascade.h:143
Sample filter(const Sample in)
Definition: Cascade.h:162
void reset()
Definition: Cascade.h:131
int getNumStages() const
Definition: Cascade.h:76
Definition: Biquad.cpp:40
Storage(int maxStages_, Biquad *const stageArray_)
Definition: Cascade.h:63