📄 remez.cpp
字号:
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
#include <math.h>
#include "misdefs.h"
#include "fir_util.h"
#include "remezalg.h"
ofstream DebugFile("remez.out", ios::out);
main()
{
RemezAlgorithm *remez;
int filter_length;
int grid_density;
int num_plot_points;
int db_scale_enabled;
int coeff_indx, work_int;
double ripple_ratio;
double passband_edge_freq;
double stopband_edge_freq;
double *extremal_freqs;
double *filter_coeffs;
double *magnitude_response;
double quant_factor;
read_filter_length:
cout << "filter length ?\n (must be odd)" << endl;
cin >> filter_length;
if((filter_length%2) == 0) goto read_filter_length;
cout << "number of grid points per extremal frequency?\n"
<< "( MUST be an integer)" << endl;
cin >> grid_density;
cout << "ripple ratio?" << endl;
cin >> ripple_ratio;
cout << "passband edge frequency?" << endl;
cin >> passband_edge_freq;
cout << "stopband edge frequency?" << endl;
cin >> stopband_edge_freq;
cout << "quantizing factor?\n"
<< " ( 256 for 8 bits, 1024 for 10 bits, etc. )"
<< endl;
cin >> quant_factor;
cout << "how many points in response plot?" << endl;
cin >> num_plot_points;
cout << "type of magnitude scale?\n"
<< "( 0 = linear, 1 = dB )" << endl;
cin >> db_scale_enabled;
extremal_freqs = new double[(filter_length+1)/2];
filter_coeffs = new double[filter_length];
cout << "ripple_ratio = " << ripple_ratio << endl;
cout << "passband_edge_freq = " << passband_edge_freq << endl;
cout << "stopband_edge_freq = " << stopband_edge_freq << endl;
cout << "grid_density = " << grid_density << endl;
cout << "filter_length = " << filter_length << endl;
cout << "db_scale_enabled = " << db_scale_enabled << endl;
cout << "quant_factor = " << quant_factor << endl;
remez = new RemezAlgorithm( filter_length,
grid_density,
ripple_ratio,
passband_edge_freq,
stopband_edge_freq,
extremal_freqs,
filter_coeffs);
for( coeff_indx=0; coeff_indx< filter_length; coeff_indx++)
{
DebugFile << "coeff[" << coeff_indx << "] = "
<< filter_coeffs[coeff_indx] << endl;
// work_int = int(quant_factor * filter_coeffs[coeff_indx]);
// filter_coeffs[coeff_indx] = double(work_int)/quant_factor;
}
magnitude_response = new double[num_plot_points];
//db_scale_enabled = TRUE;
SymmetricFirResponse( filter_length,
filter_coeffs,
db_scale_enabled,
num_plot_points,
magnitude_response);
ofstream OutputFile1("remez.txt",ios::out);
//exit(99);
int pt_indx;
for( pt_indx=0; pt_indx<num_plot_points; pt_indx++)
{
OutputFile1 << pt_indx << ", "
<< magnitude_response[pt_indx] << endl;
}
OutputFile1.close();
exit(88);
delete [] magnitude_response;
delete [] extremal_freqs;
delete [] filter_coeffs;
delete remez;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -