傅立叶系列的快速方法?

Gar*_*ary 0 optimization signal-processing fft fftw

我使用FFTW生成系数,现在我想重建原始数据,但只使用第一个numCoefs系数而不是全部系数.目前我正在使用下面的代码,这是非常慢的:

for ( unsigned int i = 0; i < length; ++i )
{
    double sum = 0;
    for ( unsigned int j = 0; j < numCoefs; ++j )
    {
        sum += ( coefs[j][0] * cos( j * omega * i ) ) + ( coefs[j][1] * sin( j * omega * i ) );
    }
    data[i] = sum;
}
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

Pau*_*l R 6

一个更简单的解决方案是将不需要的系数归零,然后用FFTW进行IFFT.这将比上面的IDFT更有效.

请注意,当您执行此类操作时,您可能会在时域中获得一些假象 - 您实际上是在频域中乘以阶跃函数,这相当于在时域中使用sinc函数进行卷积.为了减少时域中产生的"振铃",您应该使用窗口函数来平滑非零和零系数之间的转换.