我正在尝试使用程序中生成的Lorrentzian曲线卷积数据集。我正在使用卷积定理(FFT输入和响应函数,相乘并对结果进行逆变换)。这一切似乎都很顺利,输出看起来应该如何,但数据点远远大于输入信号。
例如,输入高度为0.5的矩形脉冲产生高度为〜200的卷积输出。任何人都可以看到这可能发生的原因吗? (我打算附上输出图,但我没有足够的声望点)。
我的卷积算法如下。我正在使用的FFT函数经过了很好的测试,我很确定这不是问题所在:
double* convolve(double *input, double *response, unsigned long length)
{
unsigned long i, N = 2*length;
double *ans = (double*)malloc(2*(length+1)*sizeof(double));
double tempr;
printf("Length is %lu\n", length);
printf("Transforming input\n");
FFT(input, length, 1);
printf("Transforming response\n");
FFT(response, length, 1);
for (i=0; i<N; i+=2)
{
ans[i] = input[i]*response[i] - input[i+1]*response[i+1];
ans[i+1] = input[i+1]*response[i] + input[i]*response[i+1];
}
printf("Reverse transforming\n");
FFT(ans, length, -1);
/*Re-order array*/
for(i=0; i<length; i+=2)
{
swap(ans[i+1], ans[N-(i+1)]);
swap(ans[i], ans[N-i]);
}
return(ans);
}