在C中使用FFT编程自相关

时间:2013-07-16 15:11:21

标签: c fft correlation

我在使用FFT计算时间序列的自相关时遇到问题。我知道

 Corr(g,h)_j <-> G_k x H_k*

其中G_k和H_k是g_j的离散傅里叶变换,并且h_j和H_k *是H_k的复共轭。 我的代码是:

void fft_corr(float *vin1, float *vin2, float *vout, int n)
{
    static complex *A1; //working array
    static complex *A2; //working array
    static complex *B; //working array
    int i,k;

    A1  = (complex*) alloc1(n,sizeof(complex));
    A2  = (complex*) alloc1(n,sizeof(complex));
    B  = (complex*) alloc1(n,sizeof(complex));

    //copy pressure array to complex array
    for(i=0;i<n;i++){
        A1[i].r = vin1[i];
        A2[i].r = vin2[i];
        A1[i].i = 0.;
        A2[i].i = 0.;
    }

    // perform  fft inverse flag=1
    pfacc(1,n,A1);
    pfacc(1,n,A2);

    for(k=0;k<n;k++){
        B[k].r = A1[k].r * A2[k].r + A1[k].i * A2[k].i;
        B[k].i = - A1[k].r * A2[k].i + A1[k].i * A2[k].r;
    }

    pfacc(-1,n,B);

    for(i=0;i<n;i++) vout[i]=B[i].r/n; //write into output and normalize

}//#

我错过了什么?如果A1 == A2,结果看起来不像自相关。

非常感谢 result

0 个答案:

没有答案