FFT的幅度和相位

时间:2014-01-12 00:04:18

标签: r

我有一个声音功能,我试图分解成正弦/余弦。所以我采用了快速傅里叶变换。通过使用fft(y,inverse=FALSE)函数,我能够将声音的时域转换为频率doman。输出很复杂。我读到这是为了转换这个虚构形式的输出并清除必要的信息,即A(v)cos(2*pi*v+P)的幅度和相位,必须使用输出的abs()得到振幅;但是我很难找到让我们进入相位的R函数。在MATLAB中,angle()函数返回FFT的相位。 R中各自的函数是什么来找到相位??

更新

谢谢你们的建议;还在经历一个问题。我在一个简单的函数上运行FFT来测试它是否有效。我的功能是y=cos(2*pi*(seq(0,10,by=.01)*(1/5)+7.5)。 因此频率为1/5,相移为7.5。

y=cos(2*pi*(seq(0,10,by=.01)*(1/5)+7.5)
fty=(y,inverse=F)
plot(abs(fty),xlim=c(0,10),type="l")
angle=atan2(Im(fty), Re(fty))
> angle[3]
[1] 1.222766

当我绘制系列时,振幅在频率值为3时达到峰值,角度函数(应该在振幅达到峰值的频率处给出我的相位)给出一个1.2的相位。我究竟做错了什么? enter image description here

1 个答案:

答案 0 :(得分:3)

您可能会发现atan2功能可以满足您的需求。由于原型是atan2(y, x),因此您可以为其赋予值的虚构和实部。所以你可以这样做:

angle = atan2(Im(value), Re(value));