butterworth_proto.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:2k
源码类别:

3G开发

开发平台:

Visual C++

  1. //======================================================
  2. //
  3. //  File = butterworth_proto.cpp
  4. //
  5. //  Prototype Butterworth Filter
  6. //
  7. #include <math.h>
  8. #include "misdefs.h"
  9. #include "parmfile.h"
  10. #include "butterworth_proto.h"
  11. #include "filter_types.h"
  12. extern ParmFile ParmInput;
  13. extern ofstream *DebugFile;
  14. using std::complex;
  15. //======================================================
  16. //  constructor
  17. ButterworthPrototype::
  18.             ButterworthPrototype( int filt_order )
  19.                   :AnalogFilterPrototype( filt_order )
  20. {
  21.    //======================================================
  22.    //  Computes poles for normalized Butterworth prototype
  23.    double x;
  24.    Pole_Locs = new complex<double>[Filt_Order];
  25.    Num_Poles = Filt_Order;
  26.    Zero_Locs = new std::complex<double>[1];
  27.    Num_Zeros = 0;
  28.    H_Zero = 1.0;
  29.    if(Filt_Order%2){ 
  30.       //order is odd
  31.       Num_Biquad_Sects = (Filt_Order-1)/2;
  32.       Pole_Locs[Num_Biquad_Sects] = 1.0;
  33.       Real_Pole = 1.0;
  34.    }
  35.    else {
  36.       Num_Biquad_Sects = Filt_Order/2;
  37.    }
  38.    B1_Coef = new double[Num_Biquad_Sects];
  39.    B0_Coef = new double[Num_Biquad_Sects];
  40.    for( int k=1; k<=Num_Biquad_Sects; k++){
  41.       x = PI * (Filt_Order + (2*k)-1) / (2*Filt_Order);
  42.       Pole_Locs[k-1] = complex<double>( cos(x), sin(x));
  43. #ifdef _DEBUG
  44.       *DebugFile << "LP Proto pole " << k-1 << " at ( "
  45.          << Pole_Locs[k-1].real() << ", "
  46.          << Pole_Locs[k-1].imag() << " )" 
  47.          << endl;
  48. #endif
  49.       Pole_Locs[Filt_Order-k] = 
  50.                   complex<double>( cos(x), -sin(x));
  51. #ifdef _DEBUG
  52.       *DebugFile << "LP Proto pole " 
  53.                  << Filt_Order-k << " at ( "
  54.                  << Pole_Locs[Filt_Order-k].real()
  55.                  << ", " 
  56.                  << Pole_Locs[Filt_Order-k].imag() 
  57.                  << " )" << endl;
  58. #endif
  59.       B1_Coef[k-1] = -2.0* (Pole_Locs[k-1].real());
  60.       B0_Coef[k-1] = 1.0;
  61.    }
  62. }
  63. //==========================================================
  64. ButterworthPrototype::~ButterworthPrototype()
  65. {
  66. }