{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# Quantization of Signals\n", "\n", "*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [Sascha.Spors@uni-rostock.de](mailto:Sascha.Spors@uni-rostock.de).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Characteristic of a Linear Uniform Quantizer\n", "\n", "The characteristics of a quantizer depend on the mapping functions $f(\\cdot)$, $g(\\cdot)$ and the rounding operation $\\lfloor \\cdot \\rfloor$ introduced in the [previous section](introduction.ipynb). A linear quantizer bases on linear mapping functions $f(\\cdot)$ and $g(\\cdot)$. A uniform quantizer splits the mapped input signal into quantization steps of equal size. Quantizers can be described by their nonlinear in-/output characteristic $x_Q[k] = \\mathcal{Q} \\{ x[k] \\}$, where $\\mathcal{Q} \\{ \\cdot \\}$ denotes the quantization process. For linear uniform quantization it is common to differentiate between two characteristic curves, the so called mid-tread and mid-rise. Both are introduced in the following." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mid-Tread Characteristic Curve\n", "\n", "The in-/output relation of the mid-tread quantizer is given as\n", "\n", "\\begin{equation}\n", "x_Q[k] = Q \\cdot \\underbrace{\\left\\lfloor \\frac{x[k]}{Q} + \\frac{1}{2} \\right\\rfloor}_{index}\n", "\\end{equation}\n", "\n", "where $Q$ denotes the constant quantization step size and $\\lfloor \\cdot \\rfloor$ the [floor function](https://en.wikipedia.org/wiki/Floor_and_ceiling_functions) which maps a real number to the largest integer not greater than its argument. Without restricting $x[k]$ in amplitude, the resulting quantization indexes are [countable infinite](https://en.wikipedia.org/wiki/Countable_set). For a finite number of quantization indexes, the input signal has to be restricted to a minimal/maximal amplitude $x_\\text{min} < x[k] < x_\\text{max}$ before quantization. The resulting quantization characteristic of a linear uniform mid-tread quantizer is shown below\n", "\n", "![Characteristic of a linear uniform mid-tread quantizer](mid_tread_characteristic.png)\n", "\n", "The term mid-tread is due to the fact that small values $|x[k]| < \\frac{Q}{2}$ are mapped to zero." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Mid-tread quantization of a sine signal\n", "\n", "The quantization of one period of a sine signal $x[k] = A \\cdot \\sin[\\Omega_0\\,k]$ by a mid-tread quantizer is simulated. $A$ denotes the amplitude of the signal, $x_\\text{min} = -1$ and $x_\\text{max} = 1$ are the smallest and largest output values of the quantizer, respectively." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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L1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3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b2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMjAgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjMgMCBvYmoKPDwgL2EgMjQgMCBSIC9icmFja2V0bGVmdCAyNSAwIFIgL2JyYWNrZXRyaWdodCAyNiAwIFIgL2QgMjcgMCBSIC9lIDI4IDAgUgovZml2ZSAyOSAwIFIgL2cgMzAgMCBSIC9pIDMxIDAgUiAvbCAzMiAwIFIgL24gMzQgMCBSIC9vIDM1IDAgUiAvb25lIDM2IDAgUgovcGVyaW9kIDM3IDAgUiAvcSAzOCAwIFIgL3IgMzkgMCBSIC9zIDQwIDAgUiAvc2V2ZW4gNDEgMCBSIC9zcGFjZSA0MiAwIFIKL3QgNDMgMCBSIC90d28gNDQgMCBSIC91IDQ1IDAgUiAveiA0NiAwIFIgL3plcm8gNDcgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMiAwIFIgL0YyIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTMgPDwgL0NBIDAuOCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjggPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0RlamFWdVNhbnMtbWludXMgMzMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago0OCAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjAwMTIwMTQ0MTA4KzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMS4xKSA+PgplbmRvYmoKeHJlZgowIDQ5CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE1MzE3IDAwMDAwIG4gCjAwMDAwMTUwNDQgMDAwMDAgbiAKMDAwMDAxNTA4NyAwMDAwMCBuIAowMDAwMDE1MjI5IDAwMDAwIG4gCjAwMDAwMTUyNTAgMDAwMDAgbiAKMDAwMDAxNTI3MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTMgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDA0NjI3IDAwMDAwIG4gCjAwMDAwMDYzMjEgMDAwMDAgbiAKMDAwMDAwNjExMyAwMDAwMCBuIAowMDAwMDA1Nzc3IDAwMDAwIG4gCjAwMDAwMDczNzQgMDAwMDAgbiAKMDAwMDAwNDY0OCAwMDAwMCBuIAowMDAwMDA1MDU0IDAwMDAwIG4gCjAwMDAwMDU0NTQgMDAwMDAgbiAKMDAwMDAwNTYxMyAwMDAwMCBuIAowMDAwMDEzNjk1IDAwMDAwIG4gCjAwMDAwMTM0OTUgMDAwMDAgbiAKMDAwMDAxMzAzNyAwMDAwMCBuIAowMDAwMDE0NzQ4IDAwMDAwIG4gCjAwMDAwMDc0MzYgMDAwMDAgbiAKMDAwMDAwNzgxMyAwMDAwMCBuIAowMDAwMDA3OTU2IDAwMDAwIG4gCjAwMDAwMDgwOTUgMDAwMDAgbiAKMDAwMDAwODM5NSAwMDAwMCBuIAowMDAwMDA4NzEzIDAwMDAwIG4gCjAwMDAwMDkwMzMgMDAwMDAgbiAKMDAwMDAwOTQ0NCAwMDAwMCBuIAowMDAwMDA5NTg0IDAwMDAwIG4gCjAwMDAwMDk3MDEgMDAwMDAgbiAKMDAwMDAwOTg3MSAwMDAwMCBuIAowMDAwMDEwMTA1IDAwMDAwIG4gCjAwMDAwMTAzOTIgMDAwMDAgbiAKMDAwMDAxMDU0NCAwMDAwMCBuIAowMDAwMDEwNjY1IDAwMDAwIG4gCjAwMDAwMTA5NzUgMDAwMDAgbiAKMDAwMDAxMTIwNSAwMDAwMCBuIAowMDAwMDExNjEwIDAwMDAwIG4gCjAwMDAwMTE3NTAgMDAwMDAgbiAKMDAwMDAxMTgzOSAwMDAwMCBuIAowMDAwMDEyMDQzIDAwMDAwIG4gCjAwMDAwMTIzNjQgMDAwMDAgbiAKMDAwMDAxMjYwOCAwMDAwMCBuIAowMDAwMDEyNzU0IDAwMDAwIG4gCjAwMDAwMTUzNzcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA0OCAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNDkgPj4Kc3RhcnR4cmVmCjE1NTMxCiUlRU9GCg==\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" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "A = 1.2 # amplitude of signal\n", "Q = 1 / 10 # quantization stepsize\n", "N = 2000 # number of samples\n", "\n", "\n", "def uniform_midtread_quantizer(x, Q):\n", " \"\"\"Uniform mid-tread quantizer with limiter.\"\"\"\n", " # limiter\n", " x = np.copy(x)\n", " idx = np.where(np.abs(x) >= 1)\n", " x[idx] = np.sign(x[idx])\n", " # linear uniform quantization\n", " xQ = Q * np.floor(x / Q + 1 / 2)\n", "\n", " return xQ\n", "\n", "\n", "def plot_signals(x, xQ):\n", " \"\"\"Plot continuous, quantized and error signal.\"\"\"\n", " e = xQ - x\n", " plt.figure(figsize=(10, 6))\n", " plt.plot(x, label=r\"signal $x[k]$\")\n", " plt.plot(xQ, label=r\"quantized signal $x_Q[k]$\")\n", " plt.plot(e, label=r\"quantization error $e[k]$\")\n", " plt.xlabel(r\"$k$\")\n", " plt.axis([0, N, -1.1 * A, 1.1 * A])\n", " plt.legend()\n", " plt.grid()\n", "\n", "\n", "# generate signal\n", "x = A * np.sin(2 * np.pi / N * np.arange(N))\n", "# quantize signal\n", "xQ = uniform_midtread_quantizer(x, Q)\n", "# plot signals\n", "plot_signals(x, xQ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Change the quantization stepsize `Q` and the amplitude `A` of the signal. Which effect does this have on the quantization error?\n", "\n", "Solution: The smaller the quantization step size, the smaller the quantization error is for $|x[k]| < 1$. Note, the quantization error is not bounded for $|x[k]| > 1$ due to the clipping of the signal $x[k]$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mid-Rise Characteristic Curve\n", "\n", "The in-/output relation of the mid-rise quantizer is given as\n", "\n", "\\begin{equation}\n", "x_Q[k] = Q \\cdot \\Big( \\underbrace{\\left\\lfloor\\frac{ x[k] }{Q}\\right\\rfloor}_{index} + \\frac{1}{2} \\Big)\n", "\\end{equation}\n", "\n", "where $\\lfloor \\cdot \\rfloor$ denotes the floor function. The quantization characteristic of a linear uniform mid-rise quantizer is illustrated below\n", "\n", "![Characteristic of a linear uniform mid-rise quantizer](mid_rise_characteristic.png)\n", "\n", "The term mid-rise copes for the fact that $x[k] = 0$ is not mapped to zero. Small positive/negative values around zero are mapped to $\\pm \\frac{Q}{2}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Mid-rise quantization of a sine signal\n", "\n", "The previous example is now reevaluated using the mid-rise characteristic" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1BhZ2VzIDIgMCBSIC9UeXBlIC9DYXRhbG9nID4+CmVuZG9iago4IDAgb2JqCjw8IC9FeHRHU3RhdGUgNCAwIFIgL0ZvbnQgMyAwIFIgL1BhdHRlcm4gNSAwIFIKL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL1NoYWRpbmcgNiAwIFIKL1hPYmplY3QgNyAwIFIgPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9Bbm5vdHMgWyBdIC9Db250ZW50cyA5IDAgUgovR3JvdXAgPDwgL0NTIC9EZXZpY2VSR0IgL1MgL1RyYW5zcGFyZW5jeSAvVHlwZSAvR3JvdXAgPj4KL01lZGlhQm94IFsgMCAwIDYxNi40IDM3Ny4zODM3NSBdIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovVHlwZSAvUGFnZSA+PgplbmRvYmoKOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDExIDAgUiA+PgpzdHJlYW0KeJzdW8uSHMUV3fdX1BIvKOX7sUSBIcI7QGEvCBYKITBCEiFkjMNf73PuzarMrO6Z1jRmHIYIBTOns2/e96tq7PLqZJfvF7O8wr9fl6+Xb/D/bxe7fI5/358MfntzSjatAT+9bj/5nFdffI5AzPTb30+n705PPsFX3+P856eTL2so1kWcWmPgoTenWNMRfD2BZrWN3vD1Dsol75Zz0jGWxXu3prD8/HL52/J2efKJIytu+QvEgYhr6UKezJqqsTWZXALkffLpy3/+8OLll58/XV68v8j4RW5OX52+WN5tNxko8+wmqoKfXCEaVtOUcXoKq/x6evpsefKZXaxZnn138nH1xsaEk86tNS7Pvj19ZP60PHu1/PmZsPD7KsSasjp/YH4Eb1PJNbL3K6UWsOxsyaNSXHxMtcD769GmI3ijWq6QvV8tNkHmcNRLNI+oFxfymo92HcHb9HKN7P16cZDZnvlLfkx/8TZfyAEDeGNmuUL2Sm4xYc1zZrHmMb3Fl3yeBUbw1nx7P9krWslhjXbWyqPmlhDTeRIYwdu0co3s/VoJIazu4CuPmlmiS+cpYARv08o1svdrJVp8fvCVR80rF5qqN3c0VQ/SyhWyV7RS/DGvuCGvvMM3zPKxwf0e+lOSdXVZfnjxBsTYga7BkAa+/eQz1yh/9COJnKjaR0lPjToKcElHJezgjc3gQBT6rGc0VbGDspC/FuQmkxILmehpUHpZfS5VVGbUEVezKesd5DSkQ7W2H/B9SPvq+V9/+er52/cfv/nh7S/vl09/omIfU7U2mAu67eiNyh3J7tqdqF5Ur4WwH6pfs8b/A/064y/ot6M36ncku+t3onqpP41rZAtmzKZk1eOjdhybACld0suO3qqXgWzXy0j1Hr0kP+sl/g/04l29oJeO3jr5DmR3vUxU79aLRzUe9GJ/s7/YNU56sQ4DdkkO30XVSe2/jF+yiaU4H11dvjyq7I4YS2uyUvsgZnTRlsoFSlq9Ho0wa8nWAUQuD9k5NXxAwcwBaLFr1kYLnycbsi9EMcEET7SgAuRsggVa0ZMp2erQsKTCo5VKFYUgzlzABRmoNXEFXwIjxzkTaiJs2SAEwtav1vjgisBxdZLrvC0rGgjrncB1raGK6fxa0QBWOe0gifUCFwpachUYX82ZMKwRfbBWrvR0c+HEp9XiAienYT9MdALXNfhYxC9ssKuNQjs4HCiwlcBxNVE4QWOaq6tGGAxlrSkKzEwejaVObcT9Va7kAZeqcgJjOStEaJaQSrUCQ4NBhI8Wp53zwqBYSTiJkCDCJYWTlKE30+DqjSuib3ReAdwSpiMYK3a0Ga1RTQ0uNZYqtFH4bRAzRAqWjRfaBUSUb8LGY7QTGP4WTCOSPZUiMIiU7Uq4XlXFVsjmU2MwRihTiFQQUctHxkoyRq6sCCNrm/DwHp+oQfAPUwntAB9AgywMOpkgY1Ms9ATVCgw3aPqGigvGKU/YwoJViYj7qFc5izNGOIGx4fZwf8IOrmlFSkSaTwgQIQJnc1WuZCJJoQh/jsGoh0lDHdPB76qq1cEdoBA9DFcLRvhAh4oRKBS6A2IFriaiY4J2xcQgpyFCqRoiiM1ibRba9A2JdI/QAm/4usD4qs0Sk2VFoCa9MiFAq8KWy4gcRJhU1qTLveIQtjCOwBnWFldz8BfYh6oEjDNGfIrkEoJYHNMVRrxp2cXCbmJ3uV/cAQkMUoYiicAj4qOENiKJqSaLG1PHqVCt3CIhW1gJKIZREUtaOn1FkpPTcMcsJmNPlaEU8RJPtjIDynpwAgt7K3DFV3mlhU3hDUIC6a1GuRBukY0pxsvql94qsOHqMwWJSV8i0hBJcPcXEEZCo5IcRay8GKIpCnvIVIaAwHeQFIAGZEMvvgAt+uIlgQb4bxFPyAX+AZ6qoJxGKDS0X5OtlYpDhoMWaUKGdrIai2AF/PAs8oBDGREnDQ41RiyVEPy+IrsLKnYgCkNCOxL7AVXQi/mQd6rNGrWBrlt4W2TqL1nIelYXEmCZwaXioCEwz1NeWAVyVSvyBhYlsoBk4E2p4uMh0D2pR+aCDIsLBaa/FBRFydMUFpjPLEVDgsgRCUfPgoKyC52noHUE6QM6L+0sLhN2kTFrbJfBKYtqF4rypl2G6DCSMgKUikSi7IaI9OkERbCLQ0E0fFrEzQIXouLCUEMJKBEiMConwkc1FuDASRgrrHtkFxw6K64XCiMjqx0QsMGIuPSh6tVmGVFf5Sx6INhJ7QurG0GjYRDFgy9EeBN6rIPfRMMyGHW6y4grcWjkvhWFTt3RGlTWIijCzZCHknC2FDEEBGd1Ujc3HtVMziKlRTEwUjZui5JokN1hdglBcIMiWhsML8pGog1qQpAqFyiexslplHZY00qOiMwjKUvAFigV4e0Elj5WwhtRiCwltofnIFHLadYG5G9pZBAqSOtFMorUS1RgwjBTldwGV4dxPWRf9EGQM651Ux6CSzq9A2496G/t/RZ7YoGFxquj5BhFYtAmudzb8LFrStsGDRU4TiB9HNmELo7MjQLZnnV5BE45B6N0PUzSvoFw1aJrpRFE4ysVjnvvuoGwg3ReB1BzNuIUtlYwo5d38RzUNM46szFf2FDFI8iKJCfx08Y8Wojs/BGES6nFatmZR2cJO9YLaNCOBcrb2LcIDbjxBbRoY4LecxMAv7cEPqPQf8lbi9lQx3EjxyPKShXDgcLQCxzQ4M2BM2gVjWG4gGZpXEeJHaxYtVZPqJPmaVYkuhh0aOUMtS02R/M4xpJUwiMafT4YHdkdtjQXUC+9/ehKDtYEC2cok+rRQaEYjAHxAprqMRa84SRxDAbqz7l8CKb+POOIZtGktKwb6kILxxmNLR4x6+xSME9oQB5RjUiktC4FZhINyQlF5dWY5MywSwFNaVAe0dZJ4addCtQ1Dcsj2torTpEbmnwLzBkNLTIxxnYpwKWG5oz6FpuoQl2K4lpsHlGNTaTgXYjqWmgeQI1MqHETITrbAugAavwMX0eP2MLnAGr0jDyhB2nRM6O2Rc8oKxJ5i54J7ZVt0CGqRoueI6rRM9omYpbX6DmiGj2jzWP2LXpmNLToGX2JdVGj54hq9Iw+isagRc+M1hY9o+/3Cnod/S+VVa5UwIZWUhRVbja4KjBhmT55aIUlq0UEHCssMwlaFGlv9xLLo4igIK1/r7E4iynCypC1F1k5mzBU16nKki7YDGOV5VE0ScHPZRZH8zYa7XWWZys6O2mdeqGFYGablzDHt3GpVvQhbVza66/IuzVfvQCTgkspybLH8ntOl6o5Jx0r97os/CZTpfHuhdlIIfRhWhdxxK+YAIVCr9dKAr1emgq2qqdUp3WcDXXdujRwr6f3Qi6SJAgdpkouVmajracRblFNCqfOtu1uUH+NLU1Eju26u9kLv5hvG9165Rc1bd02x9GoD3UNHWdj0LNayCxsmNigbFmNeC6JbLOLj7r+Qe0vLbowfIGArsQCHxWqrgPDz7YdEtxecxJ7dvS7WRdRfIoqkzBGV6hGrYjeE64kRBDZhQ2+8AFnjE5SDYpzjEj1YpuE6qsVClMCuCsyy8rbH+o3HJYRZbqHshiRfENRHrNKkyPn8wYbSB51PcWUV/fEknLbQ4FIye00dFp1DRVX57cLMdYVcVSKEItv7KG11iUUnMvbBoI5JwMtDAG5SpMQAaD7D6rd6jKCOS16o4siw0LjmvbAcpSdGk0adl3D3TGpE7bymKFZhgNdgzGb5c0pMRGqrh0nr1yazSm51b0SVz6heQjCA2YXOOJMbf6E0Sa7qcGcnK93mJOrckGcmmPDRdpGAoUMP7tGGRNWVXjvR6eY6Q3pFGHs1ULcpibcWKKdGtUpenunOsU6CiLHoRaPXEkq7d7Bjmmkt7BTzuGCy1QVMjJPow7Mre2YzXpvO6U+p49FhQi8ZJs7h553TKq96Z0y8ND1jum6t71Tbh/63qEO9L53qhlD4zsWmN75TtVoaH3H0tV737HMXe99C6M3S/T25leZNu7Q/JIN5Dvx7N79qgm8iW5uf8lGtT7lqf8V0gn9jp0bYGFa02pvgIV0SSYdOmAaxiMO5hZYtGeRTcvcA4thcF5o7ytGJ28LwhXq1BsLESRTJdKbYzEBokyE5NambuWgRpN1Nbo3zS13RAmboWumkGhiVVPIlVvlBKvbg5beTSsRBFyY2mkhguzWuuy8V84AR8xVT+99toiTYlHF7p22dG3bhtrzl7glqbztswPTSkswcPJt+x2YLtW1uQpqq/IAZpOOlXz209bqCAcKLGjh57qDDxZJSudK5sdss64n+b6HPqWCJ/rqg2gkOG7pREa+V4NUbXXDaeSpF+FCmybdRSItWlmBMW/CR9pGxfNlPwlfjAYsIFH3mRYFWvcnnquskuXKwGeMocG1NLYDRm7VKnMvvDzrRhM9tvZ8mFuRuIJKw0cubtuf+62yh8g3AdIGs7GVGxOf24UGW8Ssrh8T27btSsRekocHgbXamQZbmFRXmMh/WWMSbDsu50V2FGuvzo3otHyoKAwi0RnnmqagnCrtI2zLcBG9cu8OW4iUqLuuqVvqnrpUKMwUajMK3x6kBT4dUi+W5WN77BakgGmFq8w1+pAuonVMTrMUeqOkz3VQFkFDnzR4FrUq7UtkAqlbKoHgXrIlX6UKMbZIyGBDAhuyIofX1v6h0IKzZRwvp0joA+YUN3yfa6uHfGELaUFo75PnFJN99pwiOPLdkBZlHpdDD0K7z6RjduhD6ZRLIh9LtnrIyPHbHnYfVsc81afVKasNe9jKUlarEQb7FDtmzD7GTvl1mGPHbNwH2Sl3D5PskOj7JDtVhWGUHWtIn2WnijMMs2N96tPsWMzGuXWofHfA86sKnFX1NQXzm977f9g7dx/8pxDz2Y3GPZSffOL1DQyO4HwL41cRT/+EQ57/tK8hsnZi0OoRpfrwRYvM5gc4crbcj5aItjpPYGoHX5wGFHW4U+0oX6nN8OplvIpzjF7VudqxF6MEO8ok7jj9VDDTYZaBs6tG0A9UzyV4PaG7sONVu1ou6fUF/zjl6eneRw0f/JrJ6fA2cIjbfXzo1+zIunJExSnoDWbzhvYWzvCSG0rb/r1dJ5feuNzewfnovbzkxtdBKtIc2+b2/tsP8oHj01+PjEia+sH38gHTSNZn2wq/3eDDe3TPG275oK/Kaz76weu7LljkA7CfS7YDS8N7ov9qXPN5aic5iPV1o1FZDbItF2j82GhkzhBdkIHIN/1tVDG6GNwuD3imNFgXdeSCdXf0gdb1+YOs++6yrX55qK3uMu4/NjU7PoEOH+A9/978DUpDc9S/8XK7O07wt5cluMtH/ij+/DFq6fSCdJZzX2w+u18xn3sE/791+TuEAqaHC6Gwow8MBbaKf6xQuPPuh9/x00bKcn1irrv3nYF1R3z+LLAMOV5fVrwfv5Ohu77wAdFzmbXfMRq+OP0HYW4SvwplbmRzdHJlYW0KZW5kb2JqCjExIDAgb2JqCjQwOTMKZW5kb2JqCjE2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzMzID4+CnN0cmVhbQp4nD2RS27EMAxD9zmFLlDA+sfnmaKr9v7bPjnTLgIRlGKRVN8tS0LlQ+2WjuYz+dTL63Dyc3n2QZ5OdfHYp74uj3wz66lu7469Ga0tU/SWSvgqcM8+vfcUuxUa4J6SSxy6ERQBvQH7Pn9kUBGQ22jodil0mm+p3mJM9oojSaVti+/HSeQ+9XXNC4MKLa3Jf0uqRmybwq7jPv1JIZimA3JUtS2xmnn0sw8jBLJHFitQmSU9OzKfIL+viH/4FyUkc1UTaiw7yDNwcouTUtnotFZcFt4IhHlbE8zo1DslJtAJiKgVRb7HtU5y7FaWutap1uPgILwpGpRDTnJqk7lZyh0y63DlfgoBwgHmfYxGh+gaPudZyEweaiqHM5vltUDEXEwYwsvqXJOOg/o5VRDAqUilA0rOWohILOUc9NkzMQeH1jgB/UX2ur5+AZ84fzYKZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMyNyA+PgpzdHJlYW0KeJw9kkuOxDAIRPc5BRdoyfz8OU9Gs+q5/7YfdnoWUaEARVG4a0qT6PJSlxwq2Zv86BVTxc3k74mGxDRxN9DBKfe1owj+BLgOZu4M0UqJQb11icrykbHz19fTlwfvy9thsFF6lphXn5KxBgvydHTxAebc2u5/le8rk44svUpPRe9LvViWqA8x+2L1KdzG5hvbejCeTPFrNlGrmVPW2iK6DNRFSjex1QtQ7VGB41xHbxVtAxCBO0EHlQm1amzBSEi0RdYvzGlC98T/7QG6X9rEdeyD2LSNZ3xFGkPQ3bhHWcPMMep8anPD2tPZJuuU4kwu17I4Vgk0SstYakvwrHpdFGODGWilEM3RamxlaHbo62V4P8gMbzuKsailSs+eN6fgXH3s1xR68DyLHcGbnNgt6OeQrEIGLTZh6ixdr/A55339fgAqPX1GCmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA4NyA+PgpzdHJlYW0KeJw1jcENwDAIA/+ZwiPEECDZp+qr3f9bSNSPfbKMsVjoUEtxCsI7LjZO3fg2iUNPZgFlJI1lsFFUJ4fEJ2RakrEWs8W+nREQrw7FdqLH/idPuz+4ThnECmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA5MiA+PgpzdHJlYW0KeJw9jLENwDAIBHum+AUiYYxt2CdK5ezf5i0naeD0D9fSoDiscXZVNB84i3x4S/WEjcSUppVHU5zd2hYOK4MUu9gWFl5hEaTyapjxeVPVwJJSlOXN+n93PcerG7oKZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvQmFzZUZvbnQgL0RlamFWdVNhbnMtT2JsaXF1ZSAvQ2hhclByb2NzIDE1IDAgUgovRW5jb2RpbmcgPDwgL0RpZmZlcmVuY2VzIFsgODEgL1EgMTAxIC9lIDEwNyAvayAxMjAgL3ggXSAvVHlwZSAvRW5jb2RpbmcgPj4KL0ZpcnN0Q2hhciAwIC9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0ZvbnREZXNjcmlwdG9yIDEzIDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMTIgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udE5hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTM1MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1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WyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMjAgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjMgMCBvYmoKPDwgL2EgMjQgMCBSIC9icmFja2V0bGVmdCAyNSAwIFIgL2JyYWNrZXRyaWdodCAyNiAwIFIgL2QgMjcgMCBSIC9lIDI4IDAgUgovZml2ZSAyOSAwIFIgL2cgMzAgMCBSIC9pIDMxIDAgUiAvbCAzMiAwIFIgL24gMzQgMCBSIC9vIDM1IDAgUiAvb25lIDM2IDAgUgovcGVyaW9kIDM3IDAgUiAvcSAzOCAwIFIgL3IgMzkgMCBSIC9zIDQwIDAgUiAvc2V2ZW4gNDEgMCBSIC9zcGFjZSA0MiAwIFIKL3QgNDMgMCBSIC90d28gNDQgMCBSIC91IDQ1IDAgUiAveiA0NiAwIFIgL3plcm8gNDcgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMiAwIFIgL0YyIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTMgPDwgL0NBIDAuOCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjggPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0RlamFWdVNhbnMtbWludXMgMzMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago0OCAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjAwMTIwMTQ0MTA4KzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMS4xKSA+PgplbmRvYmoKeHJlZgowIDQ5CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE1MjUxIDAwMDAwIG4gCjAwMDAwMTQ5NzggMDAwMDAgbiAKMDAwMDAxNTAyMSAwMDAwMCBuIAowMDAwMDE1MTYzIDAwMDAwIG4gCjAwMDAwMTUxODQgMDAwMDAgbiAKMDAwMDAxNTIwNSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTMgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDA0NTYxIDAwMDAwIG4gCjAwMDAwMDYyNTUgMDAwMDAgbiAKMDAwMDAwNjA0NyAwMDAwMCBuIAowMDAwMDA1NzExIDAwMDAwIG4gCjAwMDAwMDczMDggMDAwMDAgbiAKMDAwMDAwNDU4MiAwMDAwMCBuIAowMDAwMDA0OTg4IDAwMDAwIG4gCjAwMDAwMDUzODggMDAwMDAgbiAKMDAwMDAwNTU0NyAwMDAwMCBuIAowMDAwMDEzNjI5IDAwMDAwIG4gCjAwMDAwMTM0MjkgMDAwMDAgbiAKMDAwMDAxMjk3MSAwMDAwMCBuIAowMDAwMDE0NjgyIDAwMDAwIG4gCjAwMDAwMDczNzAgMDAwMDAgbiAKMDAwMDAwNzc0NyAwMDAwMCBuIAowMDAwMDA3ODkwIDAwMDAwIG4gCjAwMDAwMDgwMjkgMDAwMDAgbiAKMDAwMDAwODMyOSAwMDAwMCBuIAowMDAwMDA4NjQ3IDAwMDAwIG4gCjAwMDAwMDg5NjcgMDAwMDAgbiAKMDAwMDAwOTM3OCAwMDAwMCBuIAowMDAwMDA5NTE4IDAwMDAwIG4gCjAwMDAwMDk2MzUgMDAwMDAgbiAKMDAwMDAwOTgwNSAwMDAwMCBuIAowMDAwMDEwMDM5IDAwMDAwIG4gCjAwMDAwMTAzMjYgMDAwMDAgbiAKMDAwMDAxMDQ3OCAwMDAwMCBuIAowMDAwMDEwNTk5IDAwMDAwIG4gCjAwMDAwMTA5MDkgMDAwMDAgbiAKMDAwMDAxMTEzOSAwMDAwMCBuIAowMDAwMDExNTQ0IDAwMDAwIG4gCjAwMDAwMTE2ODQgMDAwMDAgbiAKMDAwMDAxMTc3MyAwMDAwMCBuIAowMDAwMDExOTc3IDAwMDAwIG4gCjAwMDAwMTIyOTggMDAwMDAgbiAKMDAwMDAxMjU0MiAwMDAwMCBuIAowMDAwMDEyNjg4IDAwMDAwIG4gCjAwMDAwMTUzMTEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA0OCAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNDkgPj4Kc3RhcnR4cmVmCjE1NDY1CiUlRU9GCg==\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" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = 1.2 # amplitude of signal\n", "Q = 1 / 10 # quantization stepsize\n", "N = 2000 # number of samples\n", "\n", "\n", "def uniform_midrise_quantizer(x, Q):\n", " \"\"\"Uniform mid-rise quantizer with limiter.\"\"\"\n", " # limiter\n", " x = np.copy(x)\n", " idx = np.where(np.abs(x) >= 1)\n", " x[idx] = np.sign(x[idx])\n", " # linear uniform quantization\n", " xQ = Q * (np.floor(x / Q) + 0.5)\n", "\n", " return xQ\n", "\n", "\n", "# generate signal\n", "x = A * np.sin(2 * np.pi / N * np.arange(N))\n", "# quantize signal\n", "xQ = uniform_midrise_quantizer(x, Q)\n", "# plot signals\n", "plot_signals(x, xQ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* What are the differences between the mid-tread and the mid-rise characteristic curves for the given example?\n", "\n", "Solution: The mid-tread and the mid-rise quantization of the sine signal differ for signal values smaller than half of the quantization interval. Mid-tread has a representation of $x[k] = 0$ while this is not the case for the mid-rise quantization." ] }, { "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, Digital Signal Processing - Lecture notes featuring computational examples*." ] } ], "metadata": { "anaconda-cloud": {}, "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.9" } }, "nbformat": 4, "nbformat_minor": 1 }