傅里叶变换
就是得出图形的线性方程式
如某图形不知道方程式,通过变换转变成
y=a+bx+cx^2+dx^3+.....
自控测量的时候常常用到

解决方案 »

  1.   

    rushing(勇敢的心) 
    我手边没有资料.
    而且急用.
    希望大家能给我提几个实用的建议.
    谢谢.
      

  2.   

    #include "dip.h"void TDipWindow::add(COMPLEX *a,COMPLEX *b,COMPLEX *ret)
    {
    ret->re = a->re + b->re;
    ret->im = a->im + b->im;
    }void TDipWindow::sub(COMPLEX *a,COMPLEX *b,COMPLEX *ret)
    {
    ret->re = a->re - b->re;
    ret->im = a->im - b->im;
    }void TDipWindow::mul(COMPLEX *m,COMPLEX *n,COMPLEX *ret)
    {
    float a,b,c; a = ( m->re - m->im ) * n->im;
    b = m->re * ( n->re - n->im );
    c = m->im * ( n->re + n->im );
    ret->re = a + b;
    ret->im = a + c;
    }int TDipWindow::reverse(int t,int k)
    {
    int i,j,m,s; m = t;
    s = 0;
    for ( i = 0 ; i < k ; i++ )
    {
    j = m / 2;
    s = s * 2 + ( m - j * 2 );
    m = j;
    } return s;
    }void TDipWindow::root(int n)
    {
    int j; omega->re = 1;
    omega->im = 0;
    omega[1].re = (float)cos(2 * PI / n);
    omega[1].im = -(float)sin(2 * PI / n); for ( j = 2 ; j < n/2 ; j++ )
    mul(&omega[1],&omega[j-1],&omega[j]); for ( j = n/2 ; j < n ; j++ )
    {
    omega[j].re = -omega[j-n/2].re;
    omega[j].im = -omega[j-n/2].im;
    }
    }void TDipWindow::fft(int n)
    {
    int s,k,m,l,nv,t,j;
    COMPLEX podd,ret; k = (int)(log(n) / log(2) + 0.5);
    nv = n;
    m = 1;
    for ( l = k-1 ; l >= 0 ; l-- )
    {
    for ( t = 0 ; t < m * nv ; t+=nv )
    for ( j = 0 ; j < nv/2 ; j++ )
    {
    s = (t+j) / (int)pow(2,l);
    s = reverse(s,k); ret = omega[s];
    mul(&ret,&p[t+j+nv/2],&podd);
    sub(&p[t+j],&podd,&p[t+j+nv/2]);
    add(&p[t+j],&podd,&p[t+j]);
    }
    m *= 2;
    nv /= 2;
    } for ( t = 0 ; t < n ; t++ )
    {
    s = reverse(t,k);
    f[t] = p[s];
    }
    }void TDipWindow::nfft(int n)
    {
    int i; for ( i = 0 ; i < n ; i++ )
    p[i] = f[i]; fft(n); p[0] = f[0];
    for ( i = 1 ; i < n ; i++ )
    p[i] = f[n-i];
    for ( i = 0 ; i < n ; i++ )
    {
    p[i].re /= n;
    p[i].im /= n;
    }
    }void TDipWindow::tfft(int m,int n)
    {
    int i,j; root(n);
    p = (COMPLEX *) new COMPLEX[n];
    f = (COMPLEX *) new COMPLEX[n]; for ( i = 0 ; i < m ; i++ )
    {
    for ( j = 0 ; j < n ; j++ )
    p[j] = SpaceField[i][j]; fft(n); for ( j = 0 ; j < n ; j++ )
    FreqField[i][j] = f[j];
    } delete p;
    delete f; for ( i = 0 ; i < m ; i++ )
    for ( j = 0 ; j < n ; j++ )
    SpaceField[i][j] = FreqField[i][j]; root(m);
    p = (COMPLEX *) new COMPLEX[m];
    f = (COMPLEX *) new COMPLEX[m]; for ( j = 0 ; j < n ; j++ )
    {
    for ( i = 0 ; i < m ; i++ )
    p[i] = SpaceField[i][j]; fft(m); for ( i = 0 ; i < m ; i++ )
    FreqField[i][j] = f[i];
    } delete p;
    delete f;
    }void TDipWindow::ntfft(int m,int n)
    {
    int i,j; root(n);
    p = (COMPLEX *) new COMPLEX[n];
    f = (COMPLEX *) new COMPLEX[n]; for ( i = 0 ; i < m ; i++ )
    {
    for ( j = 0 ; j < n ; j++ )
    f[j] = FreqField[i][j]; nfft(n); for ( j = 0 ; j < n ; j++ )
    SpaceField[i][j] = p[j];
    } delete p;
    delete f; for ( i = 0 ; i < m ; i++ )
    for ( j = 0 ; j < n ; j++ )
    FreqField[i][j] = SpaceField[i][j]; root(m);
    p = (COMPLEX *) new COMPLEX[m];
    f = (COMPLEX *) new COMPLEX[m]; for ( j = 0 ; j < n ; j++ )
    {
    for ( i = 0 ; i < m ; i++ )
    f[i] = FreqField[i][j]; nfft(m); for ( i = 0 ; i < m ; i++ )
    SpaceField[i][j] = p[i];
    } delete p;
    delete f;
    }
      

  3.   

    自己装个 MATLAB 吧, 里面有 FFT 函数。
    Syntax
    Y = fft(X)
    Y = fft(X,n)
    Y = fft(X,[],dim)
    Y = fft(X,n,dim)Description
    Y = fft(X) returns the discrete Fourier transform (DFT) of vector X, computed with a fast Fourier transform (FFT) algorithm.If X is a matrix, fft returns the Fourier transform of each column of the matrix.If X is a multidimensional array, fft operates on the first nonsingleton dimension.Y = fft(X,n) returns the n-point DFT. If the length of X is less than n, X is padded with trailing zeros to length n. If the length of X is greater than n, the sequence X is truncated. When X is a matrix, the length of the columns are adjusted in the same manner.Y = fft(X,[],dim) and Y = fft(X,n,dim) applies the FFT operation across the dimension dim.
      

  4.   

    1、参数一般是采样数据和数据点数量。
    2、输出一般是变换后的数据集。
    3、你打开APIViewer就该明白了。
    4、问题:你是否知道FFT的算法?如果不知道,那讨论起来会很麻烦。
    5、建议:去看看信号处理的书,绝对有FFT的算法和意义。
      

  5.   

    现在我的数据有数据个数和数量.
    请告诉我怎么才能在基于VB的情况下,
    调用FTP的DLL文件,(这样的文件还没有找到)
    或者在VB下写这样的函数(有现成的最好,我改造不好的)
    最后是输出.最好做成图就放到表单上面.
    不知道有没有人做过这些东西,
    敬请赐教.