【问题标题】:How do I calculate amplitude and phase angle of fft() output from real-valued input? [closed]如何从实值输入计算 fft() 输出的幅度和相位角? [关闭]
【发布时间】:2011-11-25 22:46:54
【问题描述】:

我有 24 个来自实值信号的样本。我对样本执行fft() 函数并获得复杂的输出。我想获得每个非冗余谐波的幅度和相位角。我知道我的计算必须考虑混叠,因为我有实值数据。我该怎么做:

(1) 将双边傅里叶变换转换为单边傅里叶变换,

我在这里听到了几件事。例如,我是否将前 12 个谐波(即 fft() 输出的第 2 到第 13 个元素)乘以 2 并丢弃其余谐波(即,保留 fft() 输出的第 1 到第 13 个元素)?

(2)计算单边傅里叶变换的幅值,

我知道我可以使用Mod() 函数,但我应该什么时候使用?在我从双面转换为单面之前还是之后?

(3)计算单边傅里叶变换的相位角。

我知道我可以使用atan() 函数来计算fft() 输出的虚部与实部的比率,但同样,我什么时候这样做?在双面转换之前还是之后?另外,如果atan 未定义怎么办?

谢谢。

【问题讨论】:

  • 目前在我看来,这更像是一道数学题而不是编程题,因此有可能被视为题外话。
  • @joran:它可能更适合dsp.stackexchange.com,但我们仍然会收到很多关于 SO 的 FFT 相关问题,只要至少有一个令牌实用编程,它们似乎是可以容忍的问题的方面

标签: r fft


【解决方案1】:

由于您的输入是真实的,因此 FFT 的输出将关于 N / 2 对称,因此您只需查看前 N / 2 个 bin 并将幅度缩放 2 倍。对于相位,您理想情况下需要 atan2函数将实部和虚部作为单独的参数并返回 4 象限结果。

【讨论】:

  • 好吧,从技术上讲,第一个 N/2+1 个 bin。
  • @Owen:是的,虽然最后一个是 Nyquist 并且有点可疑。
  • 谢谢,伙计们。在我检查答案并为您提供您应得的光荣代表之前,我有几点要澄清:(a)按比例乘以 2,您的意思是将 n/2(或 n/2 + 1)分量乘以二,是吗? (b) 所以奈奎斯特的用处值得怀疑……请澄清。我应该如何处理奈奎斯特?不是乘以二吗? (c) 为什么在计算给定分量方差的公式中,我被告知将幅度的平方除以二?再次感谢。
  • (a) 您可以将每个 N / 2 个 bin 的实部和虚部乘以 2,或者您可以将 magnitude 乘以 2 - 它相当于同样的事情,(b)在一般情况下,您的抗混叠滤波器将严重衰减奈奎斯特分量 - 是否将其包含在您的频谱中是否有用取决于您,(c)我们需要查看您正在使用的方差公式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2012-03-16
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
相关资源
最近更新 更多