{ "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": [ "## Quantization Error of a Linear Uniform Quantizer\n", "\n", "As illustrated in the [preceding section](linear_uniform_characteristic.ipynb), quantization results in two different types of distortions. Overload distortions are a consequence of exceeding the minimum/maximum amplitude of the quantizer. Granular distortions are a consequence of the quantization process when no clipping occurs. Various measures are used to quantify the distortions of a quantizer. We limit ourselves to the signal-to-noise ratio as commonly used measure." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Signal-to-Noise Ratio\n", "\n", "A quantizer can be evaluated by its [signal-to-noise ratio](https://en.wikipedia.org/wiki/Signal-to-noise_ratio) (SNR), which is defined as the power of the continuous amplitude signal $x[k]$ divided by the power of the quantization error $e[k]$. Under the assumption that both signals are drawn from a zero-mean wide-sense stationary (WSS) process, the average SNR is given as\n", "\n", "\\begin{equation}\n", "SNR = 10 \\cdot \\log_{10} \\left( \\frac{\\sigma_x^2}{\\sigma_e^2} \\right) \\quad \\text{ in dB}\n", "\\end{equation}\n", "\n", "where $\\sigma_x^2$ and $\\sigma_e^2$ denote the variances of the signals $x[k]$ and $e[k]$, respectively. The SNR quantifies the average impact of the distortions introduced by quantization. The statistical properties of the signal $x[k]$ and the quantization error $e[k]$ are required in order to evaluate the SNR of a quantizer. First, a statistical model for the quantization error is introduced." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model for the Quantization Error\n", "\n", "In order to derive the statistical properties of the quantization error, the probability density functions (PDFs) of the quantized signal $x_\\text{Q}[k]$ and the error $e[k]$, as well as its bivariate PDFs have to be derived. The underlying calculus is quite tedious due to the nonlinear nature of quantization. Please refer to [[Widrow](../index.ipynb#Literature)] for a detailed treatment. The resulting model is summarized in the following. We focus on the non-clipping case $x_\\text{min} \\leq x[k] < x_\\text{max}$ first, hence on granular distortions. Here the quantization error is in general bounded $|e[k]| < \\frac{Q}{2}$.\n", "\n", "Under the assumption that the input signal has a wide dynamic range compared to the quantization step size $Q$, the quantization error $e[k]$ can be approximated by the following statistical model\n", "\n", "1. The quantization error $e[k]$ is not correlated with the input signal $x[k]$\n", "\n", "2. The quantization error is [white](../random_signals/white_noise.ipynb)\n", "\n", " $$ \\Phi_{ee}(\\mathrm{e}^{\\,\\mathrm{j}\\,\\Omega}) = \\sigma_e^2 $$\n", "\n", "3. The probability density function (PDF) of the quantization error is given by the zero-mean [uniform distribution](../random_signals/important_distributions.ipynb#Uniform-Distribution)\n", "\n", " $$ p_e(\\theta) = \\frac{1}{Q} \\cdot \\text{rect} \\left( \\frac{\\theta}{Q} \\right) $$\n", "\n", "The variance of the quantization error is then [derived from its PDF](../random_signals/important_distributions.ipynb#Uniform-Distribution) as\n", "\n", "\\begin{equation}\n", "\\sigma_e^2 = \\frac{Q^2}{12}\n", "\\end{equation}\n", "\n", "Let's assume that the quantization index is represented as binary or [fixed-point number](https://en.wikipedia.org/wiki/Fixed-point_arithmetic) with $w$-bits. The common notation for the mid-tread quantizer is that $x_\\text{min}$ can be represented exactly. Half of the $2^w$ quantization indexes is used for the negative signal values, the other half for the positive ones including zero. The quantization step is then given as\n", "\n", "\\begin{equation}\n", "Q = \\frac{ |x_\\text{min}|}{2^{w-1}} = \\frac{ x_\\text{max}}{2^{w-1} - 1}\n", "\\end{equation}\n", "\n", "where $x_\\text{max} = |x_\\text{min}| - Q$. Introducing the quantization step, the variance of the quantization error can be expressed by the word length $w$ as\n", "\n", "\\begin{equation}\n", "\\sigma_e^2 = \\frac{x^2_\\text{max}}{3 \\cdot 2^{2w}}\n", "\\end{equation}\n", "\n", "The average power of the quantization error quarters per additional bit spend. Introducing the variance into the definition of the SNR yields\n", "\n", "\\begin{equation}\n", "\\begin{split}\n", "SNR &= 10 \\cdot \\log_{10} \\left( \\frac{3 \\sigma_x^2}{x^2_\\text{max}} \\right) + 10 \\cdot \\log_{10} \\left( 2^{2w} \\right) \\\\\n", "& \\approx 10 \\cdot \\log_{10} \\left( \\frac{3 \\sigma_x^2}{x^2_\\text{max}} \\right) + 6.02 w \\quad \\text{in dB}\n", "\\end{split}\n", "\\end{equation}\n", "\n", "It now can be concluded that the SNR increases approximately by 6 dB per additional bit spend. This is often referred to as the 6 dB per bit rule of thumb for linear uniform quantization. Note, this holds only under the assumptions stated above." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Uniformly Distributed Signal\n", "\n", "A statistical model for the input signal $x[k]$ is required in order to calculate the average SNR of a linear uniform quantizer. For a signal that conforms to a zero-mean uniform distribution and under the assumption $x_\\text{max} \\gg Q$ its PDF is given as\n", "\n", "\\begin{equation}\n", "p_x(\\theta) = \\frac{1}{2 x_\\text{max}} \\text{rect}\\left( \\frac{\\theta}{2 x_\\text{max}} \\right)\n", "\\end{equation}\n", "\n", "Hence, all amplitudes between $-x_\\text{max}$ and $x_\\text{max}$ occur with the same probability. The variance of the signal is then calculated to\n", "\n", "\\begin{equation}\n", "\\sigma_x^2 = \\frac{4 x_\\text{max}^2}{12}\n", "\\end{equation}\n", "\n", "Introducing $\\sigma_x^2$ and $\\sigma_e^2$ into the definition of the SNR yields\n", "\n", "\\begin{equation}\n", "SNR = 10 \\cdot \\log_{10} \\left( 2^{2 w} \\right) \\approx 6.02 \\, w \\quad \\text{in dB}\n", "\\end{equation}\n", "\n", "The word length $w$ and resulting SNRs for some typical digital signal representations are\n", "\n", "| | $w$ | SNR |\n", "|----|:----:|:----:|\n", "| Compact Disc (CD) | 16 bit | 96 dB |\n", "| Digital Video Disc (DVD) | 24 bit | 144 dB |\n", "| Video Signals | 8 bit | 48 dB |\n", "\n", "Note that the SNR values hold only if the continuous amplitude signal conforms reasonably well to a uniform PDF and if it uses the full amplitude range of the quantizer. If the latter is not the case this can be considered by introducing the level $0 < A \\leq 1$ into above considerations, such that $x_\\text{min} \\leq \\frac{x[k]}{A} < x_\\text{max}$. The resulting variance is given as\n", "\n", "\\begin{equation}\n", "\\sigma_x^2 = \\frac{4 x_\\text{max}^2 A^2}{12}\n", "\\end{equation}\n", "\n", "introduced into the definition of the SNR yields\n", "\n", "\\begin{equation}\n", "SNR = 10 \\cdot \\log_{10} \\left( 2^{2 w} \\right) + 20 \\cdot \\log_{10} ( A ) \\approx 6.02 \\, w + 20 \\cdot \\log_{10} ( A ) \\quad \\text{in dB}\n", "\\end{equation}\n", "\n", "From this it can be concluded that a level of -6 dB is equivalent to a loss of one bit in terms of SNR of the quantized signal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Quantization of a uniformly distributed signal \n", "\n", "In this example the linear uniform quantization of a random signal drawn from a uniform distribution is evaluated. The amplitude range of the quantizer is $x_\\text{min} = -1$ and $x_\\text{max} = 1 - Q$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SNR = 48.090272 in dB\n" ] }, { "data": { "application/pdf": "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MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5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Nzk0IDEyMzMgXSAvRm9udE5hbWUgL0RlamFWdVNhbnMgL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjIzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjI2IDAgb2JqCjw8IC9EIDI3IDAgUiAvRSAyOCAwIFIgL1AgMzAgMCBSIC9TIDMyIDAgUiAvYSAzMyAwIFIgL2QgMzQgMCBSIC9lIDM1IDAgUgovZWlnaHQgMzYgMCBSIC9mIDM3IDAgUiAvZml2ZSAzOCAwIFIgL2ZvdXIgMzkgMCBSIC9nIDQwIDAgUiAvaCA0MSAwIFIKL2kgNDIgMCBSIC9tIDQzIDAgUiAvbiA0NSAwIFIgL28gNDYgMCBSIC9vbmUgNDcgMCBSIC9wYXJlbmxlZnQgNDggMCBSCi9wYXJlbnJpZ2h0IDQ5IDAgUiAvcGVyaW9kIDUwIDAgUiAvcSA1MSAwIFIgL3IgNTIgMCBSIC9zIDUzIDAgUgovc2V2ZW4gNTQgMCBSIC9zaXggNTUgMCBSIC9zbGFzaCA1NiAwIFIgL3NwYWNlIDU3IDAgUiAvdCA1OCAwIFIKL3RocmVlIDU5IDAgUiAvdHdvIDYwIDAgUiAvdSA2MSAwIFIgL3ogNjMgMCBSIC96ZXJvIDY0IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMjUgMCBSIC9GMiAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0YxLURlamFWdVNhbnMtT21lZ2EgMjkgMCBSIC9GMS1EZWphVnVTYW5zLVBoaSAzMSAwIFIKL0YxLURlamFWdVNhbnMtbWludXMgNDQgMCBSIC9GMS1EZWphVnVTYW5zLXVuaTAzMDIgNjIgMCBSCi9GMi1EZWphVnVTYW5zLU9ibGlxdWUtc2lnbWEgMjAgMCBSIC9GMi1EZWphVnVTYW5zLU9ibGlxdWUtdGhldGEgMjEgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago2NSAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjEwMTE4MTIwNTAzKzAyJzAwJykKL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuMy4yLCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuMy4yKSA+PgplbmRvYmoKeHJlZgowIDY2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE5OTc2IDAwMDAwIG4gCjAwMDAwMTk1ODcgMDAwMDAgbiAKMDAwMDAxOTYzMCAwMDAwMCBuIAowMDAwMDE5NzI5IDAwMDAwIG4gCjAwMDAwMTk3NTAgMDAwMDAgbiAKMDAwMDAxOTc3MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTggMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAzNDcwIDAwMDAwIG4gCjAwMDAwMDYzNTQgMDAwMDAgbiAKMDAwMDAwNjE0NiAwMDAwMCBuIAowMDAwMDA1ODAzIDAwMDAwIG4gCjAwMDAwMDc0MDcgMDAwMDAgbiAKMDAwMDAwMzQ5MSAwMDAwMCBuIAowMDAwMDAzODk3IDAwMDAwIG4gCjAwMDAwMDQyOTcgMDAwMDAgbiAKMDAwMDAwNDUyMiAwMDAwMCBuIAowMDAwMDA0OTIzIDAwMDAwIG4gCjAwMDAwMDUyNzUgMDAwMDAgbiAKMDAwMDAwNTYzOSAwMDAwMCBuIAowMDAwMDE4MTE1IDAwMDAwIG4gCjAwMDAwMTc5MTUgMDAwMDAgbiAKMDAwMDAxNzQyNiAwMDAwMCBuIAowMDAwMDE5MTY4IDAwMDAwIG4gCjAwMDAwMDc0NzkgMDAwMDAgbiAKMDAwMDAwNzcxMiAwMDAwMCBuIAowMDAwMDA3ODYzIDAwMDAwIG4gCjAwMDAwMDgyMzQgMDAwMDAgbiAKMDAwMDAwODQ3MiAwMDAwMCBuIAowMDAwMDA4ODQ0IDAwMDAwIG4gCjAwMDAwMDkyNTUgMDAwMDAgbiAKMDAwMDAwOTYzMiAwMDAwMCBuIAowMDAwMDA5OTMyIDAwMDAwIG4gCjAwMDAwMTAyNTAgMDAwMDAgbiAKMDAwMDAxMDcxNSAwMDAwMCBuIAowMDAwMDEwOTIxIDAwMDAwIG4gCjAwMDAwMTEyNDEgMDAwMDAgbiAKMDAwMDAxMTQwMyAwMDAwMCBuIAowMDAwMDExODE0IDAwMDAwIG4gCjAwMDAwMTIwNTAgMDAwMDAgbiAKMDAwMDAxMjE5MCAwMDAwMCBuIAowMDAwMDEyNTE4IDAwMDAwIG4gCjAwMDAwMTI2ODggMDAwMDAgbiAKMDAwMDAxMjkyMiAwMDAwMCBuIAowMDAwMDEzMjA5IDAwMDAwIG4gCjAwMDAwMTMzNjEgMDAwMDAgbiAKMDAwMDAxMzU4MSAwMDAwMCBuIAowMDAwMDEzODAzIDAwMDAwIG4gCjAwMDAwMTM5MjQgMDAwMDAgbiAKMDAwMDAxNDIzNCAwMDAwMCBuIAowMDAwMDE0NDY0IDAwMDAwIG4gCjAwMDAwMTQ4NjkgMDAwMDAgbiAKMDAwMDAxNTAwOSAwMDAwMCBuIAowMDAwMDE1Mzk5IDAwMDAwIG4gCjAwMDAwMTU1MjMgMDAwMDAgbiAKMDAwMDAxNTYxMiAwMDAwMCBuIAowMDAwMDE1ODE2IDAwMDAwIG4gCjAwMDAwMTYyMjcgMDAwMDAgbiAKMDAwMDAxNjU0OCAwMDAwMCBuIAowMDAwMDE2NzkyIDAwMDAwIG4gCjAwMDAwMTY5OTcgMDAwMDAgbiAKMDAwMDAxNzE0MyAwMDAwMCBuIAowMDAwMDIwMDM2IDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gNjUgMCBSIC9Sb290IDEgMCBSIC9TaXplIDY2ID4+CnN0YXJ0eHJlZgoyMDE5MwolJUVPRgo=\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2021-01-18T12:05:03.376470\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1BhZ2VzIDIgMCBSIC9UeXBlIC9DYXRhbG9nID4+CmVuZG9iago4IDAgb2JqCjw8IC9FeHRHU3RhdGUgNCAwIFIgL0ZvbnQgMyAwIFIgL1BhdHRlcm4gNSAwIFIKL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL1NoYWRpbmcgNiAwIFIKL1hPYmplY3QgNyAwIFIgPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9Bbm5vdHMgWyBdIC9Db250ZW50cyA5IDAgUgovR3JvdXAgPDwgL0NTIC9EZXZpY2VSR0IgL1MgL1RyYW5zcGFyZW5jeSAvVHlwZSAvR3JvdXAgPj4KL01lZGlhQm94IFsgMCAwIDYwOS4xMzQzNzUgMzkyLjUwODc1IF0gL1BhcmVudCAyIDAgUiAvUmVzb3VyY2VzIDggMCBSCi9UeXBlIC9QYWdlID4+CmVuZG9iago5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTEgMCBSID4+CnN0cmVhbQp4nM1awXIctxG971fMUTksCDS6gcbRimJVpSqVsq1KDqkcaHolU6EoiZTifH5ez87sYLAksZtyWDIt1fJpugfzALx+jdkwvN+E4d3gh/f489sQhtf4827j8duHTfLFhcgxC369qX+NhZx4xacbXFv/9utm83Zz8R2S3CPo9WbD0ZUpKDsZP1jmcITerFHvgu7hOsOCjjf6PDyQXkSHGMklHu52w9+H2+HiO7Lx0PBnPB2e1Cme1btUfCjJZ2UM9OLV7t/XV7sfX78cru43qTgq6kNYjboCl4Fsftr8MHye7+HBZnUP8Amkm46dnzjYvMSE/Lb5jL/9sPXIJeqyhBCT/QxErshw9WHz8s1w8X0Ygh/evN2oi1mLT2Qz9eaXzYvo/zC8eb/50xtk8s5bMvzMHxCO2O2r3fvLv3396fL2fvvh+vbr/fDq4+YH+xl+L143r4c1r0HEUU7MNRE1eB6vvXRP8RqYXaYiiXPgciqx9I0SSxwcCWvSmooVeh61/YRPkUvRu+xzKdGnFE8lN3yj5EbKjpCkpJqLFXoeuf2ER+SumIuEf5eYvJaQZ1EwBkcCBxD4f2SDQ3QUQqaVpK/Q89joJ3yaDfbJqVDkkpOWio3wLHQUlEX8s8TV6Gv0TDq6CTt0oBxr9DlrIE8VHfQcdIiKC0lFV7VuhZ5HRz/h03RIVqe+kDehl4qOeKCjEq4YykwLyrNROOnWqErDkSo5idMlF99TrU1//fnm+vPX3fZfl58+XT6DRi1pGdfFhJ2zNloLfOIyfDAhPvMD+Y4LADkaIvYlzCFja2o6wbR8m+q/pNXsUM44lzWzC3wus3XChdlVvoeZVWhjwnijii8nuJZvndkQo+OS4MRXzC7wuczWCRdmV/keZjZQwZBLSRIl0gme5ZunNkPRKFspWHO74GeTW6es2F1lfMi2QC7H6xIaSR8J+i38fL7lkJYouYiRwJmuKKnwcylZpVwoWWd8nBLC2pPkkyquzsvCej5KMrmsuVDTnlf42ZTUKStKVhmfoCSpKyV4LqgdBxF7NkLMCFBQws3X5xULfi4hq5QLIeuMjxMSgzimwHYWQHGpmM9HSRJkUvzfULLgZ1NSp6woWWV8gpIU4PxDziCP966OF1Nnmr41IQZxEHaFD0yWfe/nkpOSUkY1ALRFW7u/NXLAyQ3Z7vLiP6O4swtMsveCe9HfTbio93s8YLxjVRjj52G++Md4YXG5wJUHzXOCfx6qxgOWcp/ocUv56dfrfQVpg20hkc9+tKT9PCtrWtXBeiHFyau3ddDP5W9PBWGCS4Sap+UZ5bHKGKB1gTG509Hi71wlbb0FJ+O6DhQkaaIsGAOn6b882OmEqFIUKsOP7ZJfTubWxXOBFQ+ScsiTMckZj4+WhNcBFczB5VQkTB5RE3xITCWvA2o4w14XKVMpKuJ8Ce0NDui4X4KnSZSCjw6tcNS4vr7CRzWBz+Gp/AfMCmlGwWpCKpwUExcRPoXYrMOAJm1CKhz1D1uMDneBu2Kl0lJb4QnbKufsJ6ZCVOfV5/bRK5xCcBE7lOcQTi5llZbdCqcI9eLCOpW15cxwHXGAicQJpRSm61N0mpmOCK5wFpR+ynGeE9Q9zjSKxSqkwjGNJMXW5D5EA5YZvGhL8IKDWagTZn4mWGFf8ZBHBFc4PhZ8CNPiDUXRTEg6YrjCobeww6axYwjZiUuyA5d1SIWTV8ds99tH2HJLITb3WGC7PkOx8kQXjUdcBXWxiahwCrgF0bRFyMRAsm8JrnHJkATFlplCluPMdUiFM+Q/RJlXMHGxw6bcElzhWDHmXDDGKURAhXhpCa5xD0VSaPdMV0IPyGieW4IrXCByUKAy3yWbBsAZlCakwsEdSIvzkiRlR8z+iOMKj8VZ6ZOZZDtc4lCOSF5wiFhCqSvTo0QYBY52NLeOqHE7dEFXMJ8JxQB5jTm1HFe47ceQQkqHEIVeCrccV7gSqCuepgOQ6rR1HbHGoX1p3o8xitOI1dBQXOGoEd6DhWlvRaweqEFpGa5xC4FkzOqFfeYg5NoyXOEwgdjBJc8nDmaDoLHpiOIFxy4xWQ2zj7dTODQdckRxhXuUWo/yT3MIDBR5jKMNOeAE7rwHddNqiZodQ62OOK5wjS6LwMFNISXBIyR/xPGCE1YOxAkOYh/CnrHiorYkV7j1HBCxQ8RytryOqPCCigTjMHMM523HiNJyXOMgDBOJPTqFRPNgmRuKK9ieyWvwYQ6w1SPUMlzjKHtQ7jTvemb4BB99y3CNY63BhdBctlmSIyzSluEaR7TA98VptYBqlHHNRwxXeLEpNZc7hcA6Ys7SEcU1LjBFucwMo6rBj3BqNK/CKcHSscAXTSEFfUBBMW8iFrjA8MAYzLWuOkVvIg64qXfw5nj2IWKzCjlrGa5wQYFJhxNtCej5FfQ1/FY4wcXCGcR5nwjZho6p5bfGzYBEzvNakYgNDV2mRvAqnKzQC3zy9PBiXiHDXzYE1zjEO8C65WmtiKAuob1qCK5gL65kPlgWkeLAhG8JrnCC4MHBq8x8oaYV7P8jgiu8WLPpZd5ZgjlCRc9HFC84mhF4pNVrhnOaiLp1GOrWYbNqHe727W1omo3hqWZjc+KVd++mpsx6skPvMX4L4NB/RIFjuPowXPzFW7s0Xw2fXtDLw4YKWmBIBqHOCme0XL2rrZRldLWYUpFuarhI7E3FxBC6ld7le48E+5ViSP3cWItFk/cgiKl/ORTeWizJ3H3IbSI7chHUejj1zsXWNqAHUGt8JHef0UN3EzaT1ZH+OOAC4DAEHZl2L8akY8Y1R0rc5dosFZZIwaqhLh/YNqoQb9QL7Q8achekFD/OTf9qNB6UOamydp8RVsKb1DPkqJsaTgVOyxYHn0Betg3EjO3lu4+ITYDtmWAxNPWfEKbBKge2gPruOg1QGxRMiA8sTHftbe2snLyZnRT7l5ssW6uCKtHfu/BqKMQw0WiHuvxZnwbJChnC1U8t9pLV9oDAHXTJjjYzWB7e98XM6g3BDxX4TelLX4Dmh0DG3f5tzpOXF3P+WNXoRam7waB93t4Qx8yjzeoO3CQbPoMhxN2JZFTVIKgCGqg7bPwCUWAT1f4+CHAhPiNzhCXsbgTrzMSqjpWavgaDbeKM8oVGu69Q2br3bOPob5utHT4xFBsEwqd1c9u5E5cM75v6T7mFvYCDQNOj1J1IHU9FNLKHzvd3gh0B4lo4t75mQ4UZ29cHuKNunYGqwthCdPrkWdlFe2qGo1+kt2Rn2ahgsOd9XVWGrcvsT1GFZKebntXrCeUf3TqMPrQaTX+fZmtvmW3CE9ri7urAqBP2LJZ1OUEozeSg7qJnwfbt24Vkrb1XCEM5ZV179L9wfR6yoP3JgQcgaCDreOzbHQpYSfC3MCPUF8ts/T4Mt6bS37xIHWJE985pNez//a32fGZvXxkZ7XE0pwylYjipZE55Ms2M+596Zv9wp9C+prIhLK+oHn3/VX0b68HvJCPpQ99s/vDYN5vHlv/kr0c3V89pnsru7bmGqkcZ3h1e45C9xrFDRCN7/OpdmkLt5c0f7z7e32+vPt7d7W4uv1x/vB3efr29Gj/8vPvy2253O1zffvr6Zbi/fnd7eTNc3v4y7O7uPt4d3khu/gud0pPHCmVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKMjcyNQplbmRvYmoKMTcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzMjcgPj4Kc3RyZWFtCnicPZJLjsQwCET3OQUXaMn8/DlPRrPquf+2H3Z6FlGhAEVRuGtKk+jyUpccKtmb/OgVU8XN5O+JhsQ0cTfQwSn3taMI/gS4DmbuDNFKiUG9dYnK8pGx89fX05cH78vbYbBRepaYV5+SsQYL8nR08QHm3Nruf5XvK5OOLL1KT0XvS71YlqgPMfti9SncxuYb23ownkzxazZRq5lT1toiugzURUo3sdULUO1RgeNcR28VbQMQgTtBB5UJtWpswUhItEXWL8xpQvfE/+0Bul/axHXsg9i0jWd8RRpD0N24R1nDzDHqfGpzw9rT2SbrlOJMLteyOFYJNErLWGpL8Kx6XRRjgxlopRDN0WpsZWh26OtleD/IDG87irGopUrPnjen4Fx97NcUevA8ix3Bm5zYLejnkKxCBi02YeosXa/wOed9/X4AKj19RgplbmRzdHJlYW0KZW5kb2JqCjE4IDAgb2JqCjw8IC9CQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDc5Ci9TdWJ0eXBlIC9Gb3JtIC9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nDWNuxHAMAhDe6ZgBCMgNgulcvZvYwip9E6nD4ld7Db5IWgUbZJwVoxDNr09X9akCFaT9ARcqfEp3BgLuXB6kEhS7UzJf7fpfgGt6ReoCmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL0JCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjgxCi9TdWJ0eXBlIC9Gb3JtIC9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nD2ROXJEMQgFc52CC7hKrJLOM1WOxvdP3eiPHWkBHs1jRIXECvkZEXZvYUsip4RuienyGp4uteU9fN9LR3aSVKJ6SIgzReNIqotNlUTCVpemH/Hgx0v8OBkl4fPWIJRHYuvT9gNCZKGUClJa3lsWp/F7QNtFTjlVMaVav46U2adjTaigywWTcmqQ1bKlAl9Mky9VcV/3fA07R75sLgY0nf/X2Df+HrqfCnVvAZ3zEQRKebcL+AL6A3AMIv6M+bxj2Lp7LoMx8csgSzxxqzsdBtM2VveyzYSoW7sRuMiMQR3VM8TR0d3stK7zaagQNLMWE2feDGVFRJiMEqMRa2vN6m/Hyt4sC6VFsjDH2Eb5s/41vn8Be49kUAplbmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggOTIgPj4Kc3RyZWFtCnicPYyxDcAwCAR7pvgFImGMbdgnSuXs3+YtJ2ng9A/X0qA4rHF2VTQfOIt8eEv1hI3ElKaVR1Oc3doWDiuDFLvYFhZeYRGk8mqY8XlT1cCSUpTlzfp/dz3Hqxu6CmVuZHN0cmVhbQplbmRvYmoKMTUgMCBvYmoKPDwgL0Jhc2VGb250IC9EZWphVnVTYW5zLU9ibGlxdWUgL0NoYXJQcm9jcyAxNiAwIFIKL0VuY29kaW5nIDw8IC9EaWZmZXJlbmNlcyBbIDEwMSAvZSAxMjAgL3ggXSAvVHlwZSAvRW5jb2RpbmcgPj4gL0ZpcnN0Q2hhciAwCi9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0ZvbnREZXNjcmlwdG9yIDE0IDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMTMgMCBSID4+CmVuZG9iagoxNCAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udE5hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTM1MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTMgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEy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dEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250RGVzY3JpcHRvciAyMiAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NSAvTmFtZSAvRGVqYVZ1U2FucwovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAyMSAwIFIgPj4KZW5kb2JqCjIyIDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMjEgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjQgMCBvYmoKPDwgL0MgMjUgMCBSIC9hIDI2IDAgUiAvYiAyNyAwIFIgL2JyYWNrZXRsZWZ0IDI4IDAgUiAvYnJhY2tldHJpZ2h0IDI5IDAgUgovYyAzMCAwIFIgL2QgMzEgMCBSIC9lIDMyIDAgUiAvZiAzMyAwIFIgL2ZpdmUgMzQgMCBSIC9mb3VyIDM1IDAgUiAvZyAzNiAwIFIKL2h5cGhlbiAzNyAwIFIgL2kgMzggMCBSIC9sIDM5IDAgUiAvbiA0MSAwIFIgL28gNDIgMCBSIC9vbmUgNDMgMCBSCi9wIDQ0IDAgUiAvciA0NSAwIFIgL3MgNDYgMCBSIC9zcGFjZSA0NyAwIFIgL3QgNDggMCBSIC90aHJlZSA0OSAwIFIKL3R3byA1MCAwIFIgL3UgNTEgMCBSIC93IDUyIDAgUiAvemVybyA1MyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDIzIDAgUiAvRjIgMTUgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9GMS1EZWphVnVTYW5zLW1pbnVzIDQwIDAgUiAvRjItRGVqYVZ1U2Fucy1PYmxpcXVlLWthcHBhIDE4IDAgUgovRjItRGVqYVZ1U2Fucy1PYmxpcXVlLXBoaSAxOSAwIFIgL00wIDEyIDAgUiA+PgplbmRvYmoKMTIgMCBvYmoKPDwgL0JCb3ggWyAtOCAtOCA4IDggXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMSAvU3VidHlwZSAvRm9ybQovVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago1NCAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjEwMTE4MTIwNTAzKzAyJzAwJykKL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuMy4yLCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuMy4yKSA+PgplbmRvYmoKeHJlZgowIDU1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE1ODQ1IDAwMDAwIG4gCjAwMDAwMTUyNzcgMDAwMDAgbiAKMDAwMDAxNTMyMCAwMDAwMCBuIAowMDAwMDE1NDE5IDAwMDAwIG4gCjAwMDAwMTU0NDAgMDAwMDAgbiAKMDAwMDAxNTQ2MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTggMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAzMTk4IDAwMDAwIG4gCjAwMDAwMTU1OTEgMDAwMDAgbiAKMDAwMDAwNDk0MSAwMDAwMCBuIAowMDAwMDA0NzMzIDAwMDAwIG4gCjAwMDAwMDQ0MTAgMDAwMDAgbiAKMDAwMDAwNTk5NCAwMDAwMCBuIAowMDAwMDAzMjE5IDAwMDAwIG4gCjAwMDAwMDM2MTkgMDAwMDAgbiAKMDAwMDAwMzgzMSAwMDAwMCBuIAowMDAwMDA0MjQ2IDAwMDAwIG4gCjAwMDAwMTM4NzUgMDAwMDAgbiAKMDAwMDAxMzY3NSAwMDAwMCBuIAowMDAwMDEzMjEwIDAwMDAwIG4gCjAwMDAwMTQ5MjggMDAwMDAgbiAKMDAwMDAwNjAzNiAwMDAwMCBuIAowMDAwMDA2MzQxIDAwMDAwIG4gCjAwMDAwMDY3MTggMDAwMDAgbiAKMDAwMDAwNzAyOCAwMDAwMCBuIAowMDAwMDA3MTcxIDAwMDAwIG4gCjAwMDAwMDczMTAgMDAwMDAgbiAKMDAwMDAwNzYxMyAwMDAwMCBuIAowMDAwMDA3OTEzIDAwMDAwIG4gCjAwMDAwMDgyMzEgMDAwMDAgbiAKMDAwMDAwODQzNyAwMDAwMCBuIAowMDAwMDA4NzU3IDAwMDAwIG4gCjAwMDAwMDg5MTkgMDAwMDAgbiAKMDAwMDAwOTMzMCAwMDAwMCBuIAowMDAwMDA5NDU0IDAwMDAwIG4gCjAwMDAwMDk1OTQgMDAwMDAgbiAKMDAwMDAwOTcxMSAwMDAwMCBuIAowMDAwMDA5ODgxIDAwMDAwIG4gCjAwMDAwMTAxMTUgMDAwMDAgbiAKMDAwMDAxMDQwMiAwMDAwMCBuIAowMDAwMDEwNTU0IDAwMDAwIG4gCjAwMDAwMTA4NjMgMDAwMDAgbiAKMDAwMDAxMTA5MyAwMDAwMCBuIAowMDAwMDExNDk4IDAwMDAwIG4gCjAwMDAwMTE1ODcgMDAwMDAgbiAKMDAwMDAxMTc5MSAwMDAwMCBuIAowMDAwMDEyMjAyIDAwMDAwIG4gCjAwMDAwMTI1MjMgMDAwMDAgbiAKMDAwMDAxMjc2NyAwMDAwMCBuIAowMDAwMDEyOTI3IDAwMDAwIG4gCjAwMDAwMTU5MDUgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA1NCAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNTUgPj4Kc3RhcnR4cmVmCjE2MDYyCiUlRU9GCg==\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2021-01-18T12:05:03.843219\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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", "import scipy.signal as sig\n", "\n", "w = 8 # wordlength of the quantized signal\n", "xmin = -1 # mimimum amplitude of input signal\n", "N = 8192 # number of samples\n", "K = 30 # maximum lag for cross-correlation\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(x <= -1)\n", " x[idx] = -1\n", " idx = np.where(x > 1 - Q)\n", " x[idx] = 1 - Q\n", " # linear uniform quantization\n", " xQ = Q * np.floor(x / Q + 1 / 2)\n", "\n", " return xQ\n", "\n", "\n", "def analyze_quantizer(x, e):\n", " \"\"\"Compute and plot PDF, CCF and PSD of quantizer.\"\"\"\n", " # estimated PDF of error signal\n", " pe, bins = np.histogram(e, bins=20, density=True, range=(-Q, Q))\n", " # estimate cross-correlation between input and error\n", " ccf = 1 / len(x) * np.correlate(x, e, mode=\"full\")\n", " # estimate PSD of error signal\n", " nf, Pee = sig.welch(e, nperseg=128)\n", " # estimate SNR\n", " SNR = 10 * np.log10((np.var(x) / np.var(e)))\n", " print(\"SNR = %f in dB\" % SNR)\n", "\n", " # plot statistical properties of error signal\n", " plt.figure(figsize=(9, 4))\n", "\n", " plt.subplot(121)\n", " plt.bar((bins[:-1] + bins[1:]) / (2 * Q), pe * Q, width=2 / len(pe))\n", " plt.title(\"Estimated histogram of quantization error\")\n", " plt.xlabel(r\"$\\theta / Q$\")\n", " plt.ylabel(r\"$\\hat{p}_x(\\theta) / Q$\")\n", " plt.axis([-1, 1, 0, 1.2])\n", " plt.grid()\n", "\n", " plt.subplot(122)\n", " plt.plot(nf * 2 * np.pi, Pee * 6 / Q**2)\n", " plt.title(\"Estimated PSD of quantization error\")\n", " plt.xlabel(r\"$\\Omega$\")\n", " plt.ylabel(r\"$\\hat{\\Phi}_{ee}(e^{j \\Omega}) / \\sigma_e^2$\")\n", " plt.axis([0, np.pi, 0, 2])\n", " plt.grid()\n", " plt.tight_layout()\n", "\n", " plt.figure(figsize=(10, 6))\n", " ccf = ccf[N - K - 1 : N + K - 1]\n", " kappa = np.arange(-len(ccf) // 2, len(ccf) // 2)\n", " plt.stem(kappa, ccf)\n", " plt.title(\"Cross-correlation function between input signal and error\")\n", " plt.xlabel(r\"$\\kappa$\")\n", " plt.ylabel(r\"$\\varphi_{xe}[\\kappa]$\")\n", " plt.grid()\n", "\n", "\n", "# quantization step\n", "Q = 1 / (2 ** (w - 1))\n", "# compute input signal\n", "np.random.seed(1)\n", "x = np.random.uniform(size=N, low=xmin, high=(-xmin - Q))\n", "# quantize signal\n", "xQ = uniform_midtread_quantizer(x, Q)\n", "e = xQ - x\n", "# analyze quantizer\n", "analyze_quantizer(x, e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Change the number of bits `w` and check if the derived SNR holds\n", "* How does the SNR change if you lower the magnitude of the minimum amplitude `xmin` of the input signal?\n", "* What happens if you chose the magnitude of the minimum amplitude `xmin` in the range of the quantization step? Why?\n", "\n", "Solution: The numerically computed SNR conforms well to the theoretic result derived above. Lowering the magnitude of the minimum amplitude results in a lower SNR as predicted above. The input signal $x[k]$ is correlated to the quantization error $e[k]$ if the magnitude of the minimum amplitude is lowered such that it is close to the quantization step. Here the assumptions made for the statistical model of the quantization error do not hold." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Harmonic Signal\n", "\n", "For a harmonic input signal $x[k] = x_\\text{max} \\cdot \\cos[\\Omega_0 k]$ the variance $\\sigma_x^2$ is given by its squared [root mean square](https://en.wikipedia.org/wiki/Root_mean_square) (RMS) value\n", "\n", "\\begin{equation}\n", "\\sigma_x^2 = \\frac{x_\\text{max}^2}{2}\n", "\\end{equation}\n", "\n", "Introducing this into the definition of the SNR together with the variance $\\sigma_e^2$ of the quantization error yields\n", "\n", "\\begin{equation}\n", "SNR = 10 \\cdot \\log_{10} \\left(2^{2 w} \\cdot \\frac{3}{2} \\right) \\approx 6.02 \\, w + 1.76 \\quad \\text{in dB}\n", "\\end{equation}\n", "\n", "The gain of 1.76 dB with respect to the case of a uniformly distributed input signal is due to the fact that the amplitude distribution of a harmonic signal is not uniform\n", "\n", "\\begin{equation}\n", "p_x(\\theta) = \\frac{1}{\\pi \\sqrt{1 - (\\frac{\\theta}{x_\\text{max}})^2}}\n", "\\end{equation}\n", "\n", "for $|\\theta| < x_\\text{max}$. High amplitudes are more likely to occur. The relative power of the quantization error is lower for higher amplitudes which results in an increase of the average SNR." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normally Distributed Signal\n", "\n", "So far, we did not consider clipping of the input signal $x[k]$, e.g. by ensuring that its minimum/maximum values do not exceed the limits of the quantizer. However, this cannot always be ensured for practical signals. Moreover, many practical signals cannot be modeled as a uniform distribution. For instance, a [normally distributed](../random_signals/important_distributions.ipynb#Normal-Distribution) random signal exceeds a given maximum value with non-zero probability. Hence, clipping will occur for such an input signal. Clipping results in overload distortions whose amplitude can be much higher that $\\frac{Q}{2}$. For the overall average SNR both granular and overload distortions have to be included.\n", "\n", "The root mean square (RMS) of the normal distributed input signal is given by its standard deviation $\\sigma_x$. The RMS level $A$ of the input signal normalized to the maximum level of the quantizer as\n", "\n", "\\begin{equation}\n", "A = \\frac{\\sigma_x}{x_\\text{max}}\n", "\\end{equation}\n", "\n", "The probability that clipping occurs can be derived from the [cumulative distribution function](../random_signals/important_distributions.ipynb#Normal-Distribution) (CDF) of the normal distribution as\n", "\n", "\\begin{equation}\n", "\\Pr \\{ |x[k]| > x_\\text{max} \\} = 1 + \\text{erf} \\left( \\frac{-1}{\\sqrt{2} A} \\right)\n", "\\end{equation}\n", "\n", "where $x_\\text{max} = - x_\\text{min}$ was assumed. For a normally distributed signal with a given probability that clipping occurs $\\Pr \\{ |x[k]| > x_\\text{max} \\} = 10^{-5}$ the SNR can be approximately calculated to [[Zölzer](../index.ipynb#Literature)]\n", "\n", "\\begin{equation}\n", "SNR \\approx 6.02 \\, w - 8.5 \\quad \\text{in dB}\n", "\\end{equation}\n", "\n", "The reduction of the SNR by 8.5 dB results from the fact that small signal values are more likely to occur for a normally distributed signal. The relative quantization error for small signals is higher, which results in a lower average SNR. Overload distortions due to clipping result in a further reduction of the average SNR." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Quantization of a normal distributed signal\n", "\n", "The following example evaluates the SNR of a linear uniform quantizer with $w=8$ for a normally distributed signal $x[k]$. The SNR is computed and plotted for various RMS levels, the probabilities for clipping are shown additionally." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum SNR = 40.854 dB for A = -11.7 dB with clipping probability 1.2e-04\n" ] }, { "data": { "application/pdf": "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b250IC9EZWphVnVTYW5zLU9ibGlxdWUgL0NoYXJQcm9jcyAxNSAwIFIKL0VuY29kaW5nIDw8IC9EaWZmZXJlbmNlcyBbIDEyMCAveCBdIC9UeXBlIC9FbmNvZGluZyA+PiAvRmlyc3RDaGFyIDAKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udERlc2NyaXB0b3IgMTMgMCBSCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9MYXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxMiAwIFIgPj4KZW5kb2JqCjEzIDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250TmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9JdGFsaWNBbmdsZSAwIC9NYXhXaWR0aCAxMzUwIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxMiAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUw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IDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIxIDAgb2JqCjw8IC9CIDIyIDAgUiAvTSAyMyAwIFIgL04gMjQgMCBSIC9SIDI1IDAgUiAvUyAyNiAwIFIgL2QgMjcgMCBSIC9lIDI4IDAgUgovZml2ZSAyOSAwIFIgL2ZvdXIgMzAgMCBSIC9pIDMxIDAgUiAvbCAzMiAwIFIgL20gMzMgMCBSIC9uIDM1IDAgUgovb25lIDM2IDAgUiAvc2xhc2ggMzcgMCBSIC9zcGFjZSAzOCAwIFIgL3RocmVlIDM5IDAgUiAvdHdvIDQwIDAgUiAvdiA0MSAwIFIKL3plcm8gNDIgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMCAwIFIgL0YyIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRjEtRGVqYVZ1U2Fucy1taW51cyAzNCAwIFIgL0YyLURlamFWdVNhbnMtT2JsaXF1ZS1zaWdtYSAxNiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMCAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjQzIDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMTAxMTgxMjA1MTkrMDInMDAnKQovQ3JlYXRvciAoTWF0cGxvdGxpYiB2My4zLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My4zLjIpID4+CmVuZG9iagp4cmVmCjAgNDQKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTMyMzEgMDAwMDAgbiAKMDAwMDAxMjk2MiAwMDAwMCBuIAowMDAwMDEzMDA1IDAwMDAwIG4gCjAwMDAwMTMxMDQgMDAwMDAgbiAKMDAwMDAxMzEyNSAwMDAwMCBuIAowMDAwMDEzMTQ2IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5OSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDM5NDUgMDAwMDAgbiAKMDAwMDAwNTAwNiAwMDAwMCBuIAowMDAwMDA0Nzk4IDAwMDAwIG4gCjAwMDAwMDQ0ODIgMDAwMDAgbiAKMDAwMDAwNjA1OSAwMDAwMCBuIAowMDAwMDAzOTY2IDAwMDAwIG4gCjAwMDAwMDQzMTggMDAwMDAgbiAKMDAwMDAxMTY2MiAwMDAwMCBuIAowMDAwMDExNDYyIDAwMDAwIG4gCjAwMDAwMTEwNTMgMDAwMDAgbiAKMDAwMDAxMjcxNSAwMDAwMCBuIAowMDAwMDA2MDkxIDAwMDAwIG4gCjAwMDAwMDY0MjMgMDAwMDAgbiAKMDAwMDAwNjU4MiAwMDAwMCBuIAowMDAwMDA2NzI5IDAwMDAwIG4gCjAwMDAwMDcwMjkgMDAwMDAgbiAKMDAwMDAwNzQ0MCAwMDAwMCBuIAowMDAwMDA3NzQwIDAwMDAwIG4gCjAwMDAwMDgwNTggMDAwMDAgbiAKMDAwMDAwODM3OCAwMDAwMCBuIAowMDAwMDA4NTQwIDAwMDAwIG4gCjAwMDAwMDg2ODAgMDAwMDAgbiAKMDAwMDAwODc5NyAwMDAwMCBuIAowMDAwMDA5MTI1IDAwMDAwIG4gCjAwMDAwMDkyOTUgMDAwMDAgbiAKMDAwMDAwOTUyOSAwMDAwMCBuIAowMDAwMDA5NjgxIDAwMDAwIG4gCjAwMDAwMDk4MDUgMDAwMDAgbiAKMDAwMDAwOTg5NCAwMDAwMCBuIAowMDAwMDEwMzA1IDAwMDAwIG4gCjAwMDAwMTA2MjYgMDAwMDAgbiAKMDAwMDAxMDc3MCAwMDAwMCBuIAowMDAwMDEzMjkxIDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gNDMgMCBSIC9Sb290IDEgMCBSIC9TaXplIDQ0ID4+CnN0YXJ0eHJlZgoxMzQ0OAolJUVPRgo=\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2021-01-18T12:05:19.356233\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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.special import erf\n", "\n", "w = 8 # wordlength of the quantizer\n", "A = np.logspace(-2, 0, num=500) # RMS levels\n", "N = int(1e6) # number of samples\n", "np.random.seed(1)\n", "\n", "\n", "def compute_SNR(a):\n", " \"\"\"Numerically evaluate SNR of a quantized normally distributed signal.\"\"\"\n", " # compute input signal\n", " x = np.random.normal(size=N, scale=a)\n", " # quantize signal\n", " xQ = uniform_midtread_quantizer(x, Q)\n", " e = xQ - x\n", " # compute SNR\n", " SNR = 10 * np.log10((np.var(x) / np.var(e)))\n", "\n", " return SNR\n", "\n", "\n", "def plot_SNR(A, SNR):\n", " \"\"\"Plot SNR.\"\"\"\n", " # plot results\n", " plt.figure(figsize=(8, 4))\n", " plt.plot(20 * np.log10(A), SNR)\n", " plt.xlabel(r\"RMS level $\\sigma_x / x_\\mathrm{min}$ in dB\")\n", " plt.ylabel(\"SNR in dB\")\n", " plt.grid()\n", "\n", "\n", "# quantization step\n", "Q = 1 / (2 ** (w - 1))\n", "# compute SNR for given RMS levels\n", "SNR = [compute_SNR(a) for a in A]\n", "# plot results\n", "plot_SNR(A, SNR)\n", "# find maximum SNR\n", "Amax = A[np.argmax(SNR)]\n", "Pc = 1 + erf(-1 / (np.sqrt(2) * Amax))\n", "print(\n", " r\"Maximum SNR = {0:2.3f} dB for A = {1:2.1f} dB with clipping probability {2:2.1e}\".format(\n", " np.array(SNR).max(), 20 * np.log10(Amax), Pc\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Can you explain the overall shape of the SNR?\n", "* For which RMS level and probability of clipping is the SNR optimal?\n", "* Change the wordlength `w` of the quantizer. How does the SNR change?\n", "\n", "Solution: The SNR is low for low RMS levels of the input signal since the relative level of the quantization error is high. The SNR increases with increasing level until the clipping errors become dominant which make the SNR decay after its maximum. The SNR is optimal for $A \\approx -12$ dB which is equivalent to $\\Pr \\{ |x[k]| > x_\\text{max} \\} \\approx 10^{-4}$. Increasing the wordlength by one bit increases the SNR approximately by 6 dB." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Laplace Distributed Signal\n", "\n", "The [Laplace distribution](../random_signals/important_distributions.ipynb#Laplace-Distribution) is a commonly applied model for speech and music signals. As for the normal distribution, clipping will occur with a non-zero probability. The probability that clipping occurs can be derived from the [cumulative distribution function](../random_signals/important_distributions.ipynb#Laplace-Distribution) (CDF) of the normal distribution as\n", "\n", "\\begin{equation}\n", "\\Pr \\{ |x[k]| > x_\\text{max} \\} = e^{- \\frac{\\sqrt{2}}{A}}\n", "\\end{equation}\n", "\n", "The SNR for a Laplace distributed signal is in general lower compared to a normal distributed signal. The reason for this is, that the Laplace distribution features low signal values with a higher and large values with a lower probability in comparison to the normal distribution. The relative quantization error for small signals is higher, which results in a lower average SNR. The probability of overload distortions is also higher compared to the normal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Quantization of a Laplace distributed signal\n", "\n", "The following example evaluates the SNR of a linear uniform quantizer with $w=8$ for a Laplace distributed signal $x[k]$. The SNR is computed and plotted for various RMS levels." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum SNR = 35.581 dB for A = -16.6 dB with clipping probability 7.1e-05\n" ] }, { "data": { "application/pdf": "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SXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTM1MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4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IC9pIDEwOCAvbCAvbSAvbiAxMTggL3YgXQovVHlwZSAvRW5jb2RpbmcgPj4KL0ZpcnN0Q2hhciAwIC9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnREZXNjcmlwdG9yIDE5IDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zCi9TdWJ0eXBlIC9UeXBlMyAvVHlwZSAvRm9udCAvV2lkdGhzIDE4IDAgUiA+PgplbmRvYmoKMTkgMCBvYmoKPDwgL0FzY2VudCA5MjkgL0NhcEhlaWdodCAwIC9EZXNjZW50IC0yMzYgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnROYW1lIC9EZWphVnVTYW5zIC9JdGFsaWNBbmdsZSAwCi9NYXhXaWR0aCAxMzQyIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxOCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMSAwIG9iago8PCAvQiAyMiAwIFIgL00gMjMgMCBSIC9OIDI0IDAgUiAvUiAyNSAwIFIgL1MgMjYgMCBSIC9kIDI3IDAgUiAvZSAyOCAwIFIKL2ZpdmUgMjkgMCBSIC9mb3VyIDMwIDAgUiAvaSAzMSAwIFIgL2wgMzIgMCBSIC9tIDMzIDAgUiAvbiAzNSAwIFIKL29uZSAzNiAwIFIgL3NsYXNoIDM3IDAgUiAvc3BhY2UgMzggMCBSIC90aHJlZSAzOSAwIFIgL3R3byA0MCAwIFIgL3YgNDEgMCBSCi96ZXJvIDQyIDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMjAgMCBSIC9GMiAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0YxLURlamFWdVNhbnMtbWludXMgMzQgMCBSIC9GMi1EZWphVnVTYW5zLU9ibGlxdWUtc2lnbWEgMTYgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago0MyAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjEwMTE4MTIwNTM1KzAyJzAwJykKL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuMy4yLCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuMy4yKSA+PgplbmRvYmoKeHJlZgowIDQ0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE0NjA2IDAwMDAwIG4gCjAwMDAwMTQzMzcgMDAwMDAgbiAKMDAwMDAxNDM4MCAwMDAwMCBuIAowMDAwMDE0NDc5IDAwMDAwIG4gCjAwMDAwMTQ1MDAgMDAwMDAgbiAKMDAwMDAxNDUyMSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTkgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDA1MzIwIDAwMDAwIG4gCjAwMDAwMDYzODEgMDAwMDAgbiAKMDAwMDAwNjE3MyAwMDAwMCBuIAowMDAwMDA1ODU3IDAwMDAwIG4gCjAwMDAwMDc0MzQgMDAwMDAgbiAKMDAwMDAwNTM0MSAwMDAwMCBuIAowMDAwMDA1NjkzIDAwMDAwIG4gCjAwMDAwMTMwMzcgMDAwMDAgbiAKMDAwMDAxMjgzNyAwMDAwMCBuIAowMDAwMDEyNDI4IDAwMDAwIG4gCjAwMDAwMTQwOTAgMDAwMDAgbiAKMDAwMDAwNzQ2NiAwMDAwMCBuIAowMDAwMDA3Nzk4IDAwMDAwIG4gCjAwMDAwMDc5NTcgMDAwMDAgbiAKMDAwMDAwODEwNCAwMDAwMCBuIAowMDAwMDA4NDA0IDAwMDAwIG4gCjAwMDAwMDg4MTUgMDAwMDAgbiAKMDAwMDAwOTExNSAwMDAwMCBuIAowMDAwMDA5NDMzIDAwMDAwIG4gCjAwMDAwMDk3NTMgMDAwMDAgbiAKMDAwMDAwOTkxNSAwMDAwMCBuIAowMDAwMDEwMDU1IDAwMDAwIG4gCjAwMDAwMTAxNzIgMDAwMDAgbiAKMDAwMDAxMDUwMCAwMDAwMCBuIAowMDAwMDEwNjcwIDAwMDAwIG4gCjAwMDAwMTA5MDQgMDAwMDAgbiAKMDAwMDAxMTA1NiAwMDAwMCBuIAowMDAwMDExMTgwIDAwMDAwIG4gCjAwMDAwMTEyNjkgMDAwMDAgbiAKMDAwMDAxMTY4MCAwMDAwMCBuIAowMDAwMDEyMDAxIDAwMDAwIG4gCjAwMDAwMTIxNDUgMDAwMDAgbiAKMDAwMDAxNDY2NiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDQzIDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSA0NCA+PgpzdGFydHhyZWYKMTQ4MjMKJSVFT0YK\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2021-01-18T12:05:35.166271\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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": [ "w = 8 # wordlength of the quantizer\n", "A = np.logspace(-2, 0, num=500) # relative RMS levels\n", "N = int(1e6) # number of samples\n", "np.random.seed(1)\n", "\n", "\n", "def compute_SNR(a):\n", " \"\"\"Numerically evaluate SNR of a quantized Laplace distributed signal.\"\"\"\n", " # compute input signal\n", " x = np.random.laplace(size=N, scale=a / np.sqrt(2))\n", " # quantize signal\n", " xQ = uniform_midtread_quantizer(x, Q)\n", " e = xQ - x\n", " # compute SNR\n", " SNR = 10 * np.log10((np.var(x) / np.var(e)))\n", "\n", " return SNR\n", "\n", "\n", "# quantization step\n", "Q = 1 / (2 ** (w - 1))\n", "# compute SNR for given RMS levels\n", "SNR = [compute_SNR(a) for a in A]\n", "# plot results\n", "plot_SNR(A, SNR)\n", "# find maximum SNR\n", "Amax = A[np.argmax(SNR)]\n", "Pc = np.exp(-np.sqrt(2) / Amax)\n", "print(\n", " r\"Maximum SNR = {0:2.3f} dB for A = {1:2.1f} dB with clipping probability {2:2.1e}\".format(\n", " np.array(SNR).max(), 20 * np.log10(Amax), Pc\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Compare the SNR for the Laplace distributed signal to the case of a normally distributed signal. What is different?\n", "\n", "Solution: The overall SNR is lower compared to the case of a normally distributed signal. Its maximum is also at lower RMS levels. Both can be explained by the properties of the Laplace distribution discussed above." ] }, { "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 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 1 }