0

我在使用 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,则结果看起来不像自相关。

非常感谢 结果

4

0 回答 0