一维FFT的输入

本文关键字:输入 FFT 一维 | 更新日期: 2023-09-27 18:32:02

我有一个从传感器获得的浮点数组,并希望在通过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

的第一个猜测是它可能与虚构部分有关,但到目前为止,我读到的所有内容都表明在这种情况下它应该设置为 0。

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

一维FFT的输入

此表达式

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

对我来说看起来有点奇怪。您是否想在这里获取x的绝对值?那么你可能应该将虚部和实部提高到二的幂,而不是取它们的平方根。

如果绝对值是您想要的,则只需将该表达式替换为

x.Magnitude