Computes the 1D, 2D, or 3D Fast Fourier Transform (FFT) of a matrix. In the 1D case, the transform is given by
$$ E_w[m]=\text{fft}(E_x)=\sum_{n1}^NE_x[n]. e^{(\frac{2\pi i}{N})(n1)(m1)} $$
The FFT, inverse FFT, and all associated functions have an option (option 1 below) that controls the format used to store the frequency domain data. When working with spectral data it is not possible to switch between formats; there are no functions to convert between formats. This implies that if you use option 1=n to produce a spectrum with [[fft]], then you must also use option 1=n if you want to pass that same spectral data to [[invfft]]. Similarly, if you use option1 = n for [[fft]], then you also need to use option 1=n with [[fftw]] to get the proper frequency vector corresponding to your spectrum. [[invfft]] and [[fftk]] work in the same way.
Syntax 
Description 

out = fft(Ex); 
Returns the fast Fourier transform of Ex. Ex can be 1D, 2D or 3D. 
out = fft(Ex,option1,option2); 
option1 This option controls the format used to store the frequency domain data. The options are:
option2 This option is either a 1, 2 or 3 element vector depending on whether Ex is 1D, 2D or 3D. For each dimension, specify a value of either 0, 1 or N to obtain the desired 0 padding options.

Note: FFT Conventions There are different, but equivalent conventions for defining Fourier transforms. Lumerical defines the forward FFT using a positive sign in the exponential term, and the inverse FFT using a negative sign in the exponential term. However, some other packages (e.g. MATLAB) use the opposite convention, with a negative sign in the exponential for the forward FFT and a positive sign in the exponential for the inverse FFT. To convert between the different FFT conventions, switch the [[invfft]] and [[fft]] and rescale the results. For a signal y with N elements, this can be done as follows: fft(y,1,0) (Lumerical) \(\Longleftrightarrow\) ifft(y)*N (MATLAB) invfft(y,1,0) (Lumerical) \(\Longleftrightarrow\) fft(y)/N (MATLAB) 
Example
This example transforms a time signal with 60 and 100 rad/s angular frequency components into the frequency domain. The function [[fftw]] is used to get the correct frequency vector. If this was a spatial signal, then [[fftk]] should be used in place of [[fftw]].
t=linspace(0,1,1000); # time signal w1=100; # frequency, in rad/s w2=60; # frequency, in rad/s x=0.5*(sin(w1*t)+sin(w2*t)); # the signal plot(t,x,"time","signal"); o1=2; # option 1 o2=1; # option 2 y=fft(x,o1,o2); # fft w=fftw(t,o1,o2); # frequency signal plot(w,abs(y),"freq (rad/sec)","amplitude");
This example shows how to calculate the FFT of the electric field intensity (i.e., combining all three field components) recorded by a time monitor in the attachment. If you want to filter the highfrequency data, set option1 to 2.
# get data from point time monitor m = "time"; t = getdata(m,"t"); Ex = getdata(m,"Ex"); Ey = getdata(m,"Ey"); Ez = getdata(m,"Ez"); # option1 = 1 > standard fft # option1 = 2 > remove high frequency data option1 = 2; # do fft of each component f = fftw(t, option1)/2/pi; Exw = fft(Ex, option1); # fft each component separately Eyw = fft(Ey, option1); Ezw = fft(Ez, option1); E2w = abs(Exw)^2+abs(Eyw)^2+abs(Ezw)^2; # combine field components plot(f/1e12,E2w,"f (THz)","E(f)^2","fft E^2 intensity");
The following figures show the resulting plot for both the standard transform and the option to remove the highfrequency data (option1 = 1 or 2).
See Also
List of commands , invfft , fftw , fftk , czt