polefilt.cpp

来自「Digital filter designer s handbook C++ c」· C++ 代码 · 共 81 行

CPP
81
字号
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//  File = polefilt.cpp
//
//  simulation of analog all-pole filter
//

#include <math.h>
#include "polefilt.h"

extern ofstream DebugFile;

//======================================================
//  default constructor
//------------------------------------------------------

//AnalogAllPoleFilt::AnalogAllPoleFilt( )
//{
//};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
//======================================================
//  constructor that actually initializes filter model
//------------------------------------------------------

AnalogAllPoleFilt::AnalogAllPoleFilt( Polynomial denom_poly,
                                      double h_sub_zero,
                                      double delta_t)
                 : AnalogFilter()
{
 int k, order;
 
 order = denom_poly.GetDegree();
     
 Integrator = new NumericInteg*[order];
 Y_Prime = new double[order+1];
 B_Coef = new double[order];
 
 Order = order;
 H_Sub_Zero = h_sub_zero;
 
 for(k=0; k<order; k++)
   {
    Integrator[k] = new NumericInteg(delta_t);
    B_Coef[k] = -(denom_poly.GetCoefficient(k));
    DebugFile << "in AnalogAllPoleFilt, B_Coef["
              << k << "] = " << B_Coef[k] << endl;
    Y_Prime[k] = 0.0;
   }
 return;
};
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      


//======================================================
//
//------------------------------------------------------

double AnalogAllPoleFilt::Run( double input )
{
double sum;
int k;

sum = input;
for( k=0; k<Order; k++)
  {
   sum += (Y_Prime[k] * B_Coef[k]);
  }
Y_Prime[Order] = sum;

DebugFile << "in Run, input = " << input
          << "Y_Prime[" << Order << "] = "
          << sum << endl; 

for( k=Order-1; k>=0; k--)
  {
   Y_Prime[k] = ((Integrator[k])->Integrate(Y_Prime[k+1]));
  }    
return(H_Sub_Zero*Y_Prime[0]);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?