【问题标题】:How does a complex number capture phase, amplitude AND frequency in the result of an FFT?复数如何捕获 FFT 结果中的相位、幅度和频率?
【发布时间】:2012-05-05 14:13:06
【问题描述】:

我知道幅度和相位是在 fft 结果的实部和虚部中捕获的。但是每个样本如何捕获阶段?

相位是否与时域提供的N个离散样本有关?

也就是说,如果输入样本在一秒钟内包含 44100 个样本,那么 FFT 的每个结果值是否代表相位的 1/44100?

例如,第一个 FFT 值是频率 1/44100,第二个值是 2/44100 等等?

【问题讨论】:

  • 您必须更具体地了解您想要的阶段。例如什么阶段?

标签: audio signal-processing fft


【解决方案1】:

FFT 的输出简单地表达了您如何根据谐波相关正弦分量的总和来重建原始波形。

每个输出值表示相应分量的幅度和相位(即偏移角)。请务必注意,每个组件都是一个复杂的正弦曲线(形式为 A * exp(j * 2pi * f * n + phi),而不是 A * cos(2pi * f * n + phi))。

频率隐含在输出样本的索引中;如果您的采样率为fs(以Hz 为单位)并且您的长度为-N FFT,则对应于输出样本i 的中心频率为i*fs/N(以Hz 为单位)。

【讨论】:

  • fs用什么表示?假设我的采样率为每秒 44100 个样本,fs 的值是多少?根据您的解释,我在示例中收集了 N = 44100。什么是 fs?
  • @stevelandiss:名义上是赫兹,但实际上它可以是任何频率单位。
【解决方案2】:

当您在问题的某些部分中表示“频率”时,我认为您是在说“相位”?

无论如何,如果您询问频率,它的工作原理与“输入”数据中的时间非常相似。您从时间序列数据开始,其中每个数组元素都在不同的时间。在 fft 之后,“输出”相似,但每个元素的频率不同。

它们的范围从恒定偏移到可能的最高频率,以统一的步骤,但实际顺序可能取决于您使用的实现。所以每个复数代表一个特定频率的幅度和相位 - 您可以从输出数组中的位置计算出频率。

如果您有 N 个点覆盖时间 T,则最高频率为 N/(2T),并且值是 1/T 的倍数(包括 0Hz - 恒定偏移)。例如,1 分钟内 60 个样本(N=60 T=60s)给出 0.5Hz 的最高频率。没有更高的频率,因为数据的采样不够好,无法清楚地挑选出来(例如,1 Hz 信号在每个样本上可能处于最大值,因此会显示为恒定信号)。这个限制称为nyquist frequency

(上面假设输出是一个复数数组;通常它是一个浮点数/双精度数组,您需要将复数从数组不同部分的实数和虚数中拼凑起来——这一切都有点乱七八糟,但概念与返回一个复杂值数组相同)。

ps 通常当我必须从某个地方使用 fft 例程时,我会制作一些具有恒定偏移和两个已知频率正弦波的数据,然后对其进行 fft 并查看结果。如果您使每个组件的幅度不同,那么通常很明显事物是如何排序的。您还可以检查比例,因为有时它具有/省略了 2pi 的因子...

【讨论】:

  • 是的,这就是我要问的,我想你回答了我的问题。我确实有一个复数输出数组,实际上我有 N 个这样的值,其中 N 是馈送到 FFT 的离散时域样本的数量。所以我问如何计算每个样本的 HZ 值。第一个样本是 1/4100 HZ,第二个样本是 2/44100 HZ,依此类推?
  • 您需要阅读文档以了解您的日常工作。你有基本的想法(所以希望现在一切都有意义:o),但实际顺序可能因实施而异。哦,还有一个 0Hz 的值(恒定偏移)。
  • 我使用来自courseware.ee.calpoly.edu/~jbreiten/C的源代码。假设它从最低频率 (1/44100) 到最高频率 (1HZ) 是否安全?最后,如果总是1/NT,那么FFT如何代表高于1HZ的样本呢?谢谢...
  • 我无法从该代码中分辨出来,抱歉。将在回答中解决频率范围。
  • @OliCharlesworth,谢谢。所以如果我把它倒过来,那么第一个元素是 1HZ,而第 N 个元素(在我的例子中是每秒 N=44100 个样本)是 1/44100 HZ?如果是的话,一个如何代表大于1HZ?
