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

📄 remez.cpp

📁 Digital filter designer s handbook C++ code source
💻 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 + -