⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pzfilt.cpp

📁 Digital filter designer s handbook C++ code source
💻 CPP
字号:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//  File = pzfilt.cpp
//
//  simulation of analog pole-zero filter
//

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

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

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

AnalogPoleZeroFilter::AnalogPoleZeroFilter( 
                            Polynomial numer_poly,
                            Polynomial denom_poly,
                            double h_sub_zero,
                            double delta_t)
                    : AnalogFilter()
{
 int k, order;
 
 order = denom_poly.GetDegree();
     
 Integrator = new NumericInteg*[order];
 W_Prime = new double[order+1];
 A_Coef = new double[order+1];
 B_Coef = new double[order];
 
 Order = order;
 
 for(k=0; k<order; k++)
   {
    Integrator[k] = new NumericInteg(delta_t);
    A_Coef[k] = numer_poly.GetCoefficient(k);
    B_Coef[k] = -(denom_poly.GetCoefficient(k));
    W_Prime[k] = 0.0;
    H_Sub_Zero = h_sub_zero;
   }
 //A_Coef[order] = numer_poly.GetCoefficient(order);
 return;
};
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      


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

double AnalogPoleZeroFilter::Run( double input )
{
double sum, output;
int k;

sum = H_Sub_Zero * input;

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

//output = A_Coef[Order] * sum;
output = 0.0;

for( k=Order-1; k>=0; k--)
  {
   W_Prime[k] = ((Integrator[k])->Integrate(W_Prime[k+1]));
   output += (W_Prime[k] * A_Coef[k]);
  } 
return((float)output);
}

⌨️ 快捷键说明

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