Confusion about Fourier transform of periodic Lorentzian

275 Views Asked by At

I have a function $x(t)$, that is the periodic concatenation of truncated Lorentzians.

$$x(t) = \left(\sum_{n=-\infty}^\infty \delta(t-nT)\right) * \left(\frac{1}{t^2+a^2} \cdot \mathrm{rect}_T(t)\right)$$

The $*$ is the convolution operator, $\delta$ is the Dirac delta, and $\mathrm{rect}_T(t) = 1$ if $|t|\le T/2$ and 0 otherwise.

The factor on the right is a Lorentzian, truncated at a width $T$. Convolving it with the Dirac comb makes it periodic.

For $a=1$ and $T=5$, $x(t)$ looks like this:

graph of x(t)

I want to compute the Fourier transform. Easy enough:

  • The convolution becomes a multiplication and vice versa;
  • the comb becomes another comb $\mathcal F[\sum_{n=-\infty}^\infty\delta(t-nT)](f) = \frac{1}{T} \sum_{n=-\infty}^\infty\delta(f-n/T)$;
  • the FT of the Lorentzian is a double sided exponential: $\mathcal F[\frac{1}{t^2+a^2}](f) \propto \exp(-2\pi a|f|)$;
  • the FT of the rectangular window is of course a sinc function: $\mathcal F[\mathrm{rect}_T(t)](f) = T \mathrm{sinc}(fT)$.

Putting it all together, I find:

$$\mathcal F[x(t)] \propto \frac{1}{T} \sum_{n=-\infty}^\infty\delta(f-n/T)) \cdot \left(\exp(-2\pi a|f|) * T \mathrm{sinc}(fT)\right).$$

(I have left out some of the normalization factors that I would anyway have gotten wrong.)

The Dirac comb just turns the continuous Fourier transform into a discrete Fourier series. The Fourier series is then just a convolution of an exponential and a sinc. All makes sense to me.

I wanted to quickly double check this by running a numeric test. For some $a$ and $T$, I sample $x(t)$, and compute the FFT. AFAICT, the FFT should match my analytical derivation.

But it doesn't.

In particular, for high frequencies I expect that the FT decays asymptotically like the sinc (which decays much slower than the exponential). The (envelope of the) sinc decays like $1/f$, so that was what I was expecting. Neither solution reproduces this: the analytical evaluation is basically constant, while the FFT behaves like $1/f^2$.

Where am I wrong?

My test code:

import numpy as np
from matplotlib import pyplot as plt
from scipy.signal import convolve

T = 10
a = 1

t = np.linspace(-T/2, T/2, 2**12)
yy = 1/(t**2 + a**2)
plt.figure()
plt.plot(t, yy)
plt.title('x(t)')
plt.show()
plt.close()

fft = np.fft.fftshift(np.fft.fft(yy))
ff = np.fft.fftshift(np.fft.fftfreq(yy.size, t[1] - t[0]))
ft_ana = convolve(np.pi/a * np.exp(-2*np.pi * a * np.abs(ff)), T*np.sinc(ff*T), 'same')

plt.figure()
plt.loglog(ff, np.abs(fft), label='FFT')
plt.loglog(ff, np.abs(ft_ana), label='analytical')
plt.legend(loc='best')
plt.show()
plt.close()

Open in Colab

The output:

enter image description here