📄 dirform1.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 + -