Pages

Fourier Transform Miscellanea

The Fourier Transform in Circular Symmetries

The Bessel equation of the first-kind, zero order is defined as
    \begin{equation}
        J_0(a) = \frac{1}{2\pi} \int_{0}^{2\pi} e^{-ia \cos(\theta - \phi)} d\theta
    \end{equation}
We thus define the Fourier Transform
    \begin{equation}
        G_0(\rho, \phi) = G_0(\rho) = 2\pi \int_{0}^{\infty} r g(r) J_0(2\pi r \rho) d\rho
    \end{equation}
and its inverse transform
    \begin{equation}
        g(r) = 2\pi \int_{0}^{\infty} \rho G_0(\rho) J_0(2\pi r \rho) d\rho
    \end{equation}
  

Discretizing the Fourier Transform

Discretizing the Fourier Transform allows us to use the Fast Fourier Transform (FFT) to quickly acquire the Fourier Transform of a continuous function in Python.

Discretize time and frequency
    \begin{equation}
        t = m\Delta t + t_0 \qquad
        \omega = k \Delta \omega \qquad
        \Delta t \Delta \omega = \frac{2 \pi}{N}
    \end{equation}
where \(m,k \in \mathbb{Z}\) and \(N\) is the number of samples. Using the definition of the Fourier Transform
    \begin{equation}
           F(\omega) = \frac{1}{\sqrt[]{2\pi}} \int_{-\infty}^{\infty} e^{-i\omega t} f(t) dt
    \end{equation}
we can substitute the previously defined quantities to get
    \begin{align}
        F(k\Delta \omega) &\approx \frac{1}{\sqrt[]{2\pi}} \sum_{m=1}^{N} \Delta t f(t_0 + m\Delta t) e^{-i k \Delta \omega (t_0+m\Delta t)} \\&= \frac{1}{\sqrt[]{2\pi}} \Delta t e^{-i t_0 k \Delta \omega} \sum_{m=1}^{N} e^{-2\pi i \frac{mk}{N}} f(t_0 + m\Delta t)
    \end{align}
Now notice that, in the final result, the constant phase factor is being multiplied by the discrete Fourier Transform (DFT) on the right. We may now use the FFT to calculate the DFT, keeping in mind that we must multiply by the phase factor to get an approximation of the continuous Fourier Transform.

We can define the inverse transform in exactly the same way
    \begin{equation}
        \omega = n \Delta \omega + \omega_0 \qquad
        t = l \Delta t \qquad
        \Delta t \Delta \omega = \frac{2 \pi}{N}
    \end{equation}
where \(n,l \in \mathbb{Z}\) and \(N\) is defined as before. Now the inverse transform is
    \begin{equation}
           f(t) = \frac{1}{\sqrt[]{2\pi}} \int_{-\infty}^{\infty} e^{i\omega t} F(\omega) dt
    \end{equation}\begin{align}
        f(l \Delta t) &\approx \frac{1}{\sqrt[]{2\pi}} \sum_{m=1}^{N} \Delta \omega F(\omega_0 + n\Delta \omega) e^{-i l \Delta t (\omega_0+n\Delta \omega)} \\&= \frac{1}{\sqrt[]{2\pi}} \Delta \omega e^{-i \omega_0 l \Delta t} \sum_{m=1}^{N} e^{-2\pi i \frac{nl}{N}} F(\omega_0 + n\Delta \omega)
    \end{align}

Python Code

This code works well for messing around with Fourier Transforms.
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack

# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

fig, ax = plt.subplots()
ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))
plt.show()

Friedel's Law

Given a real function, its Fourier transform \begin{equation} F(k) = \int_{-\infty}^{\infty} f(x) e^{ikx} dx \end{equation} has the following properties. 
  • \(F(k) = F^*(-k) \)
  • \(|F(k)|^2 = |F(-k)|^2\)
  • The phase of F, however, is antisymmetric: \(\phi(k) = -\phi(-k)\)
Centrosymmetric points \((k, -k)\) are called Friedel or Bijvoet pairs.