onezero.cpp
来自「Mobile STK for Symbian OS V0.1」· C++ 代码 · 共 132 行
CPP
132 行
/***************************************************//*! \class OneZero \brief STK one-zero filter class. This protected Filter subclass implements a one-zero digital filter. A method is provided for setting the zero position along the real axis of the z-plane while maintaining a constant filter gain. by Perry R. Cook and Gary P. Scavone, 1995 - 2005.*//***************************************************/#include "OneZero.h"#include "Debug.h"#define DEBUGOneZero :: OneZero() : Filter(){#ifdef DEBUG dcnt=0;#endif#if !defined(SYMBIAN) std::vector<StkFloat> b(2, 0.5); std::vector<StkFloat> a(1, 1.0);#else FloatVector b(2, 0.5); FloatVector a(1, 1.0);/* StkFloat *b= new (ELeave) TReal[2]; b[0] = 0.5; b[1] = 0.5; StkFloat *a= new (ELeave) TReal[1]; a[0] = 1.0;*/#endif Filter::setCoefficients( b, a );}OneZero :: OneZero(StkFloat theZero) : Filter(){#if !defined(SYMBIAN) std::vector<StkFloat> b(2); std::vector<StkFloat> a(1, 1.0);#else FloatVector b(2); FloatVector a(1, 1.0);/* StkFloat *b= new (ELeave) TReal[2]; StkFloat *a= new (ELeave) TReal[1]; a[0] = 1.0;*/#endif // Normalize coefficients for unity gain. if (theZero > 0.0) b[0] = 1.0 / ((StkFloat) 1.0 + theZero); else b[0] = 1.0 / ((StkFloat) 1.0 - theZero); b[1] = -theZero * b[0]; Filter::setCoefficients( b, a );}OneZero :: ~OneZero(void){}void OneZero :: clear(void){ Filter::clear();}void OneZero :: setB0(StkFloat b0){ b_[0] = b0;}void OneZero :: setB1(StkFloat b1){ b_[1] = b1;}void OneZero :: setZero(StkFloat theZero){ // Normalize coefficients for unity gain. if (theZero > 0.0) b_[0] = 1.0 / ((StkFloat) 1.0 + theZero); else b_[0] = 1.0 / ((StkFloat) 1.0 - theZero); b_[1] = -theZero * b_[0];}void OneZero :: setGain(StkFloat gain){ Filter::setGain(gain);}StkFloat OneZero :: getGain(void) const{ return Filter::getGain();}StkFloat OneZero :: lastOut(void) // SYMBIAN const removed: const{ return Filter::lastOut();}StkFloat OneZero :: tick( StkFloat input ){#ifdef DEBUG if(dcnt<20) { CStaticDebug::WriteInt(inputs_.size()); CStaticDebug::WriteInt(outputs_.size()); CStaticDebug::WriteInt(b_.size()); CStaticDebug::WriteIntN(a_.size()); dcnt++; }#endif inputs_[0] = gain_ * input; outputs_[0] = b_[1] * inputs_[1] + b_[0] * inputs_[0]; inputs_[1] = inputs_[0]; return outputs_[0];}StkFrames& OneZero :: tick( StkFrames& frames, unsigned int channel ){ return Filter::tick( frames, channel );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?