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