首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fft()得到幅值、频率、相位和反相。

fft()得到幅值、频率、相位和反相。
EN

Stack Overflow用户
提问于 2022-05-25 18:35:17
回答 1查看 166关注 0票数 0

我在光谱分析方面很差,所以请原谅我的愚蠢问题。我在网上找到一个人的代码来计算频率和相位的振幅

代码语言:javascript
复制
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系列

这段代码对我来说并不是必须的,重要的是我要知道如何从序列中得到振幅、频率、相位,然后再将序列组装回来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-31 17:51:41

当对fft结果进行子采样时,您将无法完全恢复时间序列:

代码语言:javascript
复制
fk <- 2*fk[seq(1, length(fk), by = 2)]/N

意味着你失去了一些频率。

在没有次采样的情况下,可以使用逆fft进行恢复:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72382658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档