{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# The Discrete Fourier Transform\n", "\n", "*This Jupyter notebook is part of a [collection of notebooks](../index.ipynb) in the bachelors module Signals and Systems, Comunications Engineering, Universität Rostock. Please direct questions and suggestions to [Sascha.Spors@uni-rostock.de](mailto:Sascha.Spors@uni-rostock.de).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition\n", "\n", "The [discrete Fourier transform](https://en.wikipedia.org/wiki/Discrete_Fourier_transform) (DFT) is defined as\n", "\n", "\\begin{equation}\n", "X[\\mu] = \\sum_{k=0}^{N-1} x[k] \\; e^{-j \\mu \\frac{2 \\pi}{N} k}\n", "\\end{equation}\n", "\n", "where $N \\in \\mathbb{N}$ denotes the length of the DFT and $\\mu \\in \\mathbb{Z}$ the discrete frequency. The DFT maps a discrete signal $x[k]$ to its discrete spectrum $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$. Since its kernel $e^{-j \\mu \\frac{2 \\pi}{N} k}$ is periodic with period $N$ with respect to the discrete frequency $\\mu$, the spectrum $X[\\mu]$ is periodic with period $N$\n", "\n", "\\begin{equation}\n", "X[\\mu] = X[\\mu + \\nu N]\n", "\\end{equation}\n", "\n", "for $\\nu \\in \\mathbb{Z}$. It follows from the periodicity that the unique range for $\\mu = 0,1, \\dots, N-1$. For $k = 0,1, \\dots, N-1$ the inverse discrete Fourier transform (IDFT) is consequently defined as\n", "\n", "\\begin{equation}\n", "x[k] = \\frac{1}{N} \\sum_{\\mu=0}^{N-1} X[\\mu] \\; e^{j \\mu \\frac{2 \\pi}{N} k}\n", "\\end{equation}\n", "\n", "The kernel $e^{j \\mu \\frac{2 \\pi}{N} k}$ of the IDFT is periodic with respect to the sample index $k$. It follows that $x[k] = \\text{IDFT}_M \\{ X[\\mu] \\}$ is periodic\n", "\n", "\\begin{equation}\n", "x[k] = x[k + \\nu N]\n", "\\end{equation}\n", "\n", "Although $k$ and $\\mu$ can take any integer value it can be concluded from the periodicity, that the DFT is only unique for $k, \\mu = 0, 1, \\dots N-1$. As shown later, the periodicity of the DFT and IDFT has wide-ranging consequences for the properties and theorems of the DFT.\n", "\n", "The kernel of the DFT is often represented in terms of the primitive $N$-th [root of unity](https://en.wikipedia.org/wiki/Root_of_unity) abbreviated by $w_N = e^{-j \\frac{2 \\pi}{N}}$\n", "\n", "\\begin{equation}\n", "X[\\mu] = \\sum_{k=0}^{N-1} x[k] \\; w_N^{\\mu k}\n", "\\end{equation}\n", "\n", "The kernel of the IDFT is given by reversing the sign of the exponent of $w_N$. Other common definitions of the DFT and IDFT may be found in the literature. They differ with respect to the sign of the exponent and the normalization factor $\\frac{1}{N}$. As a consequence, the properties, theorems and transforms may differ from the ones given here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Link to the Discrete-Time Fourier Transform\n", "\n", "The [discrete-time Fourier transform](../discrete_time_fourier_transform/definition.ipynb) (DTFT) $X(e^{j \\Omega}) = \\mathcal{F}_* \\{ x[k] \\}$ of a causal signal of finite length $x[k] = 0$ for $k \\in \\mathbb{Z} \\setminus \\{0,1,\\dots, N-1 \\}$ is continuous with respect to the normalized angular frequency $\\Omega$. The DFT $X[\\mu]$ of the same signal is discrete. In order to derive the relation between both transforms, the definition of the DTFT is compared to the definition of the DFT. This reveals that both are linked by\n", "\n", "\\begin{equation}\n", "X[\\mu] = X(e^{j \\Omega}) \\big\\rvert_{\\Omega = \\mu \\frac{2 \\pi}{N}}\n", "\\end{equation}\n", "\n", "The DFT $X[\\mu]$ of a finite-length discrete signal $x[k]$ can be derived by sampling its DTFT $X(e^{j \\Omega})$ equidistantly at $\\Omega = \\mu \\frac{2 \\pi}{N}$. \n", "\n", "The questions arises if the DFT $X[\\mu]$ fully represents a discrete signal $x[k]$ of finite length? In order to elaborate on this, the DTFT of a discrete signal is investigated. The [DTFT of a discrete signal is periodic](../discrete_time_fourier_transform/definition.ipynb#Definition) with period $2 \\pi$. This holds also for a discrete signal $x[k]$ of finite length. This is depicted below\n", "\n", "![DTFT of a discrete signal of finite length](DTFT_finite_length_signal.png)\n", "\n", "The [spectrum of a periodic signal](../periodic_signals/spectrum.ipynb) consists of a series of weighted Dirac impulses. It can be described fully by the weights of the Dirac impulses. The same holds also for the spectrum $X_\\text{p} (e^{j \\Omega})$ of the periodic continuation $x_\\text{p}[k] = \\sum_{\\nu = - \\infty}^{\\infty} x[k - \\nu N]$ of the finite length signal $x[k]$. The weights of the Dirac pulses are given by equidistant sampling of the spectrum of one period $X(e^{j \\Omega})$ at $\\Omega = \\mu \\frac{2 \\pi}{N}$. This is depicted below\n", "\n", "![DTFT of the periodic continuation of a discrete signal of finite length](DTFT_periodic_continuation.png)\n", "\n", "It can be concluded from above reasoning that the DFT of a causal finite-length discrete signal contains all information on the signal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Interpretation of the Spectrum\n", "\n", "Inspection of the definition of the inverse DFT reveals, that a discrete signal $x[k]$ of finite length can be represented as a superposition of weighted harmonic exponential signals $z^k$ with the complex frequencies $z = e^{j \\mu \\frac{2 \\pi}{N}}$ for $\\mu = 0, 1, \\dots, N-1$. The corresponding normalized angular frequencies of the exponential signal are given as $\\Omega = \\mu \\frac{2 \\pi}{N}$. In the following, the complex frequencies $z$ are illustrated in the $z$-plane for the case of an even ($N=10$) and odd length ($N=11$) of the DFT\n", "\n", "![Complex frequencies of DFT kernel](sampling_unit_circle.png)\n", "\n", "The distribution of the complex frequencies in the $z$-plane is different for an even or odd length of the DFT. Only in the case of an even length, the normalized frequency $\\Omega = \\pi$ is included. For a further interpretetation of the discrete frequency $\\mu$, the link between the DFT and the DTFT is used. The DFT $X[\\mu]$ can be derived from the DTFT by sampling $X(e^{j \\Omega})$ at $\\Omega = \\mu \\frac{2 \\pi}{N}$. The DTFT $X(e^{j \\Omega})$ is sampled in the range of $0 \\leq \\Omega < 2 \\pi$. Since the DTFT is periodic with a period of $2 \\pi$, it can be conluded that the DTFT $X(e^{j \\Omega})$ for $\\pi < \\Omega < 2 \\pi$ is equal to the DTFT for $-\\pi < \\Omega < 0$. It follows, that the DFT $X[\\mu]$ for $\\frac{N}{2} < \\mu \\leq (N-1)$ is equal to the sampled DTFT for [negative normalized angular frequencies](https://en.wikipedia.org/wiki/Negative_frequency) $-\\pi < \\Omega < 0$. The resulting normalized frequency axis of the DFT is illustrated for the case of an even length ($N=10$)\n", "\n", "![Frequency axes of the DFT](DFT_axis.png)\n", "\n", "For a discrete signal which has been derived by sampling from a continuous signal $x[k] = x(k T)$, the normalized angular frequency $\\Omega$ can be related to the frequency $f$ by $\\Omega = 2 \\pi \\frac{f}{f_\\text{s}}$, where $T$ and $f_\\text{s} = \\frac{1}{T}$ denote the sampling interval and frequency, respectively. The lowest axis illustrates the resulting frequency axis. It can be concluded that the first half of the spectrum represents the complex values of $X[\\mu]$ for increasing positive frequencies, while the second half represents the complex values for decreasing negative frequencies. This structure has to be kept in mind when interpreting a DFT.\n", "\n", "The DFT of a discrete signal $x[k] \\in \\mathbb{C}$ is in general complex valued, $X[\\mu] \\in \\mathbb{C}$. It is commonly illustrated by its real and imaginary part \n", "\n", "\\begin{equation}\n", "X[\\mu] = \\Re \\{ X[\\mu] \\} + j \\cdot \\Im \\{ X[\\mu] \\}\n", "\\end{equation}\n", "\n", "or by its magnitude and phase \n", "\n", "\\begin{equation}\n", "X[\\mu] = |X[\\mu]| \\cdot e^{j \\varphi[\\mu]}\n", "\\end{equation}\n", "\n", "The magnitude spectrum $|X[\\mu]|$ provides insights into the superposition of a discrete signal in terms of the level of its harmonic contributions. It is therefore a valuable tool for the analysis of signals and systems." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrix/Vector Representation\n", "\n", "Above definition of the DFT is given in terms of a summation over the samples $x[k]$ for $k=0, 1, \\dots, N-1$. The summation has to be evaluated for $\\mu = 0, 1, \\dots, N-1$ in order to yield the DFT $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$. The calculation can be represented in terms of a matrix/vector multiplication. First the $N$ samples of the signal $x[k]$ are combined into the $N \\times 1$ vector\n", "\n", "\\begin{equation}\n", "\\mathbf{x} = \\left[ x[0], x[1], \\dots, x[N-1] \\right]^T\n", "\\end{equation}\n", "\n", "In the same manner, the $N$ samples of the spectrum $X[\\mu]$ are combined into the $N \\times 1$ vector\n", "\n", "\\begin{equation}\n", "\\mathbf{X} = \\left[ X[0], X[1], \\dots, X[N-1] \\right]^T\n", "\\end{equation}\n", "\n", "The computation of all $N$ values of $X[\\mu]$ from all $N$ values of $x[k]$ can now be expressed as matrix/vector product\n", "\n", "\\begin{equation}\n", "\\mathbf{X} = \\mathbf{F} \\mathbf{x}\n", "\\end{equation}\n", "\n", "where the $N \\times N$ [DFT matrix](https://en.wikipedia.org/wiki/DFT_matrix) is defined as \n", "\n", "\\begin{equation}\n", "\\mathbf{F} = \\left[ \\begin{array}{ccccc}\n", "1 & 1 & 1 & \\dots & 1 \\\\\n", "1 & w_N & w_N^2 & \\dots & w_N^{N-1} \\\\\n", "1 & w_N^2 & w_N^6 & \\dots & w_N^{2 (N-1)} \\\\\n", "\\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "1 & w^{N-1} & w^{2(N-1)} & \\dots & w^{(N-1)(N-1)}\n", "\\end{array} \\right]\n", "\\end{equation}\n", "\n", "Above DFT matrix is, besides the scaling factor $N$, [unitary](https://en.wikipedia.org/wiki/Unitary_matrix)\n", "\n", "\\begin{equation}\n", "\\mathbf{F} \\, \\mathbf{F}^H = N \\cdot \\mathbf{I}\n", "\\end{equation}\n", "\n", "where $(\\cdot)^H$ denotes the [Hermitian](https://en.wikipedia.org/wiki/Hermitian_adjoint) (conjugate transpose) of a matrix and $\\mathbf{I}$ the $N \\times N$ [identity matrix](https://en.wikipedia.org/wiki/Identity_matrix). Multiplying the left- and right-hand side of above matrix/vector representation of the DFT from the left by $\\frac{1}{N} \\mathbf{F}^H$ yields the representation of the inverse DFT as\n", "\n", "\\begin{equation}\n", "\\mathbf{x} = \\frac{1}{N} \\cdot \\mathbf{F}^H \\mathbf{X}\n", "\\end{equation}\n", "\n", "The matrix/vector representation of the DFT is useful for the discussion of its properties and its implementation. Functions for the computation of the DFT matrix are provided in many toolkits for numerical mathematics. In the following the Python function [`scipy.linalg.dft`](http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.dft.html) is used. The real part of $w_N^\\mu$ for $\\mu=0, 1, \\dots, N-1$ is plotted for illustration of the kernel of the DFT. The application of the matrix/vector representation is shown in the following section." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.linalg import dft\n", "\n", "F = dft(8)\n", "\n", "plt.figure(figsize=(10, 10))\n", "for n in range(8):\n", " ax = plt.subplot(4, 2, n+1)\n", " ax.stem(np.real(F[:, n]))\n", " plt.title('$\\mu = %d$'%n)\n", " plt.ylabel(r'$\\Re \\{ e^{-j \\mu \\frac{2 \\pi}{N} k} \\}$')\n", " plt.xlabel('$k$')\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation of the Dirac Impulse\n", "\n", "The $\\text{DFT}_N \\{ \\delta[k] \\}$ of the [Dirac impulse](../discrete_signals/standard_signals.ipynb#Dirac-Impulse) is derived by introducing $\\delta[k]$ into the definition of the DFT and exploiting the sifting property of the Dirac impulse\n", "\n", "\\begin{equation}\n", "\\text{DFT}_N \\{ \\delta[k] \\} = \\sum_{k = 0}^{N-1} \\delta[k] \\, e^{-j \\mu \\frac{2 \\pi}{N} k} = 1\n", "\\end{equation}\n", "\n", "The transform of the Dirac impulse is equal to one. Hence, all discrete frequencies $\\mu$ are present with equal weight. This is an important property in the theory of discrete signals and systems, since the Dirac impulse is used to characterize linear time-invariant (LTI) systems by their [impulse response](../discrete_systems/impulse_response.ipynb) $h[k] = \\mathcal{H} \\{ \\delta[k] \\}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Derive the $\\text{DFT}_N \\{ \\delta[k - \\kappa] \\}$ of the shifted Dirac impulse for $0 \\leq \\kappa < N$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation of the Exponential Signal\n", "\n", "The DFT $X[\\mu] = \\text{DFT}_N \\{ e^{j \\Omega_0 k} \\}$ of the [harmonic exponential signal](../discrete_signals/standard_signals.ipynb#Complex-Exponential-Signal) with normalized frequency $\\Omega_0$ is derived by introducing it into the definition of the DFT. This results in\n", "\n", "\\begin{equation}\n", "X[\\mu] = \\sum_{k=0}^{N-1} e^{j \\Omega_0 k} \\; e^{-j \\mu \\frac{2 \\pi}{N} k} \n", "= \\sum_{k=0}^{N-1} e^{j k (\\Omega_0 - \\mu \\frac{2 \\pi}{N})} \n", "= \\frac{1 - e^{j (\\Omega_0 - \\mu \\frac{2 \\pi}{N}) N}}{1 - e^{j (\\Omega_0 - \\mu \\frac{2 \\pi}{N})}} \n", "= e^{j (\\Omega_0 - \\mu \\frac{2 \\pi}{N} ) \\frac{N-1}{2} } \\cdot \\frac{\\sin \\left( \\frac{N (\\Omega_0 - \\mu \\frac{2\\pi}{N})}{2} \\right)}{\\sin \\left( \\frac{ \\Omega_0 - \\mu \\frac{2\\pi}{N}}{2} \\right)}\n", "\\end{equation}\n", "\n", "The second last equality has been derived by noting that the sum constitutes a [finite geometrical series](https://en.wikipedia.org/wiki/Geometric_series) with the common ratio $e^{-j (\\Omega - \\mu \\frac{2 \\pi}{N})}$.\n", "\n", "Unlike the [DTFT of the exponential signal](../discrete_time_fourier_transform/definition.ipynb#Transformation-of-the-Exponential-Signal), its DFT is in general not given by a series of shifted Dirac impulses. In order to gain further insight, let's consider an harmonic exponential signal which is periodic with period $N$. The lowest normalized frequency such a periodic signal can have is $\\Omega_\\text{min} =\\frac{2 \\pi}{N}$. Note that an exponential signal whose frequency is a multiple of $\\Omega_\\text{min}$ is also periodic with period $N$. It can be concluded that the normalized frequency of an harmonic exponential signal with period $N$ is given as $\\Omega_0 = M \\cdot \\frac{2 \\pi}{N}$ for $M = 0,1,\\dots, N-1$. Introducing this specific choice for $\\Omega_0$ into the DFT above yields\n", "\n", "\\begin{equation}\n", "\\text{DFT}_N \\{ e^{j M \\cdot \\frac{2 \\pi}{N} k} \\} = N \\cdot \\delta[\\mu - M]\n", "\\end{equation}\n", "\n", "since\n", "\n", "\\begin{equation}\n", "\\frac{\\sin \\left(\\pi (M-\\mu) \\right)}{\\sin \\left(\\frac{\\pi}{N} (M - \\mu) \\right)} = \\begin{cases}\n", "N & \\text{for } M=\\mu \\\\\n", "0 & \\text{otherwise}\n", "\\end{cases}\n", "\\end{equation}\n", "\n", "Note that [L'Hôpital's rule](https://en.wikipedia.org/wiki/L'H%C3%B4pital's_rule) was applied for $M=\\mu$. The DFT of an harmonic exponential signal which is periodic with period $N$ is given as a Dirac impulse. The case of an aperiodic exponential signal is discussed in the following example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example**\n", "\n", "In the following example the DFT of an harmonic exponential signal $e^{j \\Omega_0 k}$ with $\\Omega_0 = M \\cdot \\frac{2 \\pi}{N}$ is computed by the matrix/vector representation of the DFT. The signal is periodic with period $N$ for $M \\in \\mathbb{Z}$ and aperiodic for $M \\notin \\mathbb{Z}$. The latter case is considered first, the former in the exercises below." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1.31266387+5.28685729e-01j, 1.63083183+1.06667837e+00j,\n", " 2.38037882+2.33409311e+00j, 7.49352177+1.09799457e+01j,\n", " -2.57047932-6.03735081e+00j, -0.54711115-2.61602209e+00j,\n", " -0.01688123-1.71945225e+00j, 0.24191786-1.28184690e+00j,\n", " 0.40512534-1.00587811e+00j, 0.52515992-8.02910730e-01j,\n", " 0.62378131-6.36151064e-01j, 0.71244674-4.86226008e-01j,\n", " 0.79885258-3.40121704e-01j, 0.88992974-1.86118644e-01j,\n", " 0.99422729-9.76111721e-03j, 1.12563462+2.12436536e-01j])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N = 16\n", "M = 3.33\n", "W0 = M * 2*np.pi/N\n", "\n", "F = dft(N)\n", "k = np.arange(N)\n", "x = np.exp(1j*W0*k)\n", "X = np.matmul(F, x)\n", "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The real and imaginary part of the signal $x[k]$ as well as its DFT $X[\\mu]$ are plotted for illustration" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 8))\n", "\n", "plt.subplot(2, 2, 1)\n", "plt.stem(x.real)\n", "plt.xlabel('$k$')\n", "plt.ylabel('$\\Re \\{ x[k] \\}$')\n", "plt.ylim([-1.1, 1.1])\n", "\n", "plt.subplot(2, 2, 2)\n", "plt.stem(x.imag)\n", "plt.xlabel('$k$')\n", "plt.ylabel('$\\Im \\{ x[k] \\}$')\n", "plt.ylim([-1.1, 1.1])\n", "\n", "plt.subplot(2, 2, 3)\n", "plt.stem(X.real)\n", "plt.xlabel('$\\mu$')\n", "plt.ylabel('$\\Re \\{ X[\\mu] \\}$')\n", "plt.ylim([-N, N])\n", "\n", "plt.subplot(2, 2, 4)\n", "plt.stem(X.imag)\n", "plt.xlabel('$\\mu$')\n", "plt.ylabel('$\\Im \\{ X[\\mu] \\}$')\n", "plt.ylim([-N, N]);\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Rerun the example with different normalized frequencies $\\Omega_0 = M \\frac{2 \\pi}{N}$ resulting in periodic or aperiodic harmonic exponential signals.\n", "* Where is the maximum of the real and imaginary part, and the absolute value $|X[\\mu]|$ located in case of an aperiodic signal?\n", "\n", "It should become obvious that depending on the chosen frequency a more or less 'smeared' Dirac impulse can be observed. This effect is known as [leakage effect](https://en.wikipedia.org/wiki/Spectral_leakage) of the DFT, since the Dirac impulse leaks into the neighboring bins." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example**\n", "\n", "In order to facilitate the interpretation of a spectrum, many libraries for signal processing provide functionality to compute the values of the frequency axis for a sampled signal. This is illustrated for the spectrum $X[\\mu]$ of the exponential signal from the previous example. The magnitude spectrum $|X[\\mu]|$ is plotted for a sampling frequency of $f_\\text{s} = 48000$ Hz." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fs = 48000\n", "f = np.fft.fftfreq(N, 1/fs)\n", "\n", "plt.stem(f, abs(X))\n", "plt.xlabel('$f[\\mu]$ in Hz')\n", "plt.ylabel(r'$|X[\\mu]|$')\n", "plt.xlim([-fs/2, fs/2]);" ] }, { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "**Copyright**\n", "\n", "This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Continuous- and Discrete-Time Signals and Systems - Theory and Computational Examples*." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 1 }