簡體   English   中英

R中的FFT,獲取值

[英]FFT in R, obtaining values

我有一個使用 2 個正弦生成的數據

inputSignal <- 60000*sin(2*pi*(0.042)*x+4.5)+100000*sin(2*pi*(0.043)*x+3.3)

我想用 FFT 檢索這個信號。 我可以以圖形方式完成並定位頻率。 如何在不讀取圖形的情況下直接獲得頻率、幅度和相位的值。

samplingFrequency <- 128
timeInterval <- 1/samplingFrequency
x<-c(0:1048575)*timeInterval
inputSignal <- 60000*sin(2*pi*(0.042)*x+4.5)+100000*sin(2*pi*(0.043)*x+3.3)
ffts <- fft(inputSignal)
freq <- c(0:(length(ffts)-1))*samplingFrequency/length(ffts)
plot(freq,abs(ffts)/(length(ffts)/2),type="h",xlim=c(0.042,0.043))

由於實值信號的 FFT 是對稱的,我們將只取前半部分:(有一種更有效的實值 FFT 算法,可以將實值打包到復向量的分量中,以便避免浪費。我不知道它是否在 R 中的任何地方實現;我很久以前從 Press 等人那里學到的。數值食譜

N <- length(ffts)/2
ind <- 1:ceiling(N)
af <- abs(ffts[ind])/N  ## or Mod(ffts[ind])
i <- which(af %in% rev(sort(af))[1:2])   ## find two max frequencies

ff <- ffts[i]/length(ind-1)
Mod(ff)
atan2(Im(ff), Re(ff))
freq[i]

這(或類似的東西)應該大致正確。 我還沒有仔細檢查我所有的指數、象限、sin 與 cos 等(很可能你比我更清楚地記住傅立葉變換的細節......)如果我犯了錯誤,請隨意在評論中糾正我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM