Learn R Programming

physx (version 1.0)

dft: Discrete Fourier Transform

Description

Discrete Fourier Transform (DFT) with longest modes at the center in Fourier space and normalized such that dft(dft(f),inverse)=f. This is the discretization scheme described in Appendix D of Obreschkow et al. 2013, ApJ 762. Relies on fft.

Usage

dft(f, inverse = FALSE, shift = -floor(dim(as.array(f))/2), simplify = TRUE)

Arguments

f

real or complex D-dimensional array containing the values to be transformed.

inverse

logical flag; if TRUE the inverse Fourier transform is performed.

shift

D-vector specifying the integer shift of the coordinates in Fourier space. Set to shift=rep(0,D) to produced a DFT with the longest mode at the corner in Fourier space.

simplify

logical flag; if TRUE the complex output array will be simplified to a real array, if it is real within the floating point accuracy

Value

Returns an array of the same shape as f, containing the (inverse) Fourier Transform.

See Also

fft

Examples

Run this code
# NOT RUN {
## DFT of a 2D normal Gaussian function
n = 30
f = array(0,c(n,n))
for (i in seq(n)) {
  for (j in seq(n)) f[i,j] = exp(-(i-6)^2/4-(j-8)^2/2-(i-6)*(j-8)/2)
}
plot(NA,xlim=c(0,2.1),ylim=c(0,1.1),asp=1,bty='n',xaxt='n',yaxt='n',xlab='',ylab='')
rasterImage(f,0,0,1,1,interpolate=FALSE)
g = dft(f)
img = array(hsv((pracma::angle(g)/2/pi)%%1,1,abs(g)/max(abs(g))),c(n,n))
rasterImage(img,1.1,0,2.1,1,interpolate=FALSE)
text(0.5,1,'Input function f',pos=3)
text(1.6,1,'DFT(f)',pos=3)

# }

Run the code above in your browser using DataLab