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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = dump_spect.cpp
  3. //
  4. #include <stdlib.h>
  5. #include "dump_spect.h"
  6. #include "math.h"
  7. #ifdef _DEBUG
  8.   extern ofstream *DebugFile;
  9. #endif
  10. void DumpSpectrum(  double *psd_est,
  11.                int nsamps_in_psd,
  12.                double delta_f,
  13.                double freq_norm_factor,
  14.                bool output_in_decibels,
  15.                bool plot_two_sided,
  16.                ofstream *psd_file)
  17. {
  18.    int is;
  19.    //------------------------------------
  20.    // find peak
  21.    double peak_val=0.0;
  22.    int peak_idx=0;
  23.    for(is=0; is<nsamps_in_psd/2; is++)
  24.    {
  25.       if(psd_est[is] <= peak_val) continue;
  26.       //else
  27.       peak_val = psd_est[is];
  28.       peak_idx = is;
  29.    }
  30.    if(output_in_decibels)
  31.    {
  32.       //double offset = 10.0*log10(Psd_Est[peak_idx]);
  33.       double offset = 0.0;
  34.       if(plot_two_sided)
  35.       {
  36.          for(is=-(nsamps_in_psd/2-1); is<0; is++)
  37.          {
  38.             if( psd_est[-is] >0 )
  39.             {
  40.                (*psd_file) << is * delta_f * freq_norm_factor << ", " 
  41.                            << (10.0*log10(psd_est[-is])) << endl;
  42.                           // << (10.0*log10(Psd_Est[-is])-offset) << endl;
  43.             }
  44.             else
  45.             {
  46.                (*psd_file) << is * delta_f * freq_norm_factor << ", -200.0" << endl;
  47.             }
  48.          }
  49.       }
  50.       for(is=0; is<nsamps_in_psd/2; is++)
  51.       {
  52.          if( psd_est[is] >0 )
  53.          {
  54.             (*psd_file) << is * delta_f * freq_norm_factor << ", " 
  55.                         << (10.0*log10(psd_est[is])) << endl;
  56.                        // << (10.0*log10(Psd_Est[is])-offset) << endl;
  57.             psd_est[is] = 0.0;
  58.          }
  59.          else
  60.          {
  61.             (*psd_file) << is * delta_f * freq_norm_factor << ", -200.0" << endl;
  62.          }
  63.       }
  64.    }
  65.    else
  66.    {
  67.       // plot as linear ordinate
  68.       if(plot_two_sided)
  69.       {
  70.          for(is=-(nsamps_in_psd/2-1); is<0; is++)
  71.          {
  72.             (*psd_file) << is * delta_f * freq_norm_factor << ", " 
  73.                         << psd_est[-is] << endl;
  74.          }
  75.       }
  76.       for(is=0; is<nsamps_in_psd/2; is++)
  77.       {
  78.          (*psd_file) << is * delta_f * freq_norm_factor << ", " 
  79.                      << psd_est[is] << endl;
  80.          psd_est[is] = 0.0;
  81.       }
  82.    }
  83. }