[R] fft inverse display help
rkevinburton at charter.net
rkevinburton at charter.net
Wed Oct 1 13:11:17 CEST 2008
So iis what you are saying n plotting the list of compliex numbers 'R' recognizes the non-symmery and plots it differently (Re vs. Im) rather than versus Time?
---- Dieter Menne <dieter.menne at menne-biomed.de> wrote:
> <rkevinburton <at> charter.net> writes:
>
> >
> > I have a a simple function that generates a time series square wave:
> >
>
> Your example is not self-running, because the definition of e is unclear.
>
> > Now I ge the x-asis as the real component and y-axis as imaginary component.
> When does the display switch?
> > How many frequencies do I select before I get the 'Time' axis back? From the
> above I am selecting 40 (out of 1500).
> >
>
> When you modify components in the frequency domain, you must always take into
> account that these are mirrored at the center coefficient; any changes must be
> done symmetrically to the center. Well, strictly speaking: these are periodic,
> and it is much easier to think of swapping the upper half in mind to the
> negative axis. And a caveat: index 1 (R habits are bad here, it is effectively
> frequency 0) is special, it turns up only once and is the DC-component in
> electric speak.
>
> Asssume you have 8 coefficients, and you want to lowpass these:
>
> 9 4 5 6 1 6 5 4
> 9 4 5 0 0 0 5 4
>
> As a check if you have done right, look at the imaginary components after the
> transformation back to time domain: these should be zero up to rounding errors.
>
> Dieter
>
> genseq <- function()
> {
> x <- numeric(4*365)
> s <- seq(as.Date("2005-01-01"), as.Date("2008-12-31"), by="month")
> ob <- as.vector(s[c(10,22,34,46)] - as.Date("2005-01-01"))
> oe <- as.vector(s[c(11,23,35,47)] - as.Date("2005-01-01"))
> for(.index in 1:length(ob))
> {
> x[ob[.index]:(oe[.index] - 1)] <- 1
> }
> return(ts(x, frequency=365))
> }
>
> par(mfcol=c(3,1))
> series <- genseq()
> fs <- fft(series)
> fi <- fft(fs, inverse=TRUE) / length(fs)
> plot(fi)
>
> ff <- fs
> lowpass <- 10
> ff[lowpass:(length(ff)-lowpass+2)] = 0
> plot(ff)
> fi <- fft(ff, inverse=TRUE) / length(fs)
> var(Im(fi)) # Check imaginary part, simple way
> plot(fi)
>
> # This contains an error
> ff[lowpass:length(ff)] = 0
> fi <- fft(ff, inverse=TRUE) / length(fs)
> var(Im(fi)) # Imaginary part is large
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list