Learn R Programming

cooltools (version 2.4)

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)

Value

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

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

Author

Danail Obreschkow

See Also

Examples

Run this code

## 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