DFT 和 IDFT 不提供相同的信号

信息处理 fft 频谱
2022-02-11 10:15:24

我是傅立叶变换的新手。我正在使用 AForge.Math FFT/DFT 算法(C#)。说我有这种情况:

在此处输入图像描述

我的信号:

1.4+sin(2πt)+0.4sin(5·2πt)

采样:每秒 100 个样本。

这是光谱。DFT 找到我的信号的频率:1Hz 和 5Hz(以及恒定分量:0Hz)。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述 这里是逆变换。如您所见,结果与原始形状相似,但显然那里正在发生一些事情。

我的问题:

  • 我可以更改哪些参数以获得更好的结果。
  • 我是否应该期望完全能够从频谱中重新生成时域信号?
  • IDFT可以用作信号发生器吗?在所需频率处创建峰值非常容易。
  • 也许我需要去看书,但是,为什么 DFT 中总是有一个镜像频率,我应该如何解释它们?我没有任何 95Hz 和 99Hz 的频率。这是DFT的缺陷吗?
  • 为什么初始点没有镜像?
  • 频谱中峰值的幅度不正确:第一个应该是 1,第二个应该是 0.4。我听说频谱中的幅度并不重要,这是真的吗,如果是这样,为什么?无论如何,我认为知道正弦曲线的幅度是非常有用的,有没有办法做到这一点?
  • 我可以扔掉对称部分吗?
  • 如果是这样,我可以丢弃几乎为空的值,直到从中间开始的第一个频率?(在我的情况下,从 50Hz 到几乎 5Hz)。

编辑:

正如这里所指出的,我需要首先保留来自直接变换的实数/虚数数据,其次,调整该数据,因为我使用的是复杂的逆 DFT。

结果如下:

在此处输入图像描述

青色/紫色:Re/Im 零件

在此处输入图像描述 红色:最终结果。

X 间距是错误的,但这是另一天的故事。

谢谢大家。

1个回答

如果您希望 IFFT 结果与 FFT 的输入相匹配,请不要在 IFFT 之前丢弃“虚数”(或正弦相关)分量或频谱的“上半部分”。还要确保 IFFT 的输入是完全共轭对称的,这样 IFFT 结果中的所有虚部都会被抵消(舍入误差或量化噪声除外)。IFFT 的长度必须与 FFT 的长度相同。

您的 99 和 95 Hz 分量也是需要的 -1 和 -5 Hz 分量(在复共轭对称中),以抵消时域数据到假想平面的任何旋转。由于 FFT 是复杂到复杂的转换,即使在处理严格的真实数据时也不能忽略这些组件。

FFT 结果的 0 Hz 或 DC 分量显示为双倍高度,因为它包含它自己的镜像值。

除非您的正弦波在 FFT 长度内完全是周期性的,否则您将需要对真实幅度进行插值,因为它们的峰值将在 FFT 结果 bin 中心之间。

IDFT 和 IFFT 可以用作信号发生器,但对于在 FFT 长度中不完全周期性的任何频率,必须非常小心地处理相位。有关详细信息,请参阅相位声码器分析/合成。