45 Iir( std::vector<StkFloat> &bCoefficients, std::vector<StkFloat> &aCoefficients );
58 void setCoefficients( std::vector<StkFloat> &bCoefficients, std::vector<StkFloat> &aCoefficients,
bool clearState =
false );
68 void setNumerator( std::vector<StkFloat> &bCoefficients,
bool clearState =
false );
80 void setDenominator( std::vector<StkFloat> &aCoefficients,
bool clearState =
false );
83 StkFloat
lastOut(
void )
const {
return lastFrame_[0]; };
86 StkFloat
tick( StkFloat input );
119 inputs_[0] = gain_ * input;
120 for ( i=b_.size()-1; i>0; i-- ) {
121 outputs_[0] += b_[i] * inputs_[i];
122 inputs_[i] = inputs_[i-1];
124 outputs_[0] += b_[0] * inputs_[0];
126 for ( i=a_.size()-1; i>0; i-- ) {
127 outputs_[0] += -a_[i] * outputs_[i];
128 outputs_[i] = outputs_[i-1];
131 lastFrame_[0] = outputs_[0];
132 return lastFrame_[0];
137 #if defined(_STK_DEBUG_)
138 if ( channel >= frames.
channels() ) {
139 oStream_ <<
"Iir::tick(): channel and StkFrames arguments are incompatible!";
144 StkFloat *samples = &frames[channel];
146 unsigned int hop = frames.
channels();
147 for (
unsigned int j=0; j<frames.
frames(); j++, samples += hop ) {
149 inputs_[0] = gain_ * *samples;
150 for ( i=b_.size()-1; i>0; i-- ) {
151 outputs_[0] += b_[i] * inputs_[i];
152 inputs_[i] = inputs_[i-1];
154 outputs_[0] += b_[0] * inputs_[0];
156 for ( i=a_.size()-1; i>0; i-- ) {
157 outputs_[0] += -a_[i] * outputs_[i];
158 outputs_[i] = outputs_[i-1];
161 *samples = outputs_[0];
164 lastFrame_[0] = *(samples-hop);
170 #if defined(_STK_DEBUG_)
172 oStream_ <<
"Iir::tick(): channel and StkFrames arguments are incompatible!";
177 StkFloat *iSamples = &iFrames[iChannel];
178 StkFloat *oSamples = &oFrames[oChannel];
181 for (
unsigned int j=0; j<iFrames.
frames(); j++, iSamples += iHop, oSamples += oHop ) {
183 inputs_[0] = gain_ * *iSamples;
184 for ( i=b_.size()-1; i>0; i-- ) {
185 outputs_[0] += b_[i] * inputs_[i];
186 inputs_[i] = inputs_[i-1];
188 outputs_[0] += b_[0] * inputs_[0];
190 for ( i=a_.size()-1; i>0; i-- ) {
191 outputs_[0] += -a_[i] * outputs_[i];
192 outputs_[i] = outputs_[i-1];
195 *oSamples = outputs_[0];
198 lastFrame_[0] = *(oSamples-oHop);