几天来我一直在试图找出问题所在,但不能,因为大多数情况下我可以找到的关于使用 Mathgl 中的 Dens() 函数进行错误处理的文档非常有限。以下是我的问题。我正在尝试从输入信号构建频谱图。我创建了一个 M*N 数组来保存我的 DFT 数据。其中M=行数=用于该信号的窗口总数,N=每个窗口中的样本总数。有一个大小为 (M,1) 的 X 矩阵保存时间数据,另一个大小为 (N,1) 的矩阵 /y 保存归一化频率数据(以 db 为单位),其中最小 db 为 0 且最大 db = 1 . 大小为 (M,N) 的 DFT 数据数组保存的值范围为 0-1,数据类型为浮点数。以下是我的代码。矢量 fftstore = dSTFT(&signal, signalLength, windowSize,hopSize); int num_rows=fftstore。
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;
此代码运行给我一个如下所示的输出:http: //i.stack.imgur.com/8uAq6.png
你能告诉我出了什么问题吗?谢谢!