For two discrete-time sequences $f[n]$ and $g[n]$, their linear convolution $(f*g)[n]$ is also given by $$f*g = \mathcal{F}^{-1}(\mathcal{F}(f) \cdot \mathcal{F}(g)),$$ where $\mathcal{F}$ and $\mathcal{F}^{-1}$ denote the DTFT (discrete time Fourier transform) and IDTFT (inverse discrete-time Fourier transform) respectively.

Let us consider two Gaussian sequences $f[k]$ and $g[k]$ in the momentum space and we want to convolve them using the formula above.

import numpy as np
import matplotlib.pyplot as plt

L = 17.5
N = 48
dx = L/N
dk = 2*np.pi/L 
x = np.arange(N)*dx - L/2
k = 2*np.pi * np.fft.fftfreq(N, dx)

alpha = 1
beta = 1

def f(k):
   return np.sqrt(np.pi/alpha) * np.exp(-k**2/(4*alpha))

def g(k):
   return np.sqrt(np.pi/beta) * np.exp(-k**2/(4*beta))

fs = np.array([f(k_) for k_ in k])
gs = np.array([g(k_) for k_ in k])

fftconvfg = np.fft.ifft(fs * gs)

plt.plot(ks, np.fft.fftshift(fftconvfg))

I get the following plot. enter image description here


How can I demonstrate that my plotting is (or, is not) subject to the aliasing artifacts? And if there are aliasing artifacts, how can I get rid of it?

  • $\begingroup$ Are you dealing with the discrete-time signals or continuous time? Why do you use $f(x)$ ? and then $f[k]$... Please clarify. $\endgroup$ – Fat32 Aug 24 '17 at 20:22
  • $\begingroup$ I'm dealing with discrete-time signals. I wanted to put the convolution theorem the way I learnt in a math course. My bad! $\endgroup$ – rainman Aug 24 '17 at 20:25
  • $\begingroup$ ok... I will edit the question then. $\endgroup$ – Fat32 Aug 24 '17 at 20:26

Short answer: For the convolution of two Gaussian sequences there will be aliasing.

If the sequence produced as the result of linear convolution has infinite domain of support, then there will always be aliasing in the Fourier domain implementation of the linear convolution using the circular convolution implied by the DFT (discrete Fouerier transform) which is used to represent the theoretical DTFT that provides the theorem in your question.

Therefore, if you want an alias free implementation of the theorem in your question, then the resulting signal (result of the true linear convolution) must have a finite length.

That being said, for many practical cases, the amount of distortion due to aliasing will be small, so small to be lost behind any ADC step size or even smaller than represantable by the floating point number system that's used to implement the algorithm. In such cases it can practically be considered to be a sufficient realization of the true lienar convoluion.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.