如何从实数输入的fft()输出计算振幅和相位角?

5
我有来自一个实值信号的24个样本。我在样本上执行fft()函数并得到复杂输出。我想获取每个非冗余谐波的幅度和相位角度。我知道我的计算必须考虑到混叠,因为我有实值数据。我该怎么做:
(1)从双边转换为单边傅立叶变换,
我听说过几种方法。例如,我是否应将前12个谐波(即fft()输出的第2到13个元素)乘以二并丢弃其余的谐波(即保留fft()输出的第1到13个元素)?
(2)计算单边傅里叶变换的幅度,
我知道我可以使用Mod()函数,但是何时使用此功能?是在从双向到单向转换之前还是之后?
(3)计算单边傅里叶变换的相位角。
我知道我可以在fft()输出的虚部与实部比率上使用atan()函数,但是,何时使用该函数?是在从双向到单向转换之前还是之后?另外,如果atan未定义怎么办?
谢谢。

目前对我来说,这更像是一个数学问题,而不是一个程序设计问题,因此存在被认为是离题的风险。 - joran
1
@joran:这个问题可能更适合在http://dsp.stackexchange.com上提问,但我们在SO上仍然会收到很多与FFT相关的问题,并且只要问题中至少有一个实际的编程方面,它们似乎都能被容忍。 - Paul R
1个回答

3

由于你输入的数据是实数,FFT的输出将关于N/2对称,因此您只需查看前N/2个频域点,并将其幅值乘以2进行缩放。对于相位,您最好使用atan2函数,它将实部和虚部作为单独的参数,并返回一个四象限结果。


技术上来说,是前N/2+1个箱子。 - Owen
1
@Owen:是的,尽管最后一个是奈奎斯特,有些用处存疑。 - Paul R
谢谢,各位。在我检查答案并给予您应得的荣耀声望之前,我有以下澄清点:(a)通过缩放2倍,您是否指将n/2(或n/2 + 1)个分量乘以2? (b)因此,奈奎斯特不太有用...请澄清。我该怎么处理奈奎斯特?不要将其乘以2吗? (c)2的比例因素是为什么在计算给定分量方差的公式中,我被告知将振幅平方除以2?再次感谢。 - Brash Equilibrium
(a) 你可以将每个N/2个频率分量的实部和虚部乘以2,或者只是将幅度乘以2 - 这两种方法是等效的。(b) 在一般情况下,抗混叠滤波器会严重衰减奈奎斯特分量 - 是否将其包含在频谱中取决于您是否认为它有用。(c) 我们需要看到您正在使用的方差公式。 - Paul R
方差 = (振幅^2)/2,参考 http://met.jometeo.gov.jo/pls/portal/docs/PAGE/WEATHER/TAB4100/DR%20QASEM2.PDF 第5页。 - Brash Equilibrium
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接