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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = fir_dsgn.h
  3. //
  4. #ifndef _FIR_DSGN_H_
  5. #define _FIR_DSGN_H_ 
  6. #include <fstream>
  7. #include "gen_win.h"
  8. #include "typedefs.h"
  9. typedef enum {
  10.   FIR_SYM_NONE,
  11.   FIR_SYM_EVEN_LEFT,
  12.   FIR_SYM_EVEN_RIGHT,
  13.   FIR_SYM_ODD_LEFT,
  14.   FIR_SYM_ODD_RIGHT
  15. } FIR_SYM_T;
  16. class FirFilterDesign
  17. {
  18. public:
  19.   
  20.   //---------------------
  21.   // default constructor
  22.     
  23.   FirFilterDesign( );
  24.   
  25.   //-------------------------------------
  26.   // constructor that allocates array of
  27.   // length num_taps to hold coefficients 
  28.   
  29.   FirFilterDesign( int num_taps );
  30.   
  31.   //-------------------------------------
  32.   // constructor that reads from ParmInput
  33.   FirFilterDesign( const char* instance_name);
  34.   //-------------------------------------
  35.   // constructor that sets up coefficients
  36.   // for a raised-cosine filter
  37.   FirFilterDesign(  const char* instance_name,
  38.                     int type_of_response,
  39.                     double samp_rate );
  40.   //-------------------------------------
  41.   // constructor that allocates array of
  42.   // length num_taps and initializes this
  43.   // array to values contained in input 
  44.   // array *imp_resp_coeff
  45.   
  46.   FirFilterDesign( int num_taps,
  47.                    double *imp_resp_coeff );
  48.   
  49.   //-------------------------------------
  50.   // constructor for filter with symmetric
  51.   // impulse response.  Only half of the values
  52.   // needed for initialization are provided
  53.   // in the input array *imp_resp_coeff.
  54.   // The remaining half are obtained from
  55.   // the given half in accordance with the
  56.   // specific type of symmetry indicated by
  57.   // the second argument.
  58.   FirFilterDesign( int num_taps,
  59.                    FIR_SYM_T symmetry,
  60.                    double *imp_resp_coeff );
  61.   
  62.   //------------------------------------------ 
  63.   // allocate coefficient array *Imp_Resp_Coeff
  64.   // after default constructor has been used
  65.                    
  66.   void Initialize( int num_taps );
  67.   
  68.   //-------------------------------------------
  69.   //  method to quantize coefficients
  70.   void QuantizeCoefficients( long quant_factor,
  71.                              bool rounding_enabled );
  72.  
  73.   //-------------------------------------------
  74.   //  method to scale coefficients
  75.   void ScaleCoefficients( double scale_factor );
  76.   
  77.   void NormalizeFilter( void );
  78.   //----------------------------------------
  79.   // copy coefficients from input array
  80.   // *coeff into array *Imp_Resp_Coeff 
  81.   
  82.   void CopyCoefficients( double *coeff);
  83.   void CopyCoefficients( float *coeff);
  84.   void CopyCoefficients( int *coeff);
  85.   
  86.   //----------------------------------------------
  87.   // dump coefficient set to output_stream 
  88.   
  89.   void DumpCoefficients( ofstream* output_stream);
  90.  
  91.   //----------------------------------
  92.   // get pointer to coefficient array 
  93.   //this should be changed to new a copy and return
  94.   // pointer to this copy
  95.   
  96.   double* GetCoefficients(void);
  97.   
  98.   //---------------------------
  99.   // get number of filter taps
  100.   
  101.   int GetNumTaps(void);
  102.   
  103.   //---------------------------------------
  104.   // apply discrete-time window
  105.   // to filter coefficients
  106.   
  107.   void ApplyWindow( GenericWindow *window);
  108.   
  109.   void ExtractPolyphaseSet( double *coeff,
  110.                             int decim_rate,
  111.                             int rho);
  112.   
  113.   
  114. protected:
  115.   
  116.   int Num_Taps;
  117.   
  118.   double* Imp_Resp_Coeff;
  119.   double* Original_Coeff;
  120.   long* Quant_Coeff;
  121.   FIR_SYM_T Coeff_Symmetry;
  122.   double Filter_Alpha;
  123.   double Symbol_Rate;
  124. };
  125. #endif