|
- /***************************************************/
- /*! \class PoleZero
- \brief STK one-pole, one-zero filter class.
-
- This class implements a one-pole, one-zero digital filter. A
- method is provided for creating an allpass filter with a given
- coefficient. Another method is provided to create a DC blocking
- filter.
-
- by Perry R. Cook and Gary P. Scavone, 1995--2017.
- */
- /***************************************************/
-
- #include "PoleZero.h"
-
- namespace stk {
-
- PoleZero :: PoleZero()
- {
- // Default setting for pass-through.
- b_.resize( 2, 0.0 );
- a_.resize( 2, 0.0 );
- b_[0] = 1.0;
- a_[0] = 1.0;
- inputs_.resize( 2, 1, 0.0 );
- outputs_.resize( 2, 1, 0.0 );
- }
-
- PoleZero :: ~PoleZero()
- {
- }
-
- void PoleZero :: setCoefficients( StkFloat b0, StkFloat b1, StkFloat a1, bool clearState )
- {
- if ( std::abs( a1 ) >= 1.0 ) {
- oStream_ << "PoleZero::setCoefficients: a1 argument (" << a1 << ") should be less than 1.0!";
- handleError( StkError::WARNING ); return;
- }
-
- b_[0] = b0;
- b_[1] = b1;
- a_[1] = a1;
-
- if ( clearState ) this->clear();
- }
-
- void PoleZero :: setAllpass( StkFloat coefficient )
- {
- if ( std::abs( coefficient ) >= 1.0 ) {
- oStream_ << "PoleZero::setAllpass: argument (" << coefficient << ") makes filter unstable!";
- handleError( StkError::WARNING ); return;
- }
-
- b_[0] = coefficient;
- b_[1] = 1.0;
- a_[0] = 1.0; // just in case
- a_[1] = coefficient;
- }
-
- void PoleZero :: setBlockZero( StkFloat thePole )
- {
- if ( std::abs( thePole ) >= 1.0 ) {
- oStream_ << "PoleZero::setBlockZero: argument (" << thePole << ") makes filter unstable!";
- handleError( StkError::WARNING ); return;
- }
-
- b_[0] = 1.0;
- b_[1] = -1.0;
- a_[0] = 1.0; // just in case
- a_[1] = -thePole;
- }
-
- } // stk namespace
|