如同,按钮读取文本数据功能调试完毕,如何将输入的数据绘制成一幅频谱图(数据形式:X Y),在线急等

解决方案 »

  1.   

    DC的坐标系原点在窗口左上角,X轴向右为正,Y轴向下为正,单位默认为像素。你自己做个对应,用MoveTo()Line()一点一点画上即可
      

  2.   

    坐标系绘图功能实现.(代码在一编辑框里)目前的问题是我有一段FFT代码不知道添在哪,请赐教.
      

  3.   

    以下是代码:Void fft(COMPLEX *x,int m) 
    { static COMPLEX *w; 
    static int mstore = 0; 
    static int n = 1; 
    COMPLEX u,temp,tm; 
    COMPLEX *xi,*xip,*xj,*wptr; 
    int i,j,k,l,le,windex; 
    double arg,w_real,w_imag,wrecur_real,wrecur_imag,wtemp_real; 
    if(m != mstore) { 
    if(mstore != 0) free(w); 
    mstore = m; 
    if(m == 0) return; 
    n = 1 << m; 
    le = n/2; 
    w = (COMPLEX *) calloc(le-1,sizeof(COMPLEX)); 
    if(!w) 
    { printf("\nUnable to allocate complex W array\n"); 
    exit(1); 

    arg = 4.0*atan(1.0)/le; 
    wrecur_real = w_real = cos(arg); 
    wrecur_imag = w_imag = -sin(arg); 
    xj = w; 
    for (j = 1 ; j < le ; j++) 
    { xj->real = (float)wrecur_real; 
    xj->imag = (float)wrecur_imag; 
    xj++; 
    wtemp_real = wrecur_real*w_real - wrecur_imag*w_imag; 
    wrecur_imag = wrecur_real*w_imag + wrecur_imag*w_real; 
    wrecur_real = wtemp_real; 


    /* start fft */ 
    le = n; 
    windex = 1; 
    for (l = 0 ; l < m ; l++) { 
    le = le/2; 
    /* first iteration with no multiplies */ 
    for(i = 0 ; i < n ; i = i + 2*le) 
    { xi = x + i; 
    xip = xi + le; 
    temp.real = xi->real + xip->real; 
    temp.imag = xi->imag + xip->imag; 
    xip->real = xi->real - xip->real; 
    xip->imag = xi->imag - xip->imag; 
    *xi = temp; 

    /* remaining iterations use stored w */ 
    wptr = w + windex - 1; 
    for (j = 1 ; j < le ; j++) 
    { u = *wptr; 
    for (i = j ; i < n ; i = i + 2*le) 
    { xi = x + i; 
    xip = xi + le; 
    temp.real = xi->real + xip->real; 
    temp.imag = xi->imag + xip->imag; 
    tm.real = xi->real - xip->real; 
    tm.imag = xi->imag - xip->imag; 
    xip->real = tm.real*u.real - tm.imag*u.imag; 
    xip->imag = tm.real*u.imag + tm.imag*u.real; 
    *xi = temp; 

    wptr = wptr + windex; 

    windex = 2*windex; 

    /* rearrange data by bit reversing */ 
    j = 0; 
    for (i = 1 ; i < (n-1) ; i++) 

    k = n/2; 
    while(k <= j) { 
    j = j - k; 
    k = k/2; 

    j = j + k; 
    if (i < j) 
    { xi = x + i; 
    xj = x + j; 
    temp = *xj; 
    *xj = *xi; 
    *xi = temp; 


    }