36 #ifndef IIR1_CASCADE_H
37 #define IIR1_CASCADE_H
42 #include "MathSupplement.h"
62 Biquad* stageArray =
nullptr;
78 if ((index < 0) || (index >= m_numStages))
79 throw_invalid_argument(
"Index out of bounds.");
80 return m_stageArray[index];
87 complex_t response (
double normalizedFrequency)
const;
92 std::vector<PoleZeroPair> getPoleZeros ()
const;
94 void setCascadeStorage (
const Storage& storage);
96 void applyScale (
double scale);
103 Biquad* m_stageArray =
nullptr;
113 template <
int MaxStages,
class StateType>
126 for (
auto &state: m_states)
136 void setup (
const double (&sosCoefficients)[MaxStages][6]) {
137 for (
int i = 0; i < MaxStages; i++) {
139 sosCoefficients[i][3],
140 sosCoefficients[i][4],
141 sosCoefficients[i][5],
142 sosCoefficients[i][0],
143 sosCoefficients[i][1],
144 sosCoefficients[i][2]);
154 template <
typename Sample>
158 StateType* state = m_states;
159 for (
const auto &stage: m_stages)
160 out = (state++)->
filter(out, stage);
161 return static_cast<Sample
> (out);
170 s.maxStages = MaxStages;
171 s.stageArray = m_stages;
176 Biquad m_stages[MaxStages] = {};
177 StateType m_states[MaxStages] = {};
void setCoefficients(double a0, double a1, double a2, double b0, double b1, double b2)
Definition: Biquad.cpp:123
Definition: Cascade.h:114
const Cascade::Storage getCascadeStorage()
Definition: Cascade.h:167
void setup(const double(&sosCoefficients)[MaxStages][6])
Definition: Cascade.h:136
Sample filter(const Sample in)
Definition: Cascade.h:155
void reset()
Definition: Cascade.h:124
int getNumStages() const
Definition: Cascade.h:68
Definition: Biquad.cpp:40