1D FFT的输入

时间:2012-04-21 20:47:50

标签: c# .net math signal-processing fft

我有一个从传感器获得的浮点数组,想要在通过FFT运行信号后得到幅度(在此之前,使用高通滤波器和Hann窗函数处理采样)。

使用AForge.Math库FFT类,它将一个复数数组作为参数,我提出了以下代码:

Complex[] complex = new Complex[1024];
for (int i = 0; i < 1024 - 1; i++)
{
     complex[i] = new Complex(windowedSamples[i], 0);
}

FourierTransform.FFT(complex, FourierTransform.Direction.Forward);
return complex.Select(x =>  Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im))).ToArray();

运行这个我得到了一些奇怪的结果,并且无法锁定问题。

前10个输入值:

  

0 0 -3.8454E-05 0.0001737584 0.0006910793 0.001071334 0.00204984 0.00276812 0.001741312 0.001796867

前10个输出值:

  

0.482303347948843 0.706458195192639 NaN NaN NaN NaN NaN NaN NaN NaN

我的第一个猜测是它可能是想象中的部分,但到目前为止,我读到的所有内容都说在这种情况下应该设置为0。

我真的很感激帮助解决这个问题。

1 个答案:

答案 0 :(得分:5)

此表达式

Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im))

对我来说有点奇怪。你想在这里得到x的绝对值吗?那么你应该将虚构和实部提升为2的幂,而不是取它们的平方根。

如果绝对值是您想要的,那么只需用

替换该表达式
x.Magnitude