快速卷积输出太大了?

时间:2014-01-09 13:47:32

标签: c fft convolution

我正在尝试使用程序中生成的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);
}

0 个答案:

没有答案