fft() 得到振幅、频率、相位并依次反相

fft() get amplitude, frequency, phase and invert back in series

我的光谱分析很烂,所以请原谅我的愚蠢问题。 我在网上找到了某人的代码来计算频率和相位的幅度

y <- rnorm(50) # some series
samp.freq <- 10
N <- length(y)
fk <- fft(y)
fk <- fk[2:length(fk)/2+1]
fk <- 2*fk[seq(1, length(fk), by = 2)]/N


freq <- (1:(length(fk)))*samp.freq/(2*length(fk))
amp <- Mod(fk)
pha <- Arg(fk) 

我的问题是:知道freq ,amp, pha如何恢复y系列

这段代码对我来说不是强制性的,重要的是了解如何从序列中获取振幅、频率、相位,然后 assemble 返回序列

您将无法完全恢复时间序列,因为 fft 结果是二次采样的:

fk <- 2*fk[seq(1, length(fk), by = 2)]/N

意味着你正在失去一些频率。

没有二次采样,可以用逆fft恢复:

set.seed(123)
y <- rnorm(50) # some series
samp.freq <- 10
N <- length(y)
fk <- fft(y)

# No subsampling
#fk <- fk[2:length(fk)/2+1]
#fk <- 2*fk[seq(1, length(fk), by = 2)]/N

freq <- (1:(length(fk)))*samp.freq/(2*length(fk))
amp <- Mod(fk)
pha <- Arg(fk) 

fk.restored <- amp * complex(real = cos(pha),im = sin(pha))
y.restored <- Re(fft(fk.restored,inverse=TRUE)/length(fk))
all.equal(y.restored,y)
#> [1] TRUE