{
"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": [
"## Theorems\n",
"\n",
"The theorems of the discrete Fourier transform (DFT) relate basic operations applied to discrete signals to their equivalents in the spectral domain. They are of use to transform signals composed from modified [standard signals](../discrete_signals/standard_signals.ipynb), for the computation of the response of a linear time-invariant (LTI) system and to predict the consequences of modifying a signal or system by certain operations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Convolution Theorem\n",
"\n",
"The DFT $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$ and its inverse $x[k] = \\text{IDFT}_N \\{ X[\\mu] \\}$ are both periodic with period $N$. The linear convolution of two periodic signals is not defined. The periodic convolution introduced in the following is used instead for the convolution theorem of the DFT."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Periodic Convolution\n",
"\n",
"The [periodic (or circular/cyclic) convolution](https://en.wikipedia.org/wiki/Circular_convolution) of two finite-length signals $x[k]$ and $h[k]$ is defined as\n",
"\n",
"\\begin{equation}\n",
"x[k] \\circledast_P h[k] = \\sum_{\\kappa=0}^{P-1} \\tilde{x}_P[k - \\kappa] \\; \\tilde{h}_P[\\kappa] =\n",
"\\sum_{\\kappa=0}^{P-1} \\tilde{x}_P[\\kappa] \\; \\tilde{h}_P[k - \\kappa]\n",
"\\end{equation}\n",
"\n",
"where $\\circledast_P$ denotes the periodic convolution with period $P$. The periodic summations $\\tilde{x}_P[k]$ of $x[k]$ and $\\tilde{h}_P[k]$ of $h[k]$ with period $P$ are defined as\n",
"\n",
"\\begin{align}\n",
"\\tilde{x}_P[k] &= \\sum_{\\nu = -\\infty}^{\\infty} x[\\nu \\cdot P + k] \\\\\n",
"\\tilde{h}_P[k] &= \\sum_{\\nu = -\\infty}^{\\infty} h[\\nu \\cdot P + k]\n",
"\\end{align}\n",
"\n",
"The result of the circular convolution has a period of $P$. The periodic convolution of two signals is in general different to their linear convolution.\n",
"\n",
"For the special case that the length of one or both of the signals $x[k]$ and $h[k]$ is smaller or equal to the period $P$, the periodic summation degenerates to a periodic continuation of the signal(s). Furthermore, the periodic continuation does only have to be performed for the shifted signal in above convolution sum. For this special case, the periodic convolution is often termed as **cyclic convolution**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Example - Periodic vs. linear convolution**\n",
"\n",
"The periodic $y_1[k] = x[k] \\circledast_P h[k]$ and linear $y_2[k] = x[k] * h[k]$ convolution of two rectangular signals $x[k] = \\mathrm{rect}_M[k]$ and $h[k] = \\mathrm{rect}_N[k]$ is numerically evaluated. For this purpose helper functions are defined that implement the periodic summation and convolution."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"\n",
"def periodic_summation(x, P):\n",
" 'Zero-padding to length P or periodic summation with period P.'\n",
" N = len(x)\n",
" rows = int(np.ceil(N/P))\n",
"\n",
" if (N < int(P*rows)):\n",
" x = np.pad(x, (0, int(P*rows-N)), 'constant')\n",
"\n",
" x = np.reshape(x, (rows, P))\n",
"\n",
" return np.sum(x, axis=0)\n",
"\n",
"\n",
"def periodic_convolve(x, y, P):\n",
" 'Periodic convolution of two signals x and y with period P.'\n",
" x = periodic_summation(x, P)\n",
" h = periodic_summation(y, P)\n",
"\n",
" return np.array([np.dot(np.roll(x[::-1], k+1), h) for k in range(P)], float)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now the signals are defined, the convolutions are computed and the signals plotted. Note, for the periodic signals $\\tilde{x}_P[k]$ and $y_1[k]$ only one period is shown."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"application/pdf": "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ZW50IC0yMzYgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0ZvbnROYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL0l0YWxpY0FuZ2xlIDAgL01heFdpZHRoIDEzNTAgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjE0IDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNTAgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyOCA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTcgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQw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IDIyIDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zCi9TdWJ0eXBlIC9UeXBlMyAvVHlwZSAvRm9udCAvV2lkdGhzIDIxIDAgUiA+PgplbmRvYmoKMjIgMCBvYmoKPDwgL0FzY2VudCA5MjkgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0yMzYgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnROYW1lIC9EZWphVnVTYW5zIC9JdGFsaWNBbmdsZSAwCi9NYXhXaWR0aCAxMzQyIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoyMSAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyNCAwIG9iago8PCAvYnJhY2tldGxlZnQgMjUgMCBSIC9icmFja2V0cmlnaHQgMjYgMCBSIC9laWdodCAyNyAwIFIgL2ZvdXIgMjggMCBSCi9vbmUgMjkgMCBSIC9wZXJpb2QgMzAgMCBSIC9zaXggMzEgMCBSIC90aHJlZSAzMiAwIFIgL3R3byAzNCAwIFIKL3plcm8gMzUgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMyAwIFIgL0YyIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTMgPDwgL0NBIDAuOCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjggPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0RlamFWdVNhbnMtdGlsZGVjb21iIDMzIDAgUiAvTTAgMTIgMCBSIC9NMSAxMyAwIFIgPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9CQm94IFsgLTMuNSAtMy41IDMuNSAzLjUgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMQovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoxMyAwIG9iago8PCAvQkJveCBbIC0yIC0yIDIgMiBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTMzIC9TdWJ0eXBlIC9Gb3JtCi9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nG2QOQ4DIQxFe5+CC3xkiwBDO2WuQRNFmvu3E0MAEaexvP3nRdyb2D3pYyA+uovYh5IPjj1mn3MJWYPwkBLFiefEKWmmO5VmDaNdpZikBmp9CpzJr2hpOm9xV2W2bkS1lfY5MCJYMMxwbLthbIz9ENhL8ecfsF/DLxt9+RfRSTejy0j6CmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMzYgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDYyNzE1NTkzNyswMicwMCcpCi9DcmVhdG9yIChtYXRwbG90bGliIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCAzLjAuMykgPj4KZW5kb2JqCnhyZWYKMCAzNwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAxMDQ2NyAwMDAwMCBuIAowMDAwMDA5NjUwIDAwMDAwIG4gCjAwMDAwMDk2OTMgMDAwMDAgbiAKMDAwMDAwOTgzNSAwMDAwMCBuIAowMDAwMDA5ODU2IDAwMDAwIG4gCjAwMDAwMDk4NzcgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk3IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjYzOCAwMDAwMCBuIAowMDAwMDA5OTQ5IDAwMDAwIG4gCjAwMDAwMTAyMTEgMDAwMDAgbiAKMDAwMDAwMzc2NiAwMDAwMCBuIAowMDAwMDAzNTU4IDAwMDAwIG4gCjAwMDAwMDMyMjkgMDAwMDAgbiAKMDAwMDAwNDgxOSAwMDAwMCBuIAowMDAwMDAyNjU5IDAwMDAwIG4gCjAwMDAwMDI5MDYgMDAwMDAgbiAKMDAwMDAwMzA2NSAwMDAwMCBuIAowMDAwMDA4NDI5IDAwMDAwIG4gCjAwMDAwMDgyMjkgMDAwMDAgbiAKMDAwMDAwNzg0MiAwMDAwMCBuIAowMDAwMDA5NDgyIDAwMDAwIG4gCjAwMDAwMDQ4NzEgMDAwMDAgbiAKMDAwMDAwNTAxNCAwMDAwMCBuIAowMDAwMDA1MTUzIDAwMDAwIG4gCjAwMDAwMDU2MTggMDAwMDAgbiAKMDAwMDAwNTc4MCAwMDAwMCBuIAowMDAwMDA1OTMyIDAwMDAwIG4gCjAwMDAwMDYwNTMgMDAwMDAgbiAKMDAwMDAwNjQ0MyAwMDAwMCBuIAowMDAwMDA2ODU0IDAwMDAwIG4gCjAwMDAwMDcyMzggMDAwMDAgbiAKMDAwMDAwNzU1OSAwMDAwMCBuIAowMDAwMDEwNTI3IDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gMzYgMCBSIC9Sb290IDEgMCBSIC9TaXplIDM3ID4+CnN0YXJ0eHJlZgoxMDY4MQolJUVPRgo=\n",
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \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"
},
{
"data": {
"application/pdf": "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YXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxNCAwIFIgPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250TmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9JdGFsaWNBbmdsZSAwIC9NYXhXaWR0aCAxMzUwIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNyAwIG9iago8PCAvUCAxOCAwIFIgL2sgMTkgMCBSID4+CmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMwNCA+PgpzdHJlYW0KeJw9kjuSwzAMQ3udghfIjPiT5PNkJ5X3/u0+MslWgEmJACgvdZmypjwgaSYJ/9Hh4WI75XfYns3MwLVELxPLKc+hK8TcRfmymY26sjrFqsMwnVv0qJyLhk2TmucqSxm3C57DtYnnln3EDzc0qAd1jUvCDd3VaFkKzXB1/zu9R9l3NTwXm1Tq1BePF1EV5vkhT6KH6UrifDwoIVx7MEYWEuRT0UCOs1yt8l5C9g63GrLCQWpJ57MnPNh1ek8ubhfNEA9kuVT4TlHs7dAzvuxKCT0StuFY7n07mrHpGps47H7vRtbKjK5oIX7IVyfrJWDcUyZFEmROtlhui9We7qEopnOGcxkg6tmKhlLmYlerfww7bywv2SzIlMwLMkanTZ44eMh+jZr0eZXneP0BbPNzOwplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjMwID4+CnN0cmVhbQp4nDVRSW7DMAy86xXzgQDiLr/HQU/t/68d0glgYGhLnM0RGxsReInBz0HkxlvWjJr4m8ld8bs8FR4Jt4InUQRehnvZCS5vGJf9OMx88F5aOZMaTzIgF9n08ETIYJdA6MDsGtRhm2kn+oaEz45INRtZTl9L0EurEChP2X6nC0q0rerP7bMutO1rTzjZ7aknlU8gnluyApeNV0wWYxn0ROUuxfRBqrOFnoTyonwOsvmoIRJdopyBJwYHo0A7sOe2n4lXhaB1dZ+2jaEaKR1P/zY0NUki5BMlnNnSuFv4/p57/fwDplRTnwplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjI3ID4+CnN0cmVhbQp4nDVPO7IDIQzrOYUukBmMbWDPs5lUL/dvn2SyDRL+SPL0REcmXubICKzZ8bYWGYgZ+BZT8a897cOE6j24hwjl4kKYYSScNeu4m6fjxb9d5TPWwbsNvmKWFwS2MJP1lcWZy3bBWBoncU6yG2PXRGxjXevpFNYRTCgDIZ3tMCXIHBUpfbKjjDk6TuSJ52KqxS6/72F9waYxosIcVwVP0GRQlj3vJqAdF/Tf1Y3fSTSLXgIykWBhnSTmzllO+NVrR8dRiyIxJ6QZ5DIR0pyuYgqhCcU6OwoqFQWX6nPK3T7/aF1bTQplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ1ID4+CnN0cmVhbQp4nEVQu41DMQzrPQUXCGD9LHued0iV2789SkZwhSFaP5JaEpiIwEsMsZRv4kdGQT0LvxeF4jPEzxeFQc6EpECc9RkQmXiG2kZu6HZwzrzDM4w5AhfFWnCm05n2XNjknAcnEM5tlPGMQrpJVBVxVJ9xTPGqss+N14GltWyz05HsIY2ES0klJpd+Uyr/tClbKujaRROwSOSBk0004Sw/Q5JizKCUUfcwtY70cbKRR3XQydmcOS2Z2e6n7Ux8D1gmmVHlKZ3nMj4nqfNcTn3usx3R5KKlVfuc/d6RlvIitduh1elXJVGZjdWnkLg8/4yf8f4DjqBZPgplbmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzkyID4+CnN0cmVhbQp4nD1SS24FMQjbzym4QKXwTXKeqd7u3X9bm8xUqgovA7YxlJcMqSU/6pKIM0x+9XJd4lHyvWxqZ+Yh7i42pvhYcl+6hthy0ZpisU8cyS/ItFRYoVbdo0PxhSgTDwAt4IEF4b4c//EXqMHXsIVyw3tkAmBK1G5AxkPRGUhZQRFh+5EV6KRQr2zh7yggV9SshaF0YogNlgApvqsNiZio2aCHhJWSqh3S8Yyk8FvBXYlhUFtb2wR4ZtAQ2d6RjREz7dEZcVkRaz896aNRMrVRGQ9NZ3zx3TJS89EV6KTSyN3KQ2fPQidgJOZJmOdwI+Ge20ELMfRxr5ZPbPeYKVaR8AU7ygEDvf3eko3Pe+AsjFzb7Ewn8NFppxwTrb4eYv2DP2xLm1zHK4dFFKi8KAh+10ETcXxYxfdko0R3tAHWIxPVaCUQDBLCzu0w8njGedneFbTm9ERoo0Qe1I4RPSiyxeWcFbCn/KzNsRyeDyZ7b7SPlMzMqIQV1HZ6qLbPYx3Ud577+vwBLgChGQplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNzEgPj4Kc3RyZWFtCnicszC2UDBQMDQwUzA0N1IwNzZSMDE1UUgx5AIJgZi5XDDBHDDLGKgsByyLYEFkQSwjU1OoDhALosMQrg7BgsimAQDr5xgyCmVuZHN0cmVhbQplbmRvYmoKMzAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA5MCA+PgpzdHJlYW0KeJxNjUESwCAIA++8Ik9QRND/dHrS/1+r1A69wE4CiRZFgvQ1aksw7rgyFWtQKZiUl8BVMFwL2u6iyv4ySUydhtN7twODsvFxg9JJ+/ZxegCr/XoG3Q/SHCJYCmVuZHN0cmVhbQplbmRvYmoKMzEgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA2OCA+PgpzdHJlYW0KeJwzMrdQMFCwNAEShhYmCuZmBgophlxAvqmJuUIuF0gMxMoBswyAtCWcgohbQjRBlIJYEKVmJmYQSTgDIpcGAMm0FeUKZW5kc3RyZWFtCmVuZG9iagozMiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDQ1ID4+CnN0cmVhbQp4nDMyt1AwULA0ARKGFiYK5mYGCimGXJYQVi4XTCwHzALRlnAKIp4GAJ99DLUKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE2MSA+PgpzdHJlYW0KeJxFkEsSwyAMQ/ecQkfwRwZ8nnS6Su+/rSFNs4CnsUAGdycEqbUFE9EFL21Lugs+WwnOxnjoNm41EuQEdYBWpONolFJ9ucVplXTxaDZzKwutEx1mDnqUoxmgEDoV3u2i5HKm7s75R3D1X/VHse6czcTAZOUOhGb1Ke58mx1RXd1kf9JjbtZrfxX2qrC0rKXlhNvOXTOgBO6pHO39BalzOoQKZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDIxNCA+PgpzdHJlYW0KeJw9ULsRQzEI6z0FC+TOfO03z8uly/5tJJykQjZCEpSaTMmUhzrKkqwpTx0+S2KHvIflbmQ2JSpFL5OwJffQCvF9ieYU993VlrNDNJdoOX4LMyqqGx3TSzaacCoTuqDcwzP6DW10A1aHHrFbINCkYNe2IHLHDxgMwZkTiyIMSk0G/61y91Lc7z0cb6KIlHTwrvnl9MvPLbxOPY5Eur35imtxpjoKRHBGavKKdGHFsshDpNUENT0Da7UArt56+TdoR3QZgOwTieM0pRxD/9a4x+sDh4pS9AplbmRzdHJlYW0KZW5kb2JqCjM1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggODAgPj4Kc3RyZWFtCnicRYy7DcAwCER7pmAEfiZmnyiVs38bIErccE+6e7g6EjJT3mGGhwSeDCyGU/EGmaNgNbhGUo2d7KOwbl91geZ6U6v19wcqT3Z2cT3Nyxn0CmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMzYgPj4Kc3RyZWFtCnicTVBLbkQhDNtzilzgSSQhAc5D1VXn/tuxw1TtKoYYf0gP6bJVHutTYnWJ7PKlTZfKMnkVqOVP2/9RDAJu/9DIQbS3jJ1i5hLWxcIkPOU0Ixsn1ywfjztPG2aFxsSN450uGWCfFgE1W5XNgTltOjdAupAat6qz3mRQDCLqQs0Hky6cp9GXiDmeqGBKdya1kBtcPtWhA3FavQq5Y4uTb8QcWaHAYdBMcdZfAdaoybJZyCBJhiHOfaN7lAqNqMp5KxXCD5OhEfWG1aAGlbmFoqnlkvwd2gIwBbaMdekMSoGqAMHfKqd9vwEkjV1TCmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNTcgPj4Kc3RyZWFtCnicRZC5EUMxCERzVUEJErAI6rHH0Xf/qRf5SrRvAC2HryVTqh8nIqbc12j0MHkOn00lVizYJraTGnIbFkFKMZh4TjGro7ehmYfU67ioqrh1ZpXTacvKxX/zaFczkz3CNeon8E3o+J88tKnoW6CvC5R9QLU4nUlQMX2vYoGjnHZ/IpwY4D4ZR5kpI3Fibgrs9xkAZr5XuMbjBd0BN3kKZW5kc3RyZWFtCmVuZG9iagozOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMxNyA+PgpzdHJlYW0KeJw1UktyQzEI279TcIHOmL99nnSyau6/rYQnK7AtQEIuL1nSS37UJdulw+RXH/clsUI+j+2azFLF9xazFM8tr0fPEbctCgRREz34MicVItTP1Og6eGGXPgOvEE4pFngHkwAGr+FfeJROg8A7GzLeEZORGhAkwZpLi01IlD1J/Cvl9aSVNHR+Jitz+XtyqRRqo8kIFSBYudgHpCspHiQTPYlIsnK9N1aI3pBXksdnJSYZEN0msU20wOPclbSEmZhCBeZYgNV0s7r6HExY47CE8SphFtWDTZ41qYRmtI5jZMN498JMiYWGwxJQm32VCaqXj9PcCSOmR0127cKyWzbvIUSj+TMslMHHKCQBh05jJArSsIARgTm9sIq95gs5FsCIZZ2aLAxtaCW7eo6FwNCcs6Vhxtee1/P+B0Vbe6MKZW5kc3RyZWFtCmVuZG9iagozOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE3ID4+CnN0cmVhbQp4nDM2tFAwgMMUQy4AGpQC7AplbmRzdHJlYW0KZW5kb2JqCjQwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTMxID4+CnN0cmVhbQp4nEWPyw0EIQxD71ThEvIZPqmH1Z7Y/q/rMJpBQvhBIjvxMAis8/I20MXw0aLDN/421atjlSwfunpSVg/pkIe88hVQaTBRxIVZTB1DYc6YysiWMrcb4bZNg6xslVStg3Y8Bg+2p2WrCH6pbWHqLPEMwlVeuMcNP5BLrXe9Vb5/QlMwlwplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzM4ID4+CnN0cmVhbQp4nDVSOa7dQAzrfQpdIIB2zZznBal+7t+GlF8KQ7RWipqOFpVp+WUhVS2TLr/tSW2JG/L3yQqJE5JXJdqlDJFQ+TyFVL9ny7y+1pwRIEuVCpOTksclC/4Ml94uHOdjaz+PI3c9emBVjIQSAcsUE6NrWTq7w5qN/DymAT/iEXKuWLccYxVIDbpx2hXvQ/N5yBogZpiWigpdVokWfkHxoEetffdYVFgg0e0cSXCMjVCRgHaB2kgMObMWu6gv+lmUmAl07Ysi7qLAEknMnGJdOvoPPnQsqL8248uvjkr6SCtrTNp3o0lpzCKTrpdFbzdvfT24QPMuyn9ezSBBU9YoaXzQqp1jKJoZZYV3HJoMNMcch8wTPIczEpT0fSh+X0smuiiRPw4NoX9fHqOMnAZvAXPRn7aKAxfx2WGvHGCF0sWa5H1AKhN6YPr/1/h5/vwDHLaAVAplbmRzdHJlYW0KZW5kb2JqCjQyIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ4ID4+CnN0cmVhbQp4nC1ROZIDQQjL5xV6QnPT77HLkff/6QrKAYOGQyA6LXFQxk8Qlive8shVtOHvmRjBd8Gh38p1GxY5EBVI0hhUTahdvB69B3YcZgLzpDUsgxnrAz9jCjd6cXhMxtntdRk1BHvXa09mUDIrF3HJxAVTddjImcNPpowL7VzPDci5EdZlGKSblcaMhCNNIVJIoeomqTNBkASjq1GjjRzFfunLI51hVSNqDPtcS9vXcxPOGjQ7Fqs8OaVHV5zLycULKwf9vM3ARVQaqzwQEnC/20P9nOzkN97SubPF9Phec7K8MBVY8ea1G5BNtfg3L+L4PePr+fwDqKVbFgplbmRzdHJlYW0KZW5kb2JqCjQzIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTcxID4+CnN0cmVhbQp4nE2QTQ5CIRCD95yiFzCh8wOP82hc6f23dvD54oL0SyFDp8MDHUfiRkeGzuh4sMkxDrwLMiZejfOfjOskjgnqFW3BurQ77s0sMScsEyNga5Tcm0cU+OGYC0GC7PLDFxhEpGuYbzWfdZN+frvTXdSldffTIwqcyI5QDBtwBdjTPQ7cEs7vmia/VCkZmziUD1QXkbLZCYWopWKXU1VojOJWPe+LXu35AcH2O/sKZW5kc3RyZWFtCmVuZG9iago0NCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDcyID4+CnN0cmVhbQp4nDWMsRHAMAgDe6bQCDZYYO+TS0X2b0N8TgMvHQ+XosFaDbqCI3B1qfzRI125KUWXY86C4XGqX0gxRj2oI+Pex0+5X3AWEn0KZW5kc3RyZWFtCmVuZG9iago0NSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDIxMCA+PgpzdHJlYW0KeJw1UMsNQzEIu2cKFqgUAoFknla9df9rbdA7YRH/QljIlAh5qcnOKelLPjpMD7Yuv7EiC611JezKmiCeK++hmbKx0djiYHAaJl6AFjdg6GmNGjV04YKmLpVCgcUl8Jl8dXvovk8ZeGoZcnYEEUPJYAlquhZNWLQ8n5BOAeL/fsPuLeShkvPKnhv5G5zt8DuzbuEnanYi0XIVMtSzNMcYCBNFHjx5RaZw4rPWd9U0EtRmC06WAa5OP4wOAGAiXlmA7K5EOUvSjqWfb7zH9w9AAFO0CmVuZHN0cmVhbQplbmRvYmoKMjIgMCBvYmoKPDwgL0Jhc2VGb250IC9EZWphVnVTYW5zIC9DaGFyUHJvY3MgMjMgMCBSCi9FbmNvZGluZyA8PAovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgNDggL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciA1NCAvc2l4IDU2IC9laWdodCA2MSAvZXF1YWwgOTcKL2EgOTkgL2MgL2QgL2UgMTA1IC9pIDEwOCAvbCAxMTAgL24gL28gL3AgMTE0IC9yIDExNiAvdCAvdSAvdiBdCi9UeXBlIC9FbmNvZGluZyA+PgovRmlyc3RDaGFyIDAgL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udERlc2NyaXB0b3IgMjEgMCBSCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9MYXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMjAgMCBSID4+CmVuZG9iagoyMSAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE5hbWUgL0RlamFWdVNhbnMgL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjIwIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIzIDAgb2JqCjw8IC9hIDI0IDAgUiAvYyAyNSAwIFIgL2QgMjYgMCBSIC9lIDI3IDAgUiAvZWlnaHQgMjggMCBSIC9lcXVhbCAyOSAwIFIKL2ZvdXIgMzAgMCBSIC9pIDMxIDAgUiAvbCAzMiAwIFIgL24gMzMgMCBSIC9vIDM0IDAgUiAvb25lIDM1IDAgUiAvcCAzNiAwIFIKL3IgMzcgMCBSIC9zaXggMzggMCBSIC9zcGFjZSAzOSAwIFIgL3QgNDAgMCBSIC90aHJlZSA0MSAwIFIgL3R3byA0MiAwIFIKL3UgNDMgMCBSIC92IDQ0IDAgUiAvemVybyA0NSAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDIyIDAgUiAvRjIgMTYgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMyA8PCAvQ0EgMC44IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDAuOCA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvTTAgMTIgMCBSIC9NMSAxMyAwIFIgPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9CQm94IFsgLTMuNSAtMy41IDMuNSAzLjUgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMQovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoxMyAwIG9iago8PCAvQkJveCBbIC0yIC0yIDIgMiBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTMzIC9TdWJ0eXBlIC9Gb3JtCi9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nG2QOQ4DIQxFe5+CC3xkiwBDO2WuQRNFmvu3E0MAEaexvP3nRdyb2D3pYyA+uovYh5IPjj1mn3MJWYPwkBLFiefEKWmmO5VmDaNdpZikBmp9CpzJr2hpOm9xV2W2bkS1lfY5MCJYMMxwbLthbIz9ENhL8ecfsF/DLxt9+RfRSTejy0j6CmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKNDYgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDYyNzE1NTkzNyswMicwMCcpCi9DcmVhdG9yIChtYXRwbG90bGliIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCAzLjAuMykgPj4KZW5kb2JqCnhyZWYKMCA0NwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAxMzM1NiAwMDAwMCBuIAowMDAwMDEyNTY4IDAwMDAwIG4gCjAwMDAwMTI2MTEgMDAwMDAgbiAKMDAwMDAxMjc1MyAwMDAwMCBuIAowMDAwMDEyNzc0IDAwMDAwIG4gCjAwMDAwMTI3OTUgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk3IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjk0MiAwMDAwMCBuIAowMDAwMDEyODM4IDAwMDAwIG4gCjAwMDAwMTMxMDAgMDAwMDAgbiAKMDAwMDAwMzg5OSAwMDAwMCBuIAowMDAwMDAzNjkxIDAwMDAwIG4gCjAwMDAwMDMzNjkgMDAwMDAgbiAKMDAwMDAwNDk1MiAwMDAwMCBuIAowMDAwMDAyOTYzIDAwMDAwIG4gCjAwMDAwMDMyMTAgMDAwMDAgbiAKMDAwMDAxMTI0NSAwMDAwMCBuIAowMDAwMDExMDQ1IDAwMDAwIG4gCjAwMDAwMTA2MTcgMDAwMDAgbiAKMDAwMDAxMjI5OCAwMDAwMCBuIAowMDAwMDA0OTk0IDAwMDAwIG4gCjAwMDAwMDUzNzEgMDAwMDAgbiAKMDAwMDAwNTY3NCAwMDAwMCBuIAowMDAwMDA1OTc0IDAwMDAwIG4gCjAwMDAwMDYyOTIgMDAwMDAgbiAKMDAwMDAwNjc1NyAwMDAwMCBuIAowMDAwMDA2OTAwIDAwMDAwIG4gCjAwMDAwMDcwNjIgMDAwMDAgbiAKMDAwMDAwNzIwMiAwMDAwMCBuIAowMDAwMDA3MzE5IDAwMDAwIG4gCjAwMDAwMDc1NTMgMDAwMDAgbiAKMDAwMDAwNzg0MCAwMDAwMCBuIAowMDAwMDA3OTkyIDAwMDAwIG4gCjAwMDAwMDgzMDEgMDAwMDAgbiAKMDAwMDAwODUzMSAwMDAwMCBuIAowMDAwMDA4OTIxIDAwMDAwIG4gCjAwMDAwMDkwMTAgMDAwMDAgbiAKMDAwMDAwOTIxNCAwMDAwMCBuIAowMDAwMDA5NjI1IDAwMDAwIG4gCjAwMDAwMDk5NDYgMDAwMDAgbiAKMDAwMDAxMDE5MCAwMDAwMCBuIAowMDAwMDEwMzM0IDAwMDAwIG4gCjAwMDAwMTM0MTYgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA0NiAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNDcgPj4Kc3RhcnR4cmVmCjEzNTcwCiUlRU9GCg==\n",
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \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": [
"M = 32 # length of signal x[k]\n",
"N = 16 # length of signal h[k]\n",
"P = 24 # period of periodic convolution\n",
"\n",
"\n",
"def rect(k, N):\n",
" return np.where((0 <= k) & (k < N), 1.0, 0.0)\n",
"\n",
"\n",
"# generate signals\n",
"k = np.arange(M+N-1)\n",
"x = .5 * rect(k, M)\n",
"h = rect(k, N)\n",
"\n",
"# periodic convolution\n",
"y1 = periodic_convolve(x, h, P)\n",
"# linear convolution\n",
"y2 = np.convolve(x, h, 'full')\n",
"\n",
"# plot results\n",
"plt.figure()\n",
"plt.stem(periodic_summation(x, P), linefmt='C0-',\n",
" markerfmt='C0o', label=r'$\\tilde{x}_P[k]$')\n",
"plt.stem(x, linefmt='C1--', markerfmt='C1.', label=r'$x[k]$')\n",
"plt.xlabel(r'$k$')\n",
"plt.xlim([0, M+N-1])\n",
"plt.legend()\n",
"plt.grid()\n",
"\n",
"plt.figure()\n",
"plt.stem(y1, linefmt='C1-', markerfmt='C1o',\n",
" label=r'periodic convolution $P={}$'.format(P))\n",
"plt.stem(y2, linefmt='C0--', markerfmt='C0.', label=r'linear convolution')\n",
"plt.xlabel(r'$k$')\n",
"plt.xlim([0, M+N-1])\n",
"plt.legend()\n",
"plt.grid()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise**\n",
"\n",
"* Change the length $M$ of the rectangular signal $x[k]$. How does the result of the periodic convolution change?\n",
"* Compare the result of the periodic convolution with the result of the linear convolution. For which values of $P$ are both the same?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Convolution Theorem\n",
"\n",
"The convolution theorem states that the DFT of the cyclic convolution of two discrete signals $x[k]$ and $y[k]$ is equal to the scalar multiplication of their DFTs $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$ and $Y[\\mu] = \\text{DFT}_N \\{ y[k] \\}$\n",
"\n",
"\\begin{equation}\n",
"\\text{DFT}_N \\{ x[k] \\circledast_N y[k] \\} = X[\\mu] \\cdot Y[\\mu]\n",
"\\end{equation}\n",
"\n",
"for $k, \\mu =0,1, \\dots, N-1$.\n",
"\n",
"The theorem can be proven by introducing the definition of the periodic convolution into the [definition of the DFT](definition.ipynb) and changing the order of summation\n",
"\n",
"\\begin{align}\n",
"\\text{DFT}_N \\{ x[k] \\circledast_N y[k] \\} &= \\sum_{k = 0}^{N-1} \\left( \\sum_{\\kappa = 0}^{N-1} \\tilde{x}_N[\\kappa] \\cdot \\tilde{y}_N[k - \\kappa] \\right) w_N^{\\mu k} \\\\\n",
"&= \\sum_{\\kappa = 0}^{N-1} \\left( \\sum_{k = 0}^{N-1} \\tilde{y}_N[k - \\kappa] \\, w_N^{\\mu k} \\right) \\tilde{x}_N[\\kappa] \\\\\n",
"&= Y[\\mu] \\cdot \\sum_{\\kappa = 0}^{N-1} \\tilde{x}_N[\\kappa] \\, w_N^{\\mu \\kappa} \\\\\n",
"&= Y[\\mu] \\cdot X[\\mu]\n",
"\\end{align}\n",
"\n",
"Note, $\\text{DFT}_N \\{ x[k] \\} = \\text{DFT}_N \\{ \\tilde{x}_N[k] \\}$ due to the periodicity of the DFT.\n",
"It can be concluded from the convolution theorem that a scalar multiplication of the two spectra results in a cyclic convolution of the corresponding signals. For a linear time-invariant (LTI) system, the output signal is given as the linear convolution of the input signal $x[k]$ with the impulse response $h[k] = \\mathcal{H} \\{ \\delta[k] \\}$. The convolution theorem cannot be applied straightforward to the computation of the output signal of an LTI system. The [fast convolution technique](fast_convolution.ipynb), introduced later, provides an efficient algorithm for the linear convolution of two signals based on the convolution theorem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Shift Theorem\n",
"\n",
"Since the convolution theorem of the DFT is given in terms of the cyclic convolution, the shift theorem of the DFT is given in terms of the periodic shift. The [periodic (circular) shift](https://en.wikipedia.org/wiki/Circular_shift) of a causal signal $x[k]$ of finite length $N$ can be expressed by a cyclic convolution with a shifted Dirac impulse\n",
"\n",
"\\begin{equation}\n",
"x[k - \\kappa] = x[k] \\circledast_N \\delta[k - \\kappa]\n",
"\\end{equation}\n",
"\n",
"for $\\kappa \\in 0,1,\\dots, N-1$. This follows from the definition of the cyclic convolution in combination with the sifting property of the Dirac impulse. Applying the DFT to the left- and right-hand side and exploiting the convolution theorem yields\n",
"\n",
"\\begin{equation}\n",
"\\text{DFT}_N \\{ x[k - \\kappa] \\} = X[\\mu] \\cdot e^{-j \\mu \\frac{2 \\pi}{N} \\kappa}\n",
"\\end{equation}\n",
"\n",
"where $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$. Above relation is known as shift theorem of the DFT.\n",
"\n",
"Expressing the DFT $X[\\mu] = |X[\\mu]| \\cdot e^{j \\varphi[\\mu]}$ by its absolute value $|X[\\mu]|$ and phase $\\varphi[\\mu]$ results in\n",
"\n",
"\\begin{equation}\n",
"\\text{DFT}_N \\{ x[k - \\kappa] \\} = |X[\\mu]| \\cdot e^{j (\\varphi[\\mu] - \\mu \\frac{2 \\pi}{N} \\kappa)}\n",
"\\end{equation}\n",
"\n",
"The periodic shift of a signal does not change the absolute value of its spectrum but subtracts the linear contribution $\\mu \\frac{2 \\pi}{N} \\kappa$ from its phase."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Example - Shifting a signal in the spectral domain**\n",
"\n",
"A cosine signal $x[k] = \\cos(\\Omega_0 k)$ is shifted in the spectral domain by multiplying its spectrum $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$ with $e^{-j \\mu \\frac{2 \\pi}{N} \\kappa}$ followed by an IDFT."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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aXF1ZSAvQ2hhclByb2NzIDE3IDAgUgovRW5jb2RpbmcgPDwgL0RpZmZlcmVuY2VzIFsgMTA3IC9rIDEyMCAveCBdIC9UeXBlIC9FbmNvZGluZyA+PiAvRmlyc3RDaGFyIDAKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udERlc2NyaXB0b3IgMTUgMCBSCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9MYXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxNCAwIFIgPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250TmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9JdGFsaWNBbmdsZSAwIC9NYXhXaWR0aCAxMzUwIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNyAwIG9iago8PCAvayAxOCAwIFIgL3ggMTkgMCBSID4+CmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDcxID4+CnN0cmVhbQp4nDO2NFAwULAwU9A1NDZUMLI0VjA3M1BIMeQCCoFYuVwwsRwwy8wSxDI0N0Ni6ZoZQmWRWCDjcrhgBufAzMvhSgMA8bQWIwplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNjcgPj4Kc3RyZWFtCnicM7Y0UDBQsDRX0DU0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L3R3byA1MiAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbiAvZWlnaHQgOTEKL2JyYWNrZXRsZWZ0IDkzIC9icmFja2V0cmlnaHQgXQovVHlwZSAvRW5jb2RpbmcgPj4KL0ZpcnN0Q2hhciAwIC9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnREZXNjcmlwdG9yIDIxIDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zCi9TdWJ0eXBlIC9UeXBlMyAvVHlwZSAvRm9udCAvV2lkdGhzIDIwIDAgUiA+PgplbmRvYmoKMjEgMCBvYmoKPDwgL0FzY2VudCA5MjkgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0yMzYgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnROYW1lIC9EZWphVnVTYW5zIC9JdGFsaWNBbmdsZSAwCi9NYXhXaWR0aCAxMzQyIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoyMCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMyAwIG9iago8PCAvYnJhY2tldGxlZnQgMjQgMCBSIC9icmFja2V0cmlnaHQgMjUgMCBSIC9laWdodCAyNiAwIFIgL2ZpdmUgMjcgMCBSCi9mb3VyIDI4IDAgUiAvb25lIDMwIDAgUiAvcGVyaW9kIDMxIDAgUiAvc2V2ZW4gMzIgMCBSIC9zaXggMzMgMCBSCi90d28gMzQgMCBSIC96ZXJvIDM1IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMjIgMCBSIC9GMiAxNiAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EzIDw8IC9DQSAwLjggL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC44ID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9EZWphVnVTYW5zLW1pbnVzIDI5IDAgUiAvTTAgMTIgMCBSIC9NMSAxMyAwIFIgPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9CQm94IFsgLTMuNSAtMy41IDMuNSAzLjUgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMQovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoxMyAwIG9iago8PCAvQkJveCBbIC0zLjUgLTMuNSAzLjUgMy41IF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxMzEKL1N1YnR5cGUgL0Zvcm0gL1R5cGUgL1hPYmplY3QgPj4Kc3RyZWFtCnicbZBBDoQgDEX3PUUv8ElLRWXr0mu4mUzi/bcDcUBM3TTQvjx+Uf6S8E6lwPgkCUtOs+R605DSukyMGObVsijHoFEt1s51OKjP0HBjdIuxFKbU1uh4o5vpNt6TP/qwWSFGPxwOr4R7FkMmXCkxBoffCy/bw/8Rnl7UwB+ijX5jWkP9CmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMzYgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDYyNzE1NTkzNyswMicwMCcpCi9DcmVhdG9yIChtYXRwbG90bGliIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCAzLjAuMykgPj4KZW5kb2JqCnhyZWYKMCAzNwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwOTczOCAwMDAwMCBuIAowMDAwMDA4OTE5IDAwMDAwIG4gCjAwMDAwMDg5NjIgMDAwMDAgbiAKMDAwMDAwOTEwNCAwMDAwMCBuIAowMDAwMDA5MTI1IDAwMDAwIG4gCjAwMDAwMDkxNDYgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk4IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjMxOSAwMDAwMCBuIAowMDAwMDA5MjE0IDAwMDAwIG4gCjAwMDAwMDk0NzYgMDAwMDAgbiAKMDAwMDAwMzE5NCAwMDAwMCBuIAowMDAwMDAyOTg2IDAwMDAwIG4gCjAwMDAwMDI2NjMgMDAwMDAgbiAKMDAwMDAwNDI0NyAwMDAwMCBuIAowMDAwMDAyMzQwIDAwMDAwIG4gCjAwMDAwMDI0OTkgMDAwMDAgbiAKMDAwMDAwNzY4NSAwMDAwMCBuIAowMDAwMDA3NDg1IDAwMDAwIG4gCjAwMDAwMDcwOTUgMDAwMDAgbiAKMDAwMDAwODczOCAwMDAwMCBuIAowMDAwMDA0Mjg5IDAwMDAwIG4gCjAwMDAwMDQ0MzIgMDAwMDAgbiAKMDAwMDAwNDU3MSAwMDAwMCBuIAowMDAwMDA1MDM2IDAwMDAwIG4gCjAwMDAwMDUzNTYgMDAwMDAgbiAKMDAwMDAwNTUxOCAwMDAwMCBuIAowMDAwMDA1Njg4IDAwMDAwIG4gCjAwMDAwMDU4NDAgMDAwMDAgbiAKMDAwMDAwNTk2MSAwMDAwMCBuIAowMDAwMDA2MTAxIDAwMDAwIG4gCjAwMDAwMDY0OTEgMDAwMDAgbiAKMDAwMDAwNjgxMiAwMDAwMCBuIAowMDAwMDA5Nzk4IDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gMzYgMCBSIC9Sb290IDEgMCBSIC9TaXplIDM3ID4+CnN0YXJ0eHJlZgo5OTUyCiUlRU9GCg==\n",
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \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": [
"from scipy.linalg import dft\n",
"\n",
"N = 16 # length of signals/DFT\n",
"M = 1 # number of periods for cosine\n",
"kappa = 2 # shift\n",
"\n",
"# generate signal\n",
"W0 = M * 2*np.pi/N\n",
"k = np.arange(N)\n",
"x = np.cos(W0 * k)\n",
"\n",
"# compute DFT\n",
"F = dft(N)\n",
"mu = np.arange(N)\n",
"X = np.matmul(F, x)\n",
"\n",
"# shift in spectral domain and IDFT\n",
"X2 = X * np.exp(-1j * mu * 2*np.pi/N * kappa)\n",
"IF = 1/N * np.conjugate(np.transpose(F))\n",
"x2 = np.matmul(IF, X2)\n",
"\n",
"# plot signals\n",
"plt.stem(k, x, linefmt='C0-', markerfmt='C0o', label='$x[k]$')\n",
"plt.stem(k, np.real(x2), linefmt='C1-', markerfmt='C1o', label='$x[k - {}]$'.format(kappa))\n",
"plt.xlabel('$k$')\n",
"plt.legend(loc=9)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Multiplication Theorem\n",
"\n",
"The transform of a multiplication of two signals $x[k] \\cdot y[k]$ is derived by introducing the signals into the definition of the DFT, expressing the signal $x[k]$ by its spectrum $X[\\mu] = \\text{IDFT}_N \\{ x[k] \\}$ and rearranging terms\n",
"\n",
"\\begin{align}\n",
"\\text{DFT}_N \\{ x[k] \\cdot y[k] \\} &= \\sum_{k=0}^{N-1} x[k] \\cdot y[k] \\, w_N^{\\mu k} \\\\\n",
"&= \\sum_{k=0}^{N-1} \\left( \\frac{1}{N} \\sum_{\\nu=0}^{N-1} X[\\nu] \\, w_N^{-\\nu k} \\right) y[k] \\, w_N^{\\mu k} \\\\\n",
"&= \\frac{1}{N} \\sum_{\\nu=0}^{N-1} X[\\nu] \\sum_{k=0}^{N-1} y[k] \\, w_N^{(\\mu - \\nu) k} \\\\\n",
"&= \\frac{1}{N} \\sum_{\\nu=0}^{N-1} X[\\nu] \\cdot Y[\\mu - \\nu] \\\\\n",
"&= X[\\mu] \\circledast_N Y[\\mu]\n",
"\\end{align}\n",
"\n",
"where $Y[\\mu] = \\text{IDFT}_N \\{ y[k] \\}$ and $k, \\mu = 0,1,\\dots,N-1$. Note, the last equality follows from the periodicity of the inverse DFT. The DFT of a multiplication of two signals $x[k] \\cdot y[k]$ is given by the cyclic convolution of their spectra $X[\\mu]$ and $Y[\\mu]$ weighted by $\\frac{1}{N}$. The cyclic convolution has a period of $N$ and it is performed with respect to the frequency index $\\mu$.\n",
"\n",
"Applications of the multiplication theorem include the modulation and windowing of signals. The former leads to the modulation theorem introduced in the following."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Modulation Theorem\n",
"\n",
"The complex modulation of a signal $x[k]$ is defined as $e^{j \\Omega_0 k} \\cdot x[k]$ with $\\Omega_0 = M \\frac{2 \\pi}{N}$, $M \\in \\mathbb{Z}$. The DFT of the modulated signal is derived by applying the multiplication theorem\n",
"\n",
"\\begin{equation}\n",
"\\text{DFT}_N \\left\\{ e^{j M \\frac{2 \\pi}{N} k} \\cdot x[k] \\right\\} = \\delta[\\mu - M] \\circledast_N X[\\mu] = X[\\mu - M]\n",
"\\end{equation}\n",
"\n",
"where $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$ and $X[\\mu - M]$ denotes the periodic shift of $X[\\mu]$. Above result states that the complex modulation of a signal leads to a periodic shift of its spectrum. This result is known as modulation theorem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Example - Decimation of a signal**\n",
"\n",
"An example for the application of the modulation theorem is the [downsampling/decimation](https://en.wikipedia.org/wiki/Decimation_(signal_processing)) of a discrete signal $x[k]$. Downsampling refers to lowering the sampling rate of a signal. The example focuses on the special case of removing every second sample, hence halving the sampling rate. The downsampling is modeled by defining a signal $x_\\frac{1}{2}[k]$ where every second sample is set to zero\n",
"\n",
"\\begin{equation}\n",
"x_\\frac{1}{2}[k] = \\begin{cases} \n",
"x[k] & \\text{for even } k \\\\\n",
"0 & \\text{for odd } k\n",
"\\end{cases}\n",
"\\end{equation}\n",
"\n",
"In order to derive the spectrum $X_\\frac{1}{2}[\\mu] = \\text{DFT}_N \\{ x_\\frac{1}{2}[k] \\}$ for even $N$, the signal $u[k]$ is introduced where every second sample is zero\n",
"\n",
"\\begin{equation}\n",
"u[k] = \\frac{1}{2} ( 1 + e^{j \\pi k} ) = \\begin{cases} 1 & \\text{for even } k \\\\\n",
"0 & \\text{for odd } k \\end{cases}\n",
"\\end{equation}\n",
"\n",
"Using $u[k]$, the process of setting every second sample of $x[k]$ to zero can be expressed as\n",
"\n",
"\\begin{equation}\n",
"x_\\frac{1}{2}[k] = u[k] \\cdot x[k]\n",
"\\end{equation}\n",
"\n",
"Now the spectrum $X_\\frac{1}{2}[\\mu]$ is derived by applying the multiplication theorem and introducing the [DFT of the exponential signal](definition.ipynb#Transformation-of-the-Exponential-Signal). This results in\n",
"\n",
"\\begin{equation}\n",
"X_\\frac{1}{2}[\\mu] = \\frac{1}{N} \\left( \\frac{N}{2} \\delta[\\mu] + \\frac{N}{2} \\delta[\\mu - \\frac{N}{2}] \\right) \\circledast X[\\mu] =\n",
"\\frac{1}{2} X[\\mu] + \\frac{1}{2} X[\\mu - \\frac{N}{2}]\n",
"\\end{equation}\n",
"\n",
"where $X[\\mu] = \\text{DFT}_N \\{ x[k] \\}$. The spectrum $X_\\frac{1}{2}[\\mu]$ consists of the spectrum of the original signal $X[\\mu]$ superimposed by the shifted spectrum $X[\\mu - \\frac{N}{2}]$ of the original signal. This may lead to overlaps that constitute aliasing. In order to avoid aliasing, the spectrum of the signal $x[k]$ has to be band-limited to $0 < \\mu < \\frac{N}{2}$ before downsampling."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The decimation of a complex exponential signal is illustrated in the following. The signal $x[k] = \\cos (\\Omega_0 k)$ is decimated by setting every second sample to zero. The DFT of the original signal and decimated signal is computed and their magnitudes are plotted for illustration."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"application/pdf": "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MCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1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L0VuY29kaW5nID4+Ci9GaXJzdENoYXIgMCAvRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250RGVzY3JpcHRvciAyMSAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NSAvTmFtZSAvRGVqYVZ1U2FucwovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAyMCAwIFIgPj4KZW5kb2JqCjIxIDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMjAgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjMgMCBvYmoKPDwgL2JhciAyNCAwIFIgL2JyYWNrZXRsZWZ0IDI1IDAgUiAvYnJhY2tldHJpZ2h0IDI2IDAgUiAvZWlnaHQgMjcgMCBSCi9maXZlIDI4IDAgUiAvZm91ciAyOSAwIFIgL29uZSAzMCAwIFIgL3NldmVuIDMxIDAgUiAvc2l4IDMyIDAgUgovc2xhc2ggMzMgMCBSIC90aHJlZSAzNCAwIFIgL3R3byAzNSAwIFIgL3plcm8gMzYgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMiAwIFIgL0YyIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRGVqYVZ1U2Fucy1PYmxpcXVlLXVuaTAzQkMgMTkgMCBSIC9NMCAxMiAwIFIgL00xIDEzIDAgUiA+PgplbmRvYmoKMTIgMCBvYmoKPDwgL0JCb3ggWyAtMy41IC0zLjUgMy41IDMuNSBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTMxCi9TdWJ0eXBlIC9Gb3JtIC9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nG2QQQ6EIAxF9z1FL/BJS0Vl69JruJlM4v23A3FATN000L48flH+kvBOpcD4JAlLTrPketOQ0rpMjBjm1bIox6BRLdbOdTioz9BwY3SLsRSm1NboeKOb6Tbekz/6sFkhRj8cDq+EexZDJlwpMQaH3wsv28P/EZ5e1MAfoo1+Y1pD/QplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2JqCjw8IC9CQm94IFsgLTMuNSAtMy41IDMuNSAzLjUgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMQovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iagozNyAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMTkwNjI3MTU1OTM4KzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4wLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMC4zKSA+PgplbmRvYmoKeHJlZgowIDM4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDEwNTUwIDAwMDAwIG4gCjAwMDAwMDk3NjQgMDAwMDAgbiAKMDAwMDAwOTgwNyAwMDAwMCBuIAowMDAwMDA5OTA2IDAwMDAwIG4gCjAwMDAwMDk5MjcgMDAwMDAgbiAKMDAwMDAwOTk0OCAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTcgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAyNDk5IDAwMDAwIG4gCjAwMDAwMTAwMjYgMDAwMDAgbiAKMDAwMDAxMDI4OCAwMDAwMCBuIAowMDAwMDAzNjQ1IDAwMDAwIG4gCjAwMDAwMDM0MzcgMDAwMDAgbiAKMDAwMDAwMzEyMiAwMDAwMCBuIAowMDAwMDA0Njk4IDAwMDAwIG4gCjAwMDAwMDI1MjAgMDAwMDAgbiAKMDAwMDAwMjY4NSAwMDAwMCBuIAowMDAwMDA4NTA1IDAwMDAwIG4gCjAwMDAwMDgzMDUgMDAwMDAgbiAKMDAwMDAwNzkwNiAwMDAwMCBuIAowMDAwMDA5NTU4IDAwMDAwIG4gCjAwMDAwMDQ3MzAgMDAwMDAgbiAKMDAwMDAwNDg1NiAwMDAwMCBuIAowMDAwMDA0OTk5IDAwMDAwIG4gCjAwMDAwMDUxMzggMDAwMDAgbiAKMDAwMDAwNTYwMyAwMDAwMCBuIAowMDAwMDA1OTIzIDAwMDAwIG4gCjAwMDAwMDYwODUgMDAwMDAgbiAKMDAwMDAwNjIzNyAwMDAwMCBuIAowMDAwMDA2Mzc3IDAwMDAwIG4gCjAwMDAwMDY3NjcgMDAwMDAgbiAKMDAwMDAwNjg5MSAwMDAwMCBuIAowMDAwMDA3MzAyIDAwMDAwIG4gCjAwMDAwMDc2MjMgMDAwMDAgbiAKMDAwMDAxMDYxMCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDM3IDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSAzOCA+PgpzdGFydHhyZWYKMTA3NjQKJSVFT0YK\n",
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \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": [
"N = 16 # length of signals/DFT\n",
"M = 3.3 # number of periods for cosine\n",
"\n",
"W0 = M*2*np.pi/N\n",
"k = np.arange(N)\n",
"x = np.exp(1j*W0*k)\n",
"x2 = np.copy(x)\n",
"x2[::2] = 0\n",
"\n",
"F = dft(N)\n",
"X = np.matmul(F, x)\n",
"X2 = np.matmul(F, x2)\n",
"\n",
"plt.figure(figsize=(8,4))\n",
"plt.subplot(1,2,1)\n",
"plt.stem(abs(X))\n",
"plt.xlabel('$\\mu$')\n",
"plt.ylabel(r'|$X[\\mu]$|')\n",
"\n",
"plt.subplot(1,2,2)\n",
"plt.stem(abs(X2))\n",
"plt.xlabel('$\\mu$')\n",
"plt.ylabel(r'|$X_{1/2}[\\mu]$|');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise**\n",
"\n",
"* What happens in the spectrum of the downsampled signal if you set $M > \\frac{N}{2}$?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Parseval's Theorem\n",
"\n",
"[Parseval's theorem](https://en.wikipedia.org/wiki/Parseval's_theorem) relates the energy of a discrete signal to its spectrum. The squared absolute value of a signal $x[k]$ represents its instantaneous power. It can be expressed as\n",
"\n",
"\\begin{equation}\n",
"| x[k] |^2 = x[k] \\cdot x^*[k]\n",
"\\end{equation}\n",
"\n",
"where $x^*[k]$ denotes the complex conjugate of $x[k]$. It is assumed in the following that the signal $x[k]$ is causal and of finite length $N$ or periodic with perodid $N$. Transformation of the right-hand side and application of the multiplication theorem results in\n",
"\n",
"\\begin{equation}\n",
"\\text{DFT}_N \\{ x[k] \\cdot x^*[k] \\} = \\frac{1}{N} \\cdot X[\\mu] \\circledast_{N} X^*[N -\\mu]\n",
"\\end{equation}\n",
"\n",
"Introducing the definition of the DFT and the cyclic convolution yields\n",
"\n",
"\\begin{equation}\n",
"\\sum_{k = 0}^{N-1} x[k] \\cdot x^*[k] \\, w_N^{\\mu k} =\n",
"\\frac{1}{N} \\sum_{\\nu = 0}^{N-1} \\tilde{X}[\\nu] \\cdot \\tilde{X}^*[N-\\mu-\\nu]\n",
"\\end{equation}\n",
"\n",
"Setting $\\mu = 0$ followed by the substitution $\\nu = \\mu$ yields Parseval's theorem\n",
"\n",
"\\begin{equation}\n",
"\\sum_{k = 0}^{N-1} | x[k] |^2 = \\frac{1}{N} \\sum_{\\nu = 0}^{N-1} |X[\\mu]|^2 \n",
"\\end{equation}\n",
"\n",
"The sum over the samples of the squared magnitude of the signal $x[k]$ is equal to the sum over its squared magnitude spectrum divided by $N$. Since the left-hand side represents the energy $E$ of the signal $x[k]$, Parseval's theorem states that the energy can be computed alternatively in the spectral domain by summing over the squared magnitude values of the spectrum."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbsphinx": "hidden"
},
"source": [
"**Copyright**\n",
"\n",
"The notebooks are provided as [Open Educational Resource](https://de.wikipedia.org/wiki/Open_Educational_Resources). Feel free to use the notebooks for your own educational 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: *Lecture Notes on Signals and Systems* by Sascha Spors."
]
}
],
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}