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

📄 dirform1.cpp

📁 Digital filter designer s handbook C++ code source
💻 CPP
字号:
//
//  File = dirform1.cpp
//

#include <stdlib.h>
#include <fstream.h>
#include "dirform1.h"
extern ofstream DebugFile;

DirectFormFir::DirectFormFir( int num_taps,
                              double *coeff,
                              long coeff_quan_factor,
                              long input_quan_factor)
{
 int n;
 Num_Taps = num_taps;
 Input_Buffer = new long[num_taps];
 Quan_Coeff = new long[num_taps];
 Write_Indx = 0;
 Input_Quan_Factor = input_quan_factor;
 Output_Quan_Factor = double( coeff_quan_factor * input_quan_factor);
 
 DebugFile << "In DirectFormFir" << endl;
 
 for(n=0; n<num_taps; n++)
   {
    Quan_Coeff[n] = long((coeff_quan_factor * coeff[n]) + 0.5);
    DebugFile << coeff[n] << " quantized to " << Quan_Coeff[n] << endl;
    Input_Buffer[n] = 0;
   }
 return;
}

double DirectFormFir::ProcessSample( double input_val )
{
 double output_val;
 long term, sum;
 int read_indx, tap_indx;
 
 //DebugFile << "input_val = " << input_val << endl;
 Input_Buffer[Write_Indx] = long(Input_Quan_Factor * input_val);
 
 read_indx = Write_Indx;
 Write_Indx++;
 if(Write_Indx >= Num_Taps) Write_Indx = 0;
 
 sum = 0;
 
 for( tap_indx=0; tap_indx<Num_Taps; tap_indx++)
   {
    //DebugFile << "QC[" << tap_indx << "] = " << Quan_Coeff[tap_indx] << endl;
    //DebugFile << "IB[" << read_indx << "] = " << Input_Buffer[read_indx] << endl;
    term = Quan_Coeff[tap_indx] * Input_Buffer[read_indx];
    sum += term;
    
    read_indx--;
    if(read_indx < 0) read_indx = Num_Taps-1;
   }
// exit(88);

 //DebugFile << sum << endl;
 output_val = sum/Output_Quan_Factor;
 //DebugFile << "         " << output_val << endl;
 
 return(output_val);
}

int DirectFormFir::GetNumTaps(void)
{
 return(Num_Taps);
}

⌨️ 快捷键说明

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