我有一个声音功能,我试图分解成正弦/余弦。所以我采用了快速傅里叶变换。通过使用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的相位。我究竟做错了什么?
答案 0 :(得分:3)
您可能会发现atan2
功能可以满足您的需求。由于原型是atan2(y, x)
,因此您可以为其赋予值的虚构和实部。所以你可以这样做:
angle = atan2(Im(value), Re(value));