1234567891011121314151617181920212223242526272829 |
- # Testing the reconstruction of arbitrary sequencies using fourier transforms
- library(ggplot2)
- library(scales)
- library(dplyr)
- theme_set(theme_bw())
-
- fextract <- function(x, y, keep = 1, top = TRUE) {
- sdy <- sd(y)
- my <- mean(y)
- stany <- (y - my) / sdy
- ftf <- fft(stany)
- if (top) {
- ftf[rank(-abs(ftf)) > keep] <- 0
- } else {
- ftf[(keep + 1):length(ftf)] <- 0
- }
- rfv <- Re(fft(ftf, inverse = TRUE))
- return(data.frame(x = x, y = y, f = (rfv - mean(rfv)) / sd(rfv) * sdy + my))
- }
-
- n <- 100
- k <- 1
- dat1 <- data.frame(x = 1:n, yo = 10 * sin(rescale(1:n, 2 * c(-pi, pi) + rnorm(2))))
- dat1$y <- dat1$yo + rnorm(n)
- fnew <- fextract(dat1$x, dat1$y, keep = k, top = TRUE)
- # ggplot(rdat1, aes(x, y)) + geom_line()
- ggplot(fnew, aes(x, y)) + geom_line() + geom_point() +
- geom_line(aes(x, f), color = "blue") + geom_point(aes(x, f), color = "blue")
|