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)
有更快的方法吗?
一个更简单的解决方案是将不需要的系数归零,然后用FFTW进行IFFT.这将比上面的IDFT更有效.
请注意,当您执行此类操作时,您可能会在时域中获得一些假象 - 您实际上是在频域中乘以阶跃函数,这相当于在时域中使用sinc函数进行卷积.为了减少时域中产生的"振铃",您应该使用窗口函数来平滑非零和零系数之间的转换.