我有一个函数,它稍微包装了一下fft()
:
function(y, samp.freq, ...){
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))
return(data.frame(fur = fk, freq = freq))
}
y
是您的信号值,samp.freq
是其采样频率。它的输出是一个有两列的data.frame
- fur
是快速傅里叶变换后得到的复数(Mod(fur)
将是幅度,Arg(fur)
将是相位),而freq
是相应频率的向量。
但是为了进行频率过滤,我强烈推荐使用signal包。
例如使用Butterworth滤波器:
library('signal')
bf <- butter(2, c(low, high), type = "pass")
signal.filtered <- filtfilt(bf, signal.noisy)
在这种情况下,间隔应定义为c(Low.freq, High.freq) * (2/samp.freq),其中Low.freq和High.freq是频率间隔的边界。有关更多信息,请参阅软件包文档和
Octave参考指南。
另外,请注意,使用fft只能获得高达(采样频率)/2的频率。