Mathgl Dens() сюжет не работает

Уже давно я пытаюсь выяснить, что не так, но не могу, потому что в основном есть очень ограниченная документация, которую я могу найти об обработке ошибок с помощью функции Dens() в Mathgl. Вот мой вопрос. Я пытаюсь построить спектрограмму из входного сигнала. Я создал массив M*N, который содержит мои данные DFT. где M= нет строк = общее количество окон, используемых для этого сигнала, и N= общее количество выборок в каждом окне. Существует X-матрица размера (M,1), которая содержит данные времени, и другая матрица /y размера (N,1), которая содержит нормализованные данные частоты (в дБ), где наименьшее значение db равно 0, а максимальное значение db =1., Массив данных DFT размером (M,N) содержит значения в диапазоне от 0 до 1 типа данных с плавающей запятой. Ниже мой код. vector fftstore = dSTFT(&signal, signalLength, windowSize,hopSize); int num_rows=fftstore.size()/windowSize;

  float *m_gl = new float[num_rows * windowSize];
   memset( m_gl,0,num_rows*windowSize*sizeof(float));
   float *m_glstart;
   m_glstart=m_gl;
  //t m_gl[num_rows][windowSize]={0};
   float *begin_loc;
 begin_loc=&fftstore[0];
 float *end_loc;
 end_loc=&fftstore[0]+windowSize;
   //t *dest;
  //st=m_gl;
   float *offset;
  for(int kk=0; kk<num_rows; kk++)
    {

      offset=m_glstart+(kk*windowSize+0);
      //oat offset=&m_gl[kk*windowSize+0];
       std::copy(begin_loc, end_loc, offset);
     begin_loc+=windowSize;
      end_loc+=windowSize;

   }
   //r(vector<float>::iterator it = fftstore.begin(); it != fftstore.end(); it++) {
  //out << *it << endl;
   //

  //converting M_gl to double

  double *m_gldob = new double[num_rows * windowSize];
   memset( m_gldob,0,num_rows*windowSize*sizeof(double));
  for (int id=0;id<num_rows;id++){
    for(int ij=0;ij<4096;ij++){
       m_gldob[id * windowSize + ij]=double(m_gl[id * windowSize + ij]);
    }
  }


  //mgl plotting
  double xdat[num_rows][1];
     memset( xdat,0,num_rows*1*sizeof(int));
   for (int xt=1;xt<=num_rows;xt++){
    xdat[xt-1][1]=((100*(2*xt-1))/(2*xt));
   }

  double ydat[windowSize][1];
   memset( ydat,0,windowSize*1*sizeof(int));
   for (int yf=1;yf<=windowSize;yf++){
    ydat[yf-1][1]=(yf*(1/windowSize));
   }

  double xst;
 xst=xdat[0][0];
 double xend=xdat[num_rows-1][1];
  double yst=ydat[0][0];
  double yend=ydat[windowSize-1][1];
    double *px;
 double *py;
  double *pdat;
   px=&xdat[0][0];
   py=&ydat[0][0];
  pdat=m_gldob;
   mglGraph gr;
   mglData mgl_x;
  mglData mgl_y;
  mglData mgl_dat;



    mgl_dat.Link(m_gldob,num_rows*windowSize,1);//c *
   mgl_dat.Rearrange(num_rows,windowSize);
    mgl_x.Link(px,num_rows,1);
  mgl_y.Link(py,windowSize,1);
  mgl_x.Norm();//c
  mgl_y.Norm();//c
   gr.SetQuality(6);
  gr.Alpha(true);

   gr.SetRange('x',xst,xend);
   gr.SetRange('y',yst,yend);
   gr.SetRange('c',0.0, 1.0);



   gr.Box();
  gr.Dens(mgl_x,mgl_y,mgl_dat);
  gr.Colorbar();
  gr.WriteBMP("/home/koyel/test1.bmp");

  delete[] m_gl;

  return 0;

этот код работает, чтобы дать мне вывод, который выглядит следующим образом:

Вы можете сказать мне, что происходит не так? Спасибо!

0 ответов

Другие вопросы по тегам