如何使用快速傅里叶变换计算数组元素的乘积之和?

时间:2015-05-19 20:03:21

标签: c++ arrays c++11 sum fft

我有一些二进制数组。例如,让我的数组是:

int a[] = {1, 0, 0, 0, 1, 0, 1, 0, 1}

我想根据这个公式计算值:

enter image description here

如何使用快速傅里叶变换计算此功能?我有一个大型数组,我必须多次计算这个函数。所以,我希望能够快速计算出这个功能。

2 个答案:

答案 0 :(得分:1)

你正在进行的计算基本上是一个卷积,时域中的卷积只是频域中的乘法。所以得到a的FFT并将其与自身相乘,然后执行IFFT返回时域。简而言之,你可以通过

计算b
b(2*i) = IFFT( FFT(a[0:2*i)]).FFT(a[0:2*i]) ) 

答案 1 :(得分:-2)

void main()
{
    int i,k,sum=0; 
    for(i=0;i<9;i++)
    {
        for(k=0;k<2*i;k++) 
        {
            sum + =(a[k]*a[2*i-k]; // calculating B
        }
    }
    cout<<sum;
}