【解决方案3】:

相位与输入样本中周期性信号分量的时间偏移有关。

这是如何查看这个...

首先,请记住 Fast FTDiscrete FT 完全相同,只是以更有效的方式计算。因此,回到基础,我们将转换定义为:

Xk(0= sumfor 0( xn * e-j * 2*π * n * k/N)

地点:
xn 是输入样本
Xk 是输出/转换后的样本
N是样本数

现在,这个复数指数 e-j * 2*π * n * k/N 在几何上表示圆(半径为 1,以 (0,0) 为中心)上的点Re/Im 平面。如果您忘记了,请参阅Euler's formula

对于k 的固定值(表示输出/转换中感兴趣的特定频率),对于所有n,此圆圈上的不同点不超过N/k

再看公式中的和:

sumfor 0(xn * e-j * 2*π * n * k/N支持>)

在这个总和中,您通过输入信号 xn 将向量从点 (0,0) 缩放到圆上的上述点。您正在使这些向量更长或更短。然后你把它们加起来。

如果 xn 包含一个周期为 N/k 的周期信号,那么该信号的所有最大值都将对齐在圆上的一个点上并进行放大彼此。信号的最小值和所有其他值也有影响。

简单地说,您在这里所做的就是将您的输入 xn 缠绕到圆圈上。如果信号中存在周期性分量并且其周期与“周长”(=圆上的点数)匹配,则由于对齐的最大值和最小值,您将获得该周期/频率的峰值。如果周期与“周长”不匹配,则最大值会无处不在并相互抵消。这就是傅立叶变换的精髓,这就是它的工作原理和原理,没有魔法,没有真正复杂的数学,只是简单地将绳子缠绕到卷轴上。

您在 Xk 中得到的相位只是表示圆上所有最大值对齐的点。如果将 xn 中的周期信号移动一个或几个样本,对齐点也会移动,相位也会相应改变。

这就是几何解释。

现在,您可以将其视为傅里叶变换的数学属性。

如果你有你的 xn 及其变换 Xk=F{xn},那么 x 的变换nm 将是 F{xnm} = F{xn} * e-j * 2*π * k * m/N = Xk * e-j * 2*π * k * m/N。这称为shift theorem/property。您应该能够轻松得出这一结论。 e-j * 2*π * k * m/N这个因数的大小为1,只有乘以Xk时才会改变相位。

而且相位与频率无关。

此外,采样信号 xn 的最大频率是采样率的一半(实际上,只是比一半小一点,请参阅Nyquist sampling theorem)。这意味着 FT 您的案例永远不会为您提供 22050 Hz 或以上的任何信息,因为更高频率的所有信息都已丢失到采样中。

Xk 值的一半将为您提供具有负频率的分量。那是因为当k > N/2 时,您在圆上的点之间移动的方向会反转。因此,尽管输出/转换中有这么多样本,但最大频率仍然小于采样率的一半。

【讨论】:

    【解决方案4】:

    结果向量中的复数不会捕获 FFT 结果的频率。频率乘数由包含复数的每个数组元素的索引捕获。然后取索引乘以与时域样本的采样率以及FFT长度的倒数有关的频率比例因子,得到每个FFT bin的中心频率。

    每个 FFT 结果向量元素表示的每个频率正弦波都有自己独立的相位,不与任何其他 bin 或数组元素共享。

    如果您不知道 FFT 的长度,则频率将是未知的。所以你问题最后一部分的答案可能是未知或否。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2014-05-04
      • 2019-09-05
      • 2011-12-02
      相关资源
      最近更新 更多