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