{
"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": [
"## Properties\n",
"\n",
"The Fourier transform has a number of specific properties. They can be concluded from its definition. The most important ones in the context of signals and systems are reviewed in the following."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Invertibility\n",
"\n",
"According to the [Fourier inversion theorem](https://en.wikipedia.org/wiki/Fourier_inversion_theorem), for many types of signals it is possible to recover the signal $x(t)$ from its Fourier transformation $X(j \\omega) = \\mathcal{F} \\{ x(t) \\}$\n",
"\n",
"\\begin{equation}\n",
"x(t) = \\mathcal{F}^{-1} \\left\\{ \\mathcal{F} \\{ x(t) \\} \\right\\}\n",
"\\end{equation}\n",
"\n",
"A sufficient condition for the theorem to hold is that both the signal $x(t)$ and its Fourier transformation are absolutely integrable and $x(t)$ is continuous at the considered time $t$. For this type of signals, above relation can be proven by applying the definition of the inverse Fourier transform to the Fourier transform and rearranging terms\n",
"\n",
"\\begin{equation}\n",
"\\begin{split}\n",
"x(t) &= \\frac{1}{2 \\pi} \\int_{-\\infty}^{\\infty} \\underbrace{\\int_{-\\infty}^{\\infty} x(\\tau) e^{-j \\omega \\tau} d\\tau}_{X(j \\omega)} \\; e^{j \\omega t} d\\omega \\\\\n",
"&= \\int_{-\\infty}^{\\infty} x(\\tau) \\left( \\frac{1}{2 \\pi} \\int_{-\\infty}^{\\infty} e^{-j \\omega \\tau} e^{j \\omega t} d\\omega \\right) d\\tau \\\\\n",
"&= \\int_{-\\infty}^{\\infty} x(\\tau) \\delta(t - \\tau) d\\tau = x(t)\n",
"\\end{split}\n",
"\\end{equation}\n",
"\n",
"The solution $\\delta(t - \\tau)$ of the inverse Fourier transform $\\mathcal{F}^{-1} \\{ e^{-j \\omega \\tau} \\}$ in the brackets can be deduced from the [Fourier transform of the Dirac impulse](definition.ipynb#Transformation-of-the-Dirac-Impulse). The invertibility of the Fourier transformation holds also for more general signals $x(t)$, composed for instance from Dirac delta distributions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Example**\n",
"\n",
"The invertibility of the Fourier transform is illustrated at the example of the [rectangular signal](../continuous_signals/standard_signals.ipynb#Rectangular-Signal) $x(t) = \\text{rect}(t)$. The inverse of [its Fourier transform](definition.ipynb#Transformation-of-the-Rectangular-Signal) $X(j \\omega) = \\text{sinc} \\left( \\frac{\\omega}{2} \\right)$ is computed to show that the rectangular signal, although it has discontinuities, can be recovered by inverse Fourier transformation."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import sympy as sym\n",
"sym.init_printing()\n",
"\n",
"\n",
"def fourier_transform(x):\n",
" return sym.integrals.transforms._fourier_transform(x, t, w, 1, -1, 'Fourier')\n",
"\n",
"\n",
"def inverse_fourier_transform(X):\n",
" return sym.integrals.transforms._fourier_transform(X, w, t, 1/(2*sym.pi), 1, 'Inverse Fourier')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\begin{cases} 1 & \\text{for}\\: \\frac{1}{4 \\left|{t^{2}}\\right|} > 1 \\\\0 & \\text{otherwise} \\end{cases}$"
],
"text/plain": [
"⎧ 1 \n",
"⎪1 for ────── > 1\n",
"⎪ │ 2│ \n",
"⎨ 4⋅│t │ \n",
"⎪ \n",
"⎪0 otherwise \n",
"⎩ "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t, w = sym.symbols('t omega')\n",
"\n",
"X = sym.sinc(w/2)\n",
"x = inverse_fourier_transform(X)\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"application/pdf": "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NTUgL05hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxMiAwIFIgPj4KZW5kb2JqCjEzIDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250TmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9JdGFsaWNBbmdsZSAwIC9NYXhXaWR0aCAxMzUwIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxMiAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4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NBLUZgtOlgGuTj+MDgBgIl5ZgOyuRDlL0o6ln2+8x/cPQABTtAplbmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8IC9CYXNlRm9udCAvRGVqYVZ1U2FucyAvQ2hhclByb2NzIDIxIDAgUgovRW5jb2RpbmcgPDwKL0RpZmZlcmVuY2VzIFsgNDAgL3BhcmVubGVmdCAvcGFyZW5yaWdodCA0NiAvcGVyaW9kIDQ4IC96ZXJvIC9vbmUgL3R3byA1MiAvZm91ciAvZml2ZQovc2l4IC9zZXZlbiAvZWlnaHQgMTE2IC90IF0KL1R5cGUgL0VuY29kaW5nID4+Ci9GaXJzdENoYXIgMCAvRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250RGVzY3JpcHRvciAxOSAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NSAvTmFtZSAvRGVqYVZ1U2FucwovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxOCAwIFIgPj4KZW5kb2JqCjE5IDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTggMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjEgMCBvYmoKPDwgL2VpZ2h0IDIyIDAgUiAvZml2ZSAyMyAwIFIgL2ZvdXIgMjQgMCBSIC9vbmUgMjYgMCBSIC9wYXJlbmxlZnQgMjcgMCBSCi9wYXJlbnJpZ2h0IDI4IDAgUiAvcGVyaW9kIDI5IDAgUiAvc2V2ZW4gMzAgMCBSIC9zaXggMzEgMCBSIC90IDMyIDAgUgovdHdvIDMzIDAgUiAvemVybyAzNCAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDIwIDAgUiAvRjIgMTQgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9GMS1EZWphVnVTYW5zLW1pbnVzIDI1IDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMzUgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDIxMDQzMDExMjI0MyswMicwMCcpCi9DcmVhdG9yIChNYXRwbG90bGliIHYzLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjMuNCkgPj4KZW5kb2JqCnhyZWYKMCAzNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwOTMxOCAwMDAwMCBuIAowMDAwMDA5MDg1IDAwMDAwIG4gCjAwMDAwMDkxMjggMDAwMDAgbiAKMDAwMDAwOTIyNyAwMDAwMCBuIAowMDAwMDA5MjQ4IDAwMDAwIG4gCjAwMDAwMDkyNjkgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk5IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjAyMyAwMDAwMCBuIAowMDAwMDAyOTkwIDAwMDAwIG4gCjAwMDAwMDI3ODIgMDAwMDAgbiAKMDAwMDAwMjQ1OSAwMDAwMCBuIAowMDAwMDA0MDQzIDAwMDAwIG4gCjAwMDAwMDIwNDQgMDAwMDAgbiAKMDAwMDAwMjI5NSAwMDAwMCBuIAowMDAwMDA3ODQ1IDAwMDAwIG4gCjAwMDAwMDc2NDUgMDAwMDAgbiAKMDAwMDAwNzI1NSAwMDAwMCBuIAowMDAwMDA4ODk4IDAwMDAwIG4gCjAwMDAwMDQwODUgMDAwMDAgbiAKMDAwMDAwNDU1MCAwMDAwMCBuIAowMDAwMDA0ODcwIDAwMDAwIG4gCjAwMDAwMDUwMzIgMDAwMDAgbiAKMDAwMDAwNTIwMiAwMDAwMCBuIAowMDAwMDA1MzU0IDAwMDAwIG4gCjAwMDAwMDU1NzQgMDAwMDAgbiAKMDAwMDAwNTc5NiAwMDAwMCBuIAowMDAwMDA1OTE3IDAwMDAwIG4gCjAwMDAwMDYwNTcgMDAwMDAgbiAKMDAwMDAwNjQ0NyAwMDAwMCBuIAowMDAwMDA2NjUxIDAwMDAwIG4gCjAwMDAwMDY5NzIgMDAwMDAgbiAKMDAwMDAwOTM3OCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDM1IDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSAzNiA+PgpzdGFydHhyZWYKOTUzNQolJUVPRgo=\n",
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
"