{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# The Fourier Transform\n", "\n", "*This Jupyter notebook is part of a [collection of notebooks](../index.ipynb) in the bachelors module Signals and Systems, Communications 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 [Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform), as commonly used in electrical engineering, is defined as\n", "\n", "\\begin{equation}\n", "X(j \\omega) = \\int_{-\\infty}^{\\infty} x(t) \\, e^{-j \\omega t} \\; dt\n", "\\end{equation}\n", "\n", "where $X(j \\omega) = \\mathcal{F} \\{ x(t) \\}$ denotes the Fourier transform of $x(t)$. It is also termed as *spectrum* of the signal $x(t)$. The argument $j \\omega$ copes for the fact that the kernel $e^{-j \\omega t}$ of above [integral transform](https://en.wikipedia.org/wiki/Integral_transform) is a [harmonic exponential signal](../continuous_signals/standard_signals.ipynb#Complex-Exponential-Signal) $e^{-s t}$ with $s= j \\omega$. Other common definitions of the Fourier transform may be found in the literature. They differ with respect to the sign of the exponential function and normalization factors. Sometimes the Fourier transform is evaluated in terms of the frequency $f$ instead of the angular frequency $\\omega = 2 \\pi f$. In both cases, the properties, theorems and transforms may differ from the ones derived in the following.\n", "\n", "The inverse Fourier transform $x(t) = \\mathcal{F}^{-1} \\{ X(j \\omega) \\}$ is defined as\n", "\n", "\\begin{equation}\n", "x(t) = \\frac{1}{2 \\pi} \\int_{-\\infty}^{\\infty} X(j \\omega) \\, e^{j \\omega t} \\; d\\omega\n", "\\end{equation}\n", "\n", "A sufficient but not necessary condition for the existence of the Fourier transform may be derived from the absolute integrability of above Fourier integral\n", "\n", "\\begin{equation}\n", "\\int_{-\\infty}^{\\infty} | x(t) \\, e^{-j \\omega t}| \\; dt \\leq \\int_{-\\infty}^{\\infty} | x(t) | \\; dt < \\infty\n", "\\end{equation}\n", "\n", "where the triangle inequality and $|e^{-j \\omega t}|=1$ have been used to find an upper limit of the first integral. Hence, the signal $x(t)$ has to be an [absolutely integrable function](https://en.wikipedia.org/wiki/Absolutely_integrable_function)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Relation to the Laplace Transform\n", "\n", "The [Laplace transform](../laplace_transform/definition.ipynb) $X(s) = \\mathcal{L} \\{ x(t) \\}$ of a signal $x(t)$ can be related to its Fourier transform $X(j \\omega) = \\mathcal{F} \\{ x(t) \\}$ by inspecting the kernels of both transforms. The Laplace transform has the complex exponential function $e^{- s t}$ with $s \\in \\mathbb{C}$ as kernel. The Fourier transform, as introduced above, has the harmonic exponential function $e^{- j \\omega t}$ with $\\omega \\in \\mathbb{R}$ as kernel. Both can be related to each other by considering that $s = \\sigma + j \\omega$. Hence, if the ROC includes the imaginary axis $s = j \\omega$ of the $s$-plane, the Fourier transform of a signal $x(t)$ can be derived from its Laplace transform by\n", "\n", "\\begin{equation}\n", "\\mathcal{F} \\{ x(t) \\} = \\mathcal{L} \\{ x(t) \\} \\bigr\\rvert_{s = j \\omega}\n", "\\end{equation}\n", "\n", "If the ROC does not include the imaginary axis, the Fourier transform cannot be derived from the Laplace transform of $x(t)$. If the ROC includes the imaginary axis $s = j \\omega$ and the integration path of the inverse Laplace transform is chosen along the imaginary axis $\\sigma = 0$, the inverse Laplace transform becomes identical to the inverse Fourier transform.\n", "\n", "A benefit of the Laplace over the Fourier transform is that it exists for a wider class of signals. The one-sided Laplace transform also allows to conveniently consider initial values of differential equations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example - Fourier transform of causal exponential signal**\n", "\n", "The Fourier transform $X(j \\omega) = \\mathcal{F} \\{ x(t) \\}$ of the causal exponential signal\n", "\n", "\\begin{equation}\n", "x(t) = \\epsilon(t) \\cdot e^{- \\alpha t} \n", "\\end{equation}\n", "\n", "with $\\alpha \\in \\mathbb{R}^+$ is derived from the Laplace transform of the [causal complex exponential signal](#Transformation-of-the-Causal-Complex-Exponential-Signal). Using the substitution $s_0 = \\alpha$ yields\n", "\n", "\\begin{equation}\n", "X(s) = \\frac{1}{s + \\alpha}\n", "\\end{equation}\n", "\n", "with the ROC $\\Re \\{ s \\} > - \\alpha$. Hence for $0 < \\alpha < \\infty$, the ROC includes the imaginary axis. In this case the signal comprises an exponential signal whose level decays over time for $t>0$. The Fourier transform can be derived from the Laplace transform as\n", "\n", "\\begin{equation}\n", "X(j \\omega) = \\frac{1}{j \\omega + \\alpha}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Interpretation of the Spectrum\n", "\n", "It can be concluded from the inverse Fourier transformation \n", "\n", "\\begin{equation}\n", "x(t) = \\frac{1}{2 \\pi} \\int_{-\\infty}^{\\infty} X(j \\omega) \\, e^{j \\omega t} \\; d\\omega\n", "\\end{equation}\n", "\n", "that a signal $x(t)$ for which the Fourier transform $X(j \\omega)$ exists can be represented as a superposition of weighted harmonic exponential signals $X(j \\omega) \\cdot e^{j \\omega t}$. The angular frequency of these contributions can be related to the frequency by $f = \\frac{\\omega}{2 \\pi}$. \n", "\n", "![Interpretation of the Fourier transform and its frequency axis](FT_axis.png)\n", "\n", "The Fourier transform is in general complex valued, $X(j \\omega) \\in \\mathbb{C}$. It is commonly represented by its real and imaginary part $X(j \\omega) = \\Re \\{ X(j \\omega) \\} + j \\cdot \\Im \\{ X(j \\omega) \\}$ or by its magnitude and phase $X(j \\omega) = |X(j \\omega)| \\cdot e^{j \\varphi(j \\omega)}$. The magnitude spectrum $|X(\\omega)|$ provides insights into the composition of an unknown signal in terms of the level of its harmonic contributions, the phase spectrum $\\varphi(j \\omega)$ into their phase relations. The Fourier transformation is therefore a valuable tool in the analysis of signals.\n", "\n", "A general spectrum $X(j \\omega)$ will have non-negative contributions for negative angular frequencies $\\omega < 0$. The concept of [negative frequencies](https://en.wikipedia.org/wiki/Negative_frequency) has no physical meaning. However, in the context of the Fourier transformation with its complex kernel $e^{j \\omega t}$ it is for instance required to express real-valued signals." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation of the Dirac Impulse\n", "\n", "The transform $\\mathcal{F} \\{ \\delta(t) \\}$ of the [Dirac impulse](../continuous_signals/standard_signals.ipynb#Dirac-Impulse) is derived by introducing $\\delta(t)$ into the definition of the Fourier transform and exploiting the sifting property of the Dirac delta function\n", "\n", "\\begin{equation}\n", "\\mathcal{F} \\{ \\delta(t) \\} = \\int_{-\\infty}^{\\infty} \\delta(t) \\, e^{-j \\omega t} dt = 1\n", "\\end{equation}\n", "\n", "The transform of the Dirac impulse is equal to one. Hence, all angular frequencies $\\omega$ are present with equal weight. This is an important property in the theory of signals and systems, since the Dirac impulse is used to characterize linear time-invariant (LTI) systems by their [impulse response](../systems_time_domain/impulse_response.ipynb) $h(t) = \\mathcal{H} \\{ \\delta(t) \\}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example**\n", "\n", "The Fourier transform of the Dirac impulse can be derived in `SymPy` by direct evaluation of above integral" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAZElEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUACBj0chKHhJQQLN0ZQZAGDGBRBIOACxKC4OQfE94B4NwDm+hiAOyllRAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 1$" ], "text/plain": [ "1" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sympy as sym\n", "sym.init_printing()\n", "\n", "t, w = sym.symbols('t omega', real=True)\n", "\n", "X = sym.integrate(sym.DiracDelta(t)*sym.exp(-sym.I*w*t), (t, -sym.oo, sym.oo))\n", "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`SymPy` provides a [Fourier transform](http://docs.sympy.org/latest/modules/integrals/integrals.html?highlight=fourier#sympy.integrals.transforms.fourier_transform). However, it is defined in terms of the frequency $f$ instead of the angular frequency $\\omega$. Therefore a custom function is defined which matches the definition used here" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def fourier_transform(x):\n", " return sym.integrals.transforms._fourier_transform(x, t, w, 1, -1, 'Fourier')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Applying this function to the Dirac impulse yields the same result as the direct evaluation of the integral above" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAZElEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUACBj0chKHhJQQLN0ZQZAGDGBRBIOACxKC4OQfE94B4NwDm+hiAOyllRAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 1$" ], "text/plain": [ "1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = fourier_transform(sym.DiracDelta(t))\n", "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Derive the Fourier transform of a shifted Dirac impulse $\\delta(t - \\tau)$ either by manual evaluation of the integral or by modification of above example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation of the Rectangular Signal\n", "\n", "The Fourier transform $\\mathcal{F} \\{ \\text{rect}(t) \\}$ of the [rectangular signal](../continuous_signals/standard_signals.ipynb#Rectangular-Signal) is derived by explicit evaluation of the definition\n", "\n", "\\begin{equation}\n", "\\mathcal{F} \\{ \\text{rect}(t) \\} = \\int_{-\\infty}^{\\infty} \\text{rect}(t) \\, e^{-j \\omega t} \\; dt =\n", "\\int_{- \\frac{1}{2}}^{\\frac{1}{2}} e^{-j \\omega t} \\; dt = \\frac{\\sin(\\frac{\\omega}{2})}{\\frac{\\omega}{2}}\n", "\\end{equation}\n", "\n", "The result is commonly abbreviated in terms of the [cardinal sine or sinc function](https://en.wikipedia.org/wiki/Sinc_function)\n", "\n", "\\begin{equation}\n", "\\text{sinc}(x) = \\begin{cases} \n", "\\frac{sin(x)}{x} & \\text{for } x \\neq 0 \\\\\n", "1 & \\text{for } x = 0\n", "\\end{cases}\n", "\\end{equation}\n", "\n", "Note, that the value at $x = 0$ has been derived by applying [L'Hôpital's rule](https://en.wikipedia.org/wiki/L'H%C3%B4pital's_rule) to $\\frac{sin(x)}{x}$. The sinc function is an important function in (digital) signal processing and communications engineering. It shows the following properties\n", "\n", "1. Its maximum value is one at $x=0$\n", "\n", "2. Its amplitude decays with $\\frac{1}{|x|}$\n", "\n", "3. Its zeros are located at $x_0 = n \\cdot \\pi$ for $n \\in \\mathcal{Z} \\setminus \\{0\\}$\n", "\n", "4. $\\int_{-\\infty}^{\\infty} \\text{sinc}(t) \\; dt = \\pi$\n", "\n", "Using the sinc function, the Fourier transform of $\\text{rect}(t)$ reads\n", "\n", "\\begin{equation}\n", "\\mathcal{F} \\{ \\text{rect}(t) \\} = \\text{sinc}\\left( \\frac{\\omega}{2} \\right)\n", "\\end{equation}\n", "\n", "The [Laplace transform of the rectangular signal](../laplace_transform/theorems.ipynb#Transformation-of-the-rectangular-signal) is given as\n", "\n", "\\begin{equation}\n", "\\mathcal{L} \\{ \\text{rect}(t) \\} = \\frac{\\sinh \\left( \\frac{s}{2} \\right) }{\\frac{s}{2}}\n", "\\end{equation}\n", "\n", "with the $\\text{ROC} \\{ \\text{rect}(t) \\} = \\mathbb{C}$. The Laplace transform of the rectangular signal can be related to its Fourier transform by using $\\sinh (s) = -j \\sin(j s)$ with the substitution $s = j \\omega$\n", "\n", "\\begin{equation}\n", "\\frac{\\sinh \\left( \\frac{s}{2} \\right) }{\\frac{s}{2}} \\Bigg\\vert_{s= j \\omega} = \\frac{\\sin \\left( \\frac{\\omega}{2} \\right) }{\\frac{\\omega}{2}}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example**\n", "\n", "The Fourier transform of the rectangular signal is computed in the following. First the rectangular signal is defined" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "class rect(sym.Function):\n", "\n", " @classmethod\n", " def eval(cls, arg):\n", " return sym.Heaviside(arg + sym.S.Half) - sym.Heaviside(arg - sym.S.Half)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the Fourier transform is computed" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{2 \\sin{\\left(\\frac{\\omega}{2} \\right)}}{\\omega}$" ], "text/plain": [ " ⎛ω⎞\n", "2⋅sin⎜─⎟\n", " ⎝2⎠\n", "────────\n", " ω " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = fourier_transform(rect(t))\n", "X" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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ZWphVnVTYW5zLU9ibGlxdWUgL0NoYXJQcm9jcyAxNSAwIFIKL0VuY29kaW5nIDw8IC9EaWZmZXJlbmNlcyBbIF0gL1R5cGUgL0VuY29kaW5nID4+IC9GaXJzdENoYXIgMAovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250RGVzY3JpcHRvciAxMyAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NSAvTmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9TdWJ0eXBlIC9UeXBlMyAvVHlwZSAvRm9udCAvV2lkdGhzIDEyIDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL0FzY2VudCA5MjkgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0yMzYgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0ZvbnROYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL0l0YWxpY0FuZ2xlIDAgL01heFdpZHRoIDEzNTAgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjEyIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1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agoxNyAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMCAwIG9iago8PCAvYyAyMSAwIFIgL2VpZ2h0IDIyIDAgUiAvZm91ciAyMyAwIFIgL2kgMjQgMCBSIC9uIDI2IDAgUiAvb25lIDI3IDAgUgovcGFyZW5sZWZ0IDI4IDAgUiAvcGFyZW5yaWdodCAyOSAwIFIgL3BlcmlvZCAzMCAwIFIgL3MgMzEgMCBSIC9zaXggMzIgMCBSCi9zbGFzaCAzMyAwIFIgL3RocmVlIDM0IDAgUiAvdHdvIDM1IDAgUiAvemVybyAzNiAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE5IDAgUiAvRjIgMTQgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9GMS1EZWphVnVTYW5zLW1pbnVzIDI1IDAgUiAvRjItRGVqYVZ1U2Fucy1PYmxpcXVlLW9tZWdhIDE2IDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMzcgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDIxMDQzMDExMTU0NyswMicwMCcpCi9DcmVhdG9yIChNYXRwbG90bGliIHYzLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjMuNCkgPj4KZW5kb2JqCnhyZWYKMCAzOAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAxMDU0MiAwMDAwMCBuIAowMDAwMDEwMjczIDAwMDAwIG4gCjAwMDAwMTAzMTYgMDAwMDAgbiAKMDAwMDAxMDQxNSAwMDAwMCBuIAowMDAwMDEwNDM2IDAwMDAwIG4gCjAwMDAwMTA0NTcgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzkzIDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjM0MCAwMDAwMCBuIAowMDAwMDAzMTkzIDAwMDAwIG4gCjAwMDAwMDI5ODUgMDAwMDAgbiAKMDAwMDAwMjY3NiAwMDAwMCBuIAowMDAwMDA0MjQ2IDAwMDAwIG4gCjAwMDAwMDIzNjEgMDAwMDAgbiAKMDAwMDAwOTAwMiAwMDAwMCBuIAowMDAwMDA4ODAyIDAwMDAwIG4gCjAwMDAwMDgzOTEgMDAwMDAgbiAKMDAwMDAxMDA1NSAwMDAwMCBuIAowMDAwMDA0MjY4IDAwMDAwIG4gCjAwMDAwMDQ1NzEgMDAwMDAgbiAKMDAwMDAwNTAzNiAwMDAwMCBuIAowMDAwMDA1MTk4IDAwMDAwIG4gCjAwMDAwMDUzMzggMDAwMDAgbiAKMDAwMDAwNTUwOCAwMDAwMCBuIAowMDAwMDA1NzQyIDAwMDAwIG4gCjAwMDAwMDU4OTQgMDAwMDAgbiAKMDAwMDAwNjExNCAwMDAwMCBuIAowMDAwMDA2MzM2IDAwMDAwIG4gCjAwMDAwMDY0NTcgMDAwMDAgbiAKMDAwMDAwNjg2MiAwMDAwMCBuIAowMDAwMDA3MjUyIDAwMDAwIG4gCjAwMDAwMDczNzYgMDAwMDAgbiAKMDAwMDAwNzc4NyAwMDAwMCBuIAowMDAwMDA4MTA4IDAwMDAwIG4gCjAwMDAwMTA2MDIgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyAzNyAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgMzggPj4Kc3RhcnR4cmVmCjEwNzU5CiUlRU9GCg==\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2021-04-30T11:15:46.942155\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.4, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sym.plot(X, (w, -30, 30), xlabel=r'$\\omega$', ylabel=r'sinc($\\omega / 2$)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Derive the Fourier transform of a scaled rectangular signal $\\text{rect}(a t)$ with $a \\in \\mathbb{R}$ by manual evaluation of the Fourier integral or by modification of above example.\n", "* What happens to the sinc function if you increase/decrease the width of the rectangular signal?" ] }, { "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", "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.7.10" } }, "nbformat": 4, "nbformat_minor": 1 }