{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "1Is7n3HnE-dd" }, "source": [ "
\n", " \n", "
\n", "\n", "### Prof. Dr. -Ing. Gerald Schuller
Jupyter Notebook: Renato Profeta\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "hide_input": false, "id": "YD2GAC87FA_c", "outputId": "5a0f8dd6-74ff-4c8e-dc7c-094e4f695cd3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Not running on CoLab\n" ] } ], "source": [ "# Configurations for Google Colab\n", "if 'google.colab' in str(get_ipython()):\n", " print('Running on CoLab')\n", " !git clone https://github.com/GuitarsAI/ADSP_Tutorials.git \n", " path=\"./ADSP_Tutorials\"\n", "else:\n", " print('Not running on CoLab')\n", " path=\".\"" ] }, { "cell_type": "markdown", "metadata": { "id": "eH5nUbNyE-de" }, "source": [ "# Vector Quantizer (VQ) and Linde-Buzo-Gray (LBG) Algorithm" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "y871LNKdE-de", "outputId": "75a54036-da23-4561-eef6-d03f6d115d86" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "vDYcByLgE-dj" }, "source": [ "Remember, The Lloyd-Max iteration could look like the following:\n", "\n", "1) Start (initialize the iteration) with a random \tassignment of M reconstruction values \t(codewords) $y_k$ .
\n", "2) Using the reconstruction values, compute the boundary values $b_k$ as mid-points between 2 reconstruction values / codewords (**nearest neighbour rule**).
\n", "3) Using the pdf of our signal and the boundary values, compute new reconstruction values (codewords) $y_k$ as centroids over the quantisation areas (**conditional expectation/centroid**).
\n", "4) Go to 2) until update is sufficiently small (< epsilon).\n", " \n", "This algorithm usually converges (it finds an equilibrium and doesn't change anymore), and it results in the minimum distortion D.\n", "\n", "It is interesting that this can be generalized to the multidimensional case, to the so-called Vector Quantization." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "lbSpHFseE-dj", "outputId": "c2d4c36e-cdfb-42fa-c542-049d2b2550ba" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "w6npLLLGE-dm" }, "source": [ "## Vector Quantization" ] }, { "cell_type": "markdown", "metadata": { "id": "7mO7yjD2E-dn" }, "source": [ "**Scalar** quantization usually makes the assumption that the signal to quantize, the source, is **memoryless**, which means each sample is statistically independent of any other sample in the sequence. This can be seen as having no “memory” between the samples. Examples of these sources might be: Thermal noise, white noise, or a sequence of dice tosses, lottery numbers.\n", "\n", "But many signals do **have memory**, they have samples which are statistically dependent on other samples in the sequence. Example are: Speech signals, pink noise (noise which has a non-flat spectrum), temperature values over the year, image signals, audio signals.\n", "\n", "Since many signals of interest indeed have memory, this suggests that we can do a better job. One possible approach to deal with memory (statistical dependencies) in our signal, is to use the so-called **Vector Quantization (VQ)**.\n", "A possible **reference** is: **“Introduction to Data Compression”**, Section about Vector Quantisation, by Khalid Sayood, Morgan Kaufmann publishers" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "aTp3VTA9E-dn", "outputId": "77ec214c-acc8-4ad2-8b8a-974226c8bd41" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "c5Wnz5QQE-dq" }, "source": [ "How does VQ work? Instead of quantizing each scalar value (each sample) individually, we first group the sequence of samples x(n) into groups of N samples:\n", "\n", "$$[x(0),...,x(N-1)],[x(N),...,X(2N-1)],[x(2N),..,x(3N-1)],...$$\n", "\n", "In this way we obtain a sequence of blocks (also called **vectors**) of size **N samples** each. In this way we obtain a sequence of samples in an **N-dimensional** space. In such a way we can capture or use the memory between samples within each block or vector. The resulting samples with memory in the N-dimensional space will then lie on or near a **hyperplane** or subspace within this N-dimensional space. Hence we don't need to sample the entire space, but we only need to sample the part of our space where our samples are actually located." ] }, { "cell_type": "markdown", "metadata": { "id": "Gp__1ukOE-dq" }, "source": [ "**Example:** Take correlated samples, such that one sample is always similar to the previous sample, just like in a sequence of speech or audio samples (usually we don't have very high frequencies there, and that means the curve through the samples is more or less smooth).\n", "\n", "Now take the dimension N=2. Then we obtain a 2-dimensional vector space of samples, which could look like in the following diagram. The resulting sequence of vectors is:\n", "\n", "$$[x(0),x(1)],[x(2),x(3)],[x(4),x(5)],...$$\n", "\n", "For instance, our signal could be: $x=[23,45,21,4,-23,-4]$, then we get the following **sequence of vectors:**\n", "$[23,45]; [21,4]; [-23,-4]$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "sZFFKXDxE-dr", "outputId": "ab807c5a-4e7e-4fbf-c44f-998f5022c049" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "GSWzX-7IE-dv" }, "source": [ "### Python Example:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "EHADV2oRE-dw" }, "outputs": [], "source": [ "# Imports\n", "import librosa as lbr\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import IPython.display as ipd\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "8r1I0SfPE-dz" }, "outputs": [], "source": [ "# Signal Processing Parameters\n", "Fs = 32000 # Sampling frequency\n", "T=1/Fs # Sampling Period\n", "t = np.arange(Fs)*T # Time vector 1 second" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "4bY11VBlE-d2", "outputId": "4da162d1-6c94-438d-b2d5-e1e690b20ff5" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEWCAYAAACwtjr+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABDZUlEQVR4nO2dd5gV1fnHPy/L0psU6bCIWAArK3ZdrCgaE6PGEiNG5adRYxITS2JNNDGWWKJG0RhrQow9glhZOxYMINhAiiAoIHXpu/v+/pi5u7N3596de+/MvbO77+d55rlTzpzzvXPnzjvnnPe8R1QVwzAMw4iSFoUWYBiGYTR9zNgYhmEYkWPGxjAMw4gcMzaGYRhG5JixMQzDMCLHjI1hGIYROWZsmjEiMkBEKkSkKMXxa0Tk0XzraggReVBEriu0jmwo9DUVketEZIWIfBMwfSzvgbARkaEi8mGBym4tIp+JyLaFKD9fmLEJERFZICKH5bGsLSLSPWn/dBFRESlpKA9V/UpVO6hqVWRCM8RjABOLish6z/aBIZdXLiKbRKS/Z99hIrIgzHLigPsdLwaGqmovn+NlIrI4wvIfdO/ZChFZJyLTROTgqMpzyyxx76GWDST9A3Cz57zA/2X3Hjo7W42quhl4ALg02zwaA2Zs8kSAmz0b5gOneMrYBWgbQTl5w2MAO6hqB3f3bp59b0ZQ7HrgygjyjZQs7qmBwHequiwKPQG50f1dOwN/A55KVbPOFyLSGxgFPBNR/kF+p38CZ4hI6yg0xAEzNhEhImNF5G0RuVVEVgLXiEhnEXlYRJaLyEIRuUJEWnjSvyUiN4vIKhGZLyJHNVDMI8BPPNtnAA8n6RgjIv8TkbUiskhErvEcq/PWJyKDROR1963zZSC51rSPiLwjIqtFZIaIlHmOlYvIH9zvvE5EXkqudYXMNiIy0S3rPREZ7NGyk4i8LCIrReRzETmpgbzuAE4Rke39DrrXaHvPdk0zXqI2ICKXiMgyEVkqIt8XkaNF5AtXw2+TsmwjIv92tX8kIrt58u4jIk+698h8Efm559g1IvKEiDwqImuBsT5afe8x9y39ZaCPW7N4MOm89sALnuMVItLHPdzKzXOdiMwWkdIgetOhqtU4D9iuQE9Pfj8VkU/d/8CLIjLQc+x29x5eK06t6EDPsZEi8qF77FsR+Yt76A33c7X7nfb1kXM48JGqbvLTmu6/KSLXAwcCd7r53+nuVxE5X0TmAHPcfeeIyFz3nnjOc31R1cXAKmCfINevUaKqtoS0AAuAw9z1sUAlcCHQEqfG8TDwLNARKAG+AM7ypN8KnAMUAecBSwBJVxbwObCze84inLdXBUrcdGXALjgvFrsC3wLfd4+VuGlbutvvAn8BWgMHAeuAR91jfYHvgKPdvA53t3u4x8uBL4Ed3O9aDtwQwjVVYPukfQ8CK4GR7rV9DJjgHmvvXocz3WN7AiuAYSnyLwfOdr934rseBixIpcEt/zrP9a0ErgKK3d9vOc6DtCMwDNgEbOemv8b9nU9w0/8ap4Za7F7XaW5erYDtgHnAkUnnft9N29bn+6S7x8qAxWmudb3jbpmb3N+9CPgTMNU9llavT/7e61YEnOumL3L3fR+Yi3M/twSuAN7xnP9joJt77GLgG6CN59493V3vAOzjd4+n0HUTcFcD/+WU/03ce8jnvn0Zx5i2BQ7BuQ/3xPl//RV4I+mc54CfF/o5FtVScAFNafG5Qb/yHCsCNuO0lyf2/R9Q7kk/13OsnXvD9kpXlvuH/BMw2r25W+IxNj7n3Qbc6q7X/BGBATgPzfaetP+k9gF8KfBIUl4vAme46+XAFZ5jPwMmh3BNUxmb+z3bRwOfues/At5MSn8vcHWK/MtxjE0PYA2OccjU2Gyk9oHZ0U2/tyf9NGoN/DW4D2t3uwWwFOfteG/vPeMevxz4h+fcN/y+R8B7rIzsjM0rnu2hwEZ3Pa1en/wfxDFcq93PTcBpnuMv4BpGz7XZAAxMkd8qnCZWcGow1wLdk9KU0LCxuY+kFyPq/5dT/jdJbWwO8Wz/HacJMbHdAceAlXj2PQZclet/Jq6LNaNFyyLPenect7+Fnn0LcWoMCWo8hFR1g7vagfQ8ApyK84d4OPmgiOwtIlPcZo41OG+Tfs1bfYBVqro+SV+CgcCJbhPaahFZDRwA9PbTj/OQ8NUuIi94mmpOa+D7pSJVWQOBvZN0ngbU6xD3oqrLgTuB32eh5TutdbLY6H5+6zm+kbrXoua+UKc5aTHO9R+I04zl1f5bPM1M1L2nkglyj2VD8rVuI07TaxC9ydysql1w3vZLgZuktrl4IHC7J6+VgCT0i8jFbhPbGvd4Z2rv5bNwatWficgHInJMBt9vFc5LQjqy+W96f6s+eH4XVa3AaRnw/jYdcQxxkySKTmujFm9I7RU4bzIDgU/cfQOAr3MqQHWhiMzHebs/yyfJP3Eeokep6iYRuQ1/Y7MUpx+kvcfgDPB8h0U4NZtzctHram6oLyoXFgGvq+rhWZx7E06zzvtJ+zfgvM0m6IVjILLF6/nWAuiH0yxTCcxX1SFpzk0Xpj3Xeyxd3n4somG9/gU5r/KzRORtYAxOrWYRcL2qPpac3u2fuRQ4FJitqtUisgrHGKGqc3D63VoAxwNPiEi3gN9pJk5/Z7akKsO7fwnO7wLU9JF1o+5vszNwSw46Yo3VbPKE++b7OHC9iHR0Oz5/BYQxhuEsnCr7ep9jHYGVrqEZiVML8tO3EPgQuFZEWonIAcCxniSPAseKyJEiUiQibcTpHO8Xgv4weR7YQUROF5Fid9lLRHZu6ERVXY3zZ78k6dB04FT3e48GDs5R4wgROd6tHfwCp+lrKo6RWysil4pIW7e84SKyV5BMQ7jHvgW6iUjngOlz0isiO+HUjme7u+4BLheRYe7xziJyonusI44xXg60FJGrgE6evH4sIj3cmuJqd3eVm74apz8pFS8De4pImyC6ffi2gfzBeek7U0R2F8fj7I/Ae6q6wNXfF6d/Z2qWGmKPGZv8ciGOm+084C2cG/CBXDNV1S9VNdWAtJ8BvxeRdTgduY+nyepUnHb4lcDVeJrlVHURcBxOM8lynLfQ3xCze0hV1wFHACfjvE1+A/wZp1M2CLfjPKS8XIRjeFfjNMk9k6PMZ3H6llYBpwPHq+pW11gcC+yO4zSwArgfp7koKFnfY6r6GfAvYJ7blNWngfTZ6L3EbT5dD7wE/AOnTw1VfRrnt5ogjrfdLCBRC34Rp/bzBU5z1CbqNlONBmaLSAXOb3iyqm5ym7yuB952v1M9by9V/RZ4Def+zobbgRNcT7U7/BKo6qs47vVP4rQiDMa5RxOcCjykzpibJknCm8IwDKPZIiJDgYeAkZrnh6Jb05kBHKSFHQMVKWZsDMMwjMiJVROIYRiG0TQxY2MYhmFEjhkbwzAMI3Ka5Dib7t27a0lJSVbnrl+/nvbt24crKCTirA1MXy7EWRuYvlyIszao1Tdt2rQVqtojsoIKHcIgimXEiBGaLVOmTMn63KiJszZV05cLcdamavpyIc7aVGv1AR+qhasxDMMwGjNmbAzDMIzIMWNjGIZhRI4ZG8MwDCNyzNgYhmEYkVNQYyMiD4gzle6sFMdFRO5wp1KdKSJ75lujYRiGkTuFrtk8iBOtNRVHAUPcZRzwtzxoMgzDMEKmoMZGVd/ACWefiuOAh1138KlAFxHpnSZ9o2PyrKV8V9Fko4obhmEAMYj6LCIlwPOqOtzn2PM4c4O/5W6/ClyqPnO3iMg4nNoPPXv2HDFhwoSs9FRUVNChQ0OzvYZDxRblgtc2sF3nFly1b9uG0+dRWzaYvuyJszYwfbkQZ21Qq2/UqFHTVLU0soKiHDEaZAFKgFkpjk0EDvBsvwqMaCjPxhJBYNnaTTrw0ud1xB9eCpS+sYxEjitx1hdnbaqmLxfirE3VIggkWIxnvnZq52o3DMMwGhFxNzbPAT9xvdL2Adao6tJCizIMwzAyo6BRn0XkX0AZ0F1EFuPMe18MoKr3AJOAo4G5wAbgzMIoNQzDMHKhoMZGVU9p4LgC5+dJjmEYhhERcW9GMwzDMJoAZmwMwzCMyDFj08xZs2Er10/8hK1V1YWWYhhGE8aMTQFRCjugFuCGyZ9x35vzeXa6eZQbhhEdZmxigRSs5Eq3RlNdXXjDZxhG08WMjWEYhhE5ZmwMwzCMyDFjYxiGYUSOGRsDiIezgmEYTRczNs0cKZxvgmEYzQgzNoZhGEbkmLEpJNZyZRhGM8GMTQywpizDMJo6ZmwMwzCMyDFjYwCg1qRnGEaEmLFp5kgBQ+UYhtF8MGNjAOarYBhGtJixaeaYc4JhGPnAjI1hGIYROWZsDMMwjMgpqLERkdEi8rmIzBWRy3yOdxaR/4rIDBGZLSJnFkJnVMSpn8S80QzDiJKCGRsRKQLuAo4ChgKniMjQpGTnA5+o6m5AGXCLiLTKq9A8EEa3ydpNW1m0ckPmZVufjWEYeaCQNZuRwFxVnaeqW4AJwHFJaRToKCICdABWApX5ldk4OPr2NznwximFlmEYhuGLaIHaT0TkBGC0qp7tbp8O7K2qF3jSdASeA3YCOgI/UtWJKfIbB4wD6Nmz54gJEyZkpauiooIOHTpkdW6mrNpUzS/LN9KltXDbqHYNpk+nbezk9QA8OLp9Rhr+MWszry+uZOywVpT1L87o3Ez0xYE464uzNjB9uRBnbVCrb9SoUdNUtTSqclpGlXEA/Bpwki3fkcB04BBgMPCyiLypqmvrnag6HhgPUFpaqmVlZVmJKi8vJ9tzM+XbtZug/FVatWoVqMy02iY7NjhT7S+unAmLF7HDDjtStveAjM7NSF8MiLO+OGsD05cLcdYG+dNXyGa0xUB/z3Y/YElSmjOBp9RhLjAfp5ZjGIZhNCIKaWw+AIaIyCC30/9knCYzL18BhwKISE9gR2BeXlXmgWXrNhdags3UaRhGpBSsGU1VK0XkAuBFoAh4QFVni8i57vF7gD8AD4rIxzjNbpeq6opCaW6amDuaYRjRU8g+G1R1EjApad89nvUlwBH51mUYhmGEi0UQKCBxGkgZJy2GYTQ9zNg0c2xQp2EY+cCMjWEYhhE5ZmwMIF5x2gzDaHqYsWnmWCuaYRj5wIyNYRiGETlmbAzDMIzISTvORkT2BX4MHAj0BjYCs4CJwKOquiZyhYZhGEajJ2XNRkReAM7GGeE/GsfYDAWuANoAz4rI9/Ih0jAMw2jcpKvZnO4TGqYC+MhdbhGR7pEpawbEKh6Zjeo0DCNCUtZsgsQgszhl8WDOt+uyPtcGdRqGkQ9S1mxEZB1phl+oaqdIFBkZc/itbxRagmEYRlpSGhtV7QggIr8HvgEewRmWcRrOrJmGYRiGEYggrs9HqurdqrpOVdeq6t+AH0YtzMiOtZu2ZnWe9dgYhhElQYxNlYicJiJFItJCRE4DqqIWZmTHSfe8m1F6cWMImH+AYRhREsTYnAqcBHzrLie6+4wY8tk3mTkLmIOAYRj5oMHJ01R1AXBc9FIMwzCMpkqDNRsR2UFEXhWRWe72riJyRfTSDMMwjKZCkGa0+4DLga0AqjoTODlKUc0F6ycxDKO5EMTYtFPV95P2VUYhxsg/D7+7sNASDMNoBgQxNitEZDCud6yInAAsDaNwERktIp+LyFwRuSxFmjIRmS4is0Xk9TDKNeqjVs0yDCNCGnQQAM4HxgM7icjXwHycSNA5ISJFwF3A4cBi4AMReU5VP/Gk6QLcDYxW1a9EZNtcyzUMwzDyTxBvtHnAYSLSHmihqtkH4qrLSGCumz8iMgHH6+0TT5pTgadU9StXy7KQyjYMwzDyiDTUfCIiVcBNwOXqJhaRj1R1z5wKdprjRqvq2e726cDeqnqBJ81tQDEwDCdEzu2q+nCK/MYB4wB69uw5YsKECVnpqqiooEOHDlmdmynfbazm4tc3AvDg6PYNpk+lbezk9XW2bx/Vjs6tgw2gSZx72s6tOHxgcaBzMtUXF+KsL87awPTlQpy1Qa2+UaNGTVPV0qjKCdKMNhunb+clEfmRqq4knKnr/fJItnwtgRHAoUBb4F0RmaqqX9Q7UXU8TnMfpaWlWlZWlpWo8vJysj03U5as3givvwYQqEw/bR8uWAnUjRowZJcRDO0TME7q5InOOdtvT9n+g4Kdk4G+OBFnfXHWBqYvF+KsDfKnL4iDQKWqXoLjAv2miIwgnFBai4H+nu1+wBKfNJNVdb07ncEbwG4hlB05lzwxgyemLQ6cfvGqDXy9emPG5by/YGXG5xiGYeSbIMZGAFT1cZywNf8Atguh7A+AISIySERa4YzdeS4pzbPAgSLSUkTaAXsDn4ZQduQ8/uFifv2fGYHTH/DnKex/w2sRKkqP9+1h45YqbnrxMzZXWgg8wzDCIUgz2tmJFVWdLSIHAN/PtWBVrRSRC3CmnS4CHnDzP9c9fo+qfioik4GZQDVwv6rOyrXsuBAnZ2Nv1929b3zJXVO+pEvbVpxzUBjvFYZhNHfSTZ52iKq+BgwUkYFJhyvCKFxVJwGTkvbdk7R9E46DQpOjujp3c/PY1K9CUFKXLZXVzmdVdeh5G4bRPElXszkYeA041ueYAk9FosjIiGz6eQzDMPJNupk6r3Y/z8yfHKNQfLJ0baElGIbRhEnXjPardCeq6l/Cl2OEQTZz1DwxbTE3n9goHP0Mw2iEpGtG65g3Fc2UyhD6bHJhw5b08VQtXpphGGGRrhnt2nwKaY789bU5BS3/8xSzeiZqRpnYmr++OofH3t7A1LLcdRmG0fRo0PVZRNoAZ+GEjGmT2K+qP41QV7Ng3vL1DScqAJJFgIhbXq4X1MEwDKOGIIM6HwF6AUcCr+OM9A8rGGezxhqpDMNoLgQxNtur6pXAelV9CBgD7BKtrGaC9YkYhtFMCGJstrqfq0VkONAZKIlMkZEz2Xij+WGm0DCMsAgSrma8iGwDXIkTu6wDcFWkqoyCEpaxMgzDSBBk8rT73dXXCScAp+ES95qDtfIZhhEWQbzRugA/wWk6q0mvqj+PTJWRF1759Fvf/VaxMQwjbII0o00CpgIf40ReNpoI49+YV2gJhmE0E4IYmzaqmjZ0jZEdcW+m0tg39BmG0VgINM5GRM4Rkd4i0jWxRK7MKBzmIWAYRsgEMTZbcOaTeReY5i4fRimquRBVzSFoBIAoalavf7E8/EwNw2j0BDE2v8IZ2FmiqoPcxbzSQiD2zWhZ6JvzrQWXMAyjPkGMzWxgQ9RCjPhgjWiGYYRNEAeBKmC6iEwBNid2mutz7kRVs5k4cwk79tox53yykRf32pphGIUhiLF5xl2MkInquXzvG/P41RENG5tU5Zt/gGEYYZPW2IhIEXC6qh4WReEiMhq4HSgC7lfVG1Kk2wtnrM+PVPWJKLQYhmEY0ZG2z0ZVq4ANItI57IJdQ3YXcBQwFDhFRIamSPdn4MWwNRSaqCoQhayZ2NgcwzD8CNKMtgn4WEReBmpm+wqhz2YkMFdV5wGIyATgOOCTpHQXAk8Ce+VYXqQsWb2RPl3aZnROoR/LDU77bB0whmGERBBjM9FdwqYvsMizvRjY25tARPoCPwAOoQFjIyLjgHEAPXv2pLy8PCtRFRUVGZ/7xaoq/vjeJn6wfTHHbd+qzrF0eVVUbKy3L336YNqqqqoDpUu2JYlzFi7YAsD8hQspL1/aYD5evvxyHuXVixpOWACy+W3zRZy1genLhThrg/zpCxL1+SERaQXs4O76XFW3pjsnIH6NPcmv0rcBl6pqlTTQNqSq44HxAKWlpVpWVpaVqPLycjI9d9HUhcAsnp67lVvPPsLZOdmxz6nyqthcSfvp78C6uuNS0pXtq21y/feAFi1aBPoO8uLEOgYncc7Mqjkw9wtKBg6krCygV5urY7vttqPs4MHBzskz2fy2+SLO2sD05UKctUH+9AWJ+lwGPAQswDEQ/UXkDFV9I8eyFwP9Pdv9gCVJaUqBCa6h6Q4cLSKVqvpMjmWHytqNmdnez79Zx5G3pb58i1ZuYNtOrWndsihXaYZhGLEgyKDOW4AjVPVgVT0IOBK4NYSyPwCGiMggt+Z0Ms7kbDW40QpKVLUEeAL4WdwMDcBNL34eOO3iVRt4f8HKlMc3bqniwBuncMkTM8OQFjqqyoYtlYWWYRhGIyNIn02xqtY8TVX1CxEpzrVgVa0UkQtwvMyKgAdUdbaInOsevyfXMgpFuo73A/48Je25qzY4/SXPTl+CALedvEfG5Qf1RqvOov9/wgeLuPypjyn/dRkl3dvXO24uBYZh+BHE2HwoIn8HHnG3T8MJxpkzqjoJZ74c7z5fI6OqY8MoMx9MnZe65tIQf578Wc36M9OXZGVswnIi88vnxdnfADB/xXpfY2MYhuFHkGa083Dio/0cuAjHNfncKEU1dtZtyt5/YuX6LTmXn6utSVSM/MbMNGTIbnjhs/QJDMNolgTxRtsM/MVdjAA09qakdM1wie+2vGJz6kSGYRhJpDQ2buDNVM9NVdVDo5HUvIn7OMoKt9Z2yRMzOam0fwOpDcMwHNLVbH7ts28f4BJgWTRymga5GIxQwr1EaLCqsvEqMAyj2ZPS2KhqjROAiBwMXAm0Bs5V1RfyoK1JUXLZRM4ri+dgx1T4GU0zNYZhZENDUZ+PxDEym4DrVTW9367h4v9I/lv5lw2fGcbTPMdAnOmiNcS9mc8wjHiSrs/mA6AHcBPwrrtvz8RxVf0ocnVGQfGzK9VmbQzDyIJ0NZv1QAVwAvBD6r4vK05wTCNk4v4sj7u+hlBVJn38DUcM60lxURDPf8MwwiBdn01ZHnU0GdZt2lrngbwgw8GPcXIQ8KvFNHJbw6ufLuP8f37EhYdsz8UBZjM1DCMcUr7aicgB6U4UkU4iMjx8SY2br1ZuqLOdaYyzONUc7n19Xr19ny5dWwAl4fHFMifK9tI1mwqsxDCaF+ma0X4oIjcCk3HC0ywH2gDbA6OAgcDFkSts5ExfvLrQEjKmkDN9Rs2Nk50wf18uryiwEsNoXqRrRvuliGyD02dzItAb2Ah8Ctyrqm/lR2LzIpSKTRM2FmFRWRWjKqRhNAPSuj6r6irgPncxAuJ9jAnwyiffFkqKYRhGLDB3nDzw+bfrGk6UIIwX7hzzkGZQNWrKTYWGEUfM2ISMat1O/s2V1Zmd3+j9vQzDMOpjxiZH1m8Od9bKVN5oX323gQ++yc8Mmc3hrb8ZfEXDiBUNGhsRaSciV4rIfe72EBE5JnppjQM/Y5NL7STVmUfe9gZ3Tbew/mGxfksVi5Lc1A3DiI4gNZt/AJuBfd3txcB1kSlq5kxbuMp3/8atVYHz2FJVTcllE7ntlS/CktXkmLusggNvtFB/hpEvghibwap6I7AVQFU3Yq0QBUMzGPV52ytz+K5iM1c+M4stGfYdhcmGLZVU29QEhtGsCWJstohIW9wWHhEZjFPTMaCe2fXr75j19ZrQivvvzKUZpR9x3Ss8MnUhk2d/E/icMN8kNm2tYuhVL3L9pE9DzNUwjMZGEGNzNU4Ugf4i8hjwKs4EajkjIqNF5HMRmSsil/kcP01EZrrLOyKyWxjl5psXZgV/0DfEghXrszovEwMSpoPAH10j89h7C8PLNESs36bxcteUuTaGrRHRoLFR1ZeB44GxwL+AUlUtz7VgESkC7gKOAoYCp4jI0KRk84GDVXVX4A/A+FzLjZpk1+dc+cPzn/Dqp7V/qGzz/mDByjrb6ZrV1m4Mz+vt4XcdI7Npa+Ga8dJh/TaNl5te/JyzH/6w0DKMgKQLxLlnYsGJg7YUWAIM8M5rkwMjgbmqOk9VtwATgOO8CVT1HTeKAcBUoF8I5YZK1AMg//7WfM56KPc/VOKhn+De11NP5HbnlLk5l+fH3eVz+cPzn0SSdxwouWwi5z4yreGEMWdrVTWXPjGTl63WYIRIunA1t7ifbYBSYAZOa8yuwHtA2qjQAegLLPJsLwb2TpP+LCDldNQiMg4YB9CzZ0/Ky8uzElVRUZHRuWs2161qTJv2IUvXR9cZvmDBfMbeOY+t1XDOrq0zOtf7vWbPqd/t5ve9012LxLFF66p99yeTCIJ5YIdlaXVGRUVFBX4NitneK35Mnv1NVvllet9Fyd3TN/H+N1X8+8NFPDjamR4jTvqSue/pV+ldvDG2+uJ87SB/+tIF4hwFICITgHGq+rG7PRz4dQhl+1UJfJ/SIjIKx9ikNHCqOh63ma20tFTLysqyElVeXk4m5y5ftxmmvFKzPWJEKfNWrIcZ/8uq/IbYtk9/nn7DCf3/2M+PhMkTA5/r/V7vbPgUFszzP+7Js9618Dn2xhfL4e33/c/x0Zftb5Mrzh+qfp9XaHrc77rrXvvRtX2rjE7N9L6LkrE+v3Gc9NXg6hy043BaLvs0fvpcYnntPORLXxAHgZ0ShgZAVWcBu4dQ9mKgv2e7H04zXR1EZFfgfuA4Vf0uhHJDxa8z/Zs1GyMr79436s8xE5SqiNyPf/v0xw0naiR89NUqSi6byDP/+zrrPNZs3BqiIqMhzKm+cRDE2HwqIveLSJmIHOxGEgjDj/UDYIiIDBKRVsDJwHPeBCIyAHgKOF1VG80IxT9O+qzQEnz59weLeGTqQh6ZujDUnqbFq7IzrqrKW3NW1IwduvXlLzji1tdDVFaXii3pH0tXPPMxx9/9DgC/+Pf0rMu5O6I+r0IQV8MZdpgoI3qCGJszgdnARcAvgE/cfTmhqpXABcCLOMbrcVWdLSLnisi5brKrgG7A3SIyXURi53ry+ufLCy0hMOs3V3LlM7O48plZoQ2mueKZ+rWaucuCTUz235lL+fHf3+Ox974C4PZX5/DFt9FNavbYZ6mHh327dhOPTv2qzr41G4I/aJevq837u/VbMhcXU3a79qWClHv83W/zl5dTv19+6Im0kclAZ6NwBHF93qSqt6rqD9zlVlUNZU5dVZ2kqjuo6mBVvd7dd4+q3uOun62q26jq7u5SGka5YfLA2/MLLSEw3oGVmXjRPfbeQr7wmSah5LKJ9R7QACfe806gfL92a0SLVuVnrMv81andr0+7/716+35w99uB856zLINpJIwG+eir1dzx6pyUx83AND7STp4GICLz8WkWVdXtIlHUyGis9/yS1cGbvn739CwAFtwwJlD6DVvSx3Fbu2krndoU1+7I1zVMY1/9wunMy2QAbSO9D+LIygA1Q7vcjY8GjQ2O23OCNjhTRHeNRk7jo5A3fbbRBACem1HPF8OXbJwKGjrjzS9WMGbX3jXOFcnpVRXJ8zwHVTm+NdjDLzxmL8ksvJNd+8ZBkGa07zzL16p6G3BI9NIaB4Wszr/zZfjOeb9K6hgf/NtJNetfLg/WnxI06Gcqc/Ls9GCGMFPSma8V69KH+6vYXMniNM190xetrll/7bPCjCOKiooCdsanrIGbhWl0BGlG80YLaIFT0+kYmSIjMFH0EzyVxuV3cgYx3rZWVVNcFGxuvmSDndE02iGxvoGmvx/c9TZzllWkbEq8PU3/QmPC70Vh9Yb8Ojx87Alc++XyCvp0aVsvjXfOqMbalN3cCNKMdotnvRInXtlJ0cgx4kwmtbh5y9ezY6/07yR/esHfRTyqh0cuDXNzGvKwayIPvM+/qW/oW+S5STMRaSId78/3n/fJiC9BXj3PUtVR7nK4qo4Dmo5vZ4585vPnzBdhP5QbMiaZlLeiInWz1Hvz6zb/5e3NNMJnZvLsrHH3ltq0tYqPF9fvG6n20V3UonDTV6XymrynTmy/uppP//t7lFw2kY0N1FYTbNxSVdCmwuZCEGPzRMB9Rp55c064Y3waGpx5S5pxD8lc+K/U4XqSg4LG+7Fcl3kp+q2Sn9H3vZl9pId88NunP+bYO9+qN8XCX1+rPyA1F0eUfPDl8rr63pyzAoBxjwQblrfzVZMZfvWLNsFfxKSL+ryTiPwQ6Cwix3uWsTheaUaBSf6T5UqYL+Mr129hfpYPqXvSRKTOhTDez3/sMx4HoDLpQfXBgng38yTmgbn48Rl19r/h8wLzR7e5c0ulM934zS823MyVT25KoSdhdIIyffHqrMpfu2lrQWfCbSykq9nsCBwDdAGO9Sx7AudErqyR0pir46s3hts6Ourm8kDp8tXilK2x8TaJbQ349rs0wvh4YbB2k3Ofvp80z5HfNZqxaDXrtyrzVji1uqimoPAj0+4iP1f9kssmUnLZxAbd+Gd6PAozYddrXuKMB95vOGEzJ13U52eBZ0VkX1V9N4+aGjW/a8RBKddtaryGMgiLK7KzalPn1T6QlzfgIt1YEPE38ptTvKHf8P4mxg+PWJQPmb6IpDPyS9dspN827VIev+a/nzB2/0GZFejy7rzYxQiOHSmNjYhcoqo3AqeKyCnJx1X155Eqa6SsqGi8vhN/nlyYAKLJnetx4rNv1vKrx6dnfF6+PbgyRcisr2zRuuqCTO2d6WVMZ5zi/ps0ddK5PicCacUu+GWcibsXUjpm+ngn5YM4X7IFK9YHCp+STL4jIGRKCxFfz7N0+MXBy4WTx7/Lvtt156LDhqRMk+lVTI6n5m3W/mbtJt8xO0Z+SNeM9l/386H8yWn8rG3iTVFRsWFLPK/b756elbJpKR0zsmz/zxfOW372Vj6MkEJT561k6ryVaY1Nptbmg6Q+qJmeTv+f/+t/vHVpdsFP1mzcymuffcsP9ojdzPSNhnTNaP8lzd2oqt+LRFEjwlwls6fksrozeCb3hcxdto7tt607KPTxDxdxxTOz2KN/F/79f/uGpiVdx3FTmi6gDjlWvAZdPilwYFY/vNM3bNpaRZviIt90mUQnB1jwXV1Xbq87fy7/14sfn84rny5jeJ/ODOnpP1h52bpNbNvRHHVTkc4b7Wac6AGplmbPba80mvncYs0/3/+Kw//yRp19h3m2v169kX3++CqXPDGTLZXVvDd/ZXIWOfGv9zNrHiq7aUrN+pfLK1J6IG6tiq87bBiNfB99lb1794n31k5DcXd5alf3jVtzq/F6v2fLohZZN3MvXePMqpKYe8mP+SEPRWhqpDQ2qvp6YgHeBVYBK4F33X3NnkkZxAozUrOlspotPg/mvf/4CgD73/Aa36wNZQolX654ZlZG6Rd8t4Ef/s15WB56y+sMv/pF33SPvLuQZes2cfsrc7Lq94mSMLqUjr/7HSZ9vDSrc72T5KWbdfOyJ4N5d46dvN53/qFbPQORv1q5gR2vnJyByloSNurBdxakrCH9aPxUDgno7t8caTCCgIiMAb4E7gDuBOaKyFFRC2sMZNrBamTGt2s3886X6QfmPfTOAl7I8oGXC9MWruJld2BkKn7//CeMvP5Vbn3lCy7810d8vHhNvaCWMxat5sYCeAFmM3WEHz977KOc80gX4HVZBq7m//tqdb19S9bUfUnJdvCl92r5RVlIkNEcSM2MIOFqbgFGqWqZqh4MjAJujVZWI8FsTeScep//iP2XZjsPqKufm815ITzwsuGch4M7ar499zuOvfMtTrin7pC14+56m7vLv8z7i8vWqrrlPf2/xXyXJp5dlHydwUR++eCqZ2fVaSqFul6m2dbmmjtBjM0yVfWa8nlA05qwI0usZlM4xj0yjXWbtjacMGbMXVZByWUTWbNxK3/xNPH89MUNdR5o789fyfF3v82WympUNVJnlF/9ezq//PcMRlz3SlbnhzHQNTHK/7T7p9Y7tmbDVkoum8jJ48MZW15y2USWrd3ECx8v5cMF9fv/Hn53YT1HA+9fPdMpMBasqWJOAabNiBtBphiYLSKTgMdx3uVPBD4QkeMBVPWpCPXFmuQb0sgv1/73k5p1r0fT1qpqVq3fgojQo2NroL73W6HZ7dqX6u2btnAVO/bqSMc2xVzyxAwWfLeBHa54oeb4E+fuS2lJ+JPkppvDKAh7Xe8YqSm/LmNQ9/Y55fX23Poj8Z+b4eibOm8lQ6+azEml/XMqA2DkH1/13e9tXiy5bCLPX3gAw/t2rmdgPvpqFbO/XsPp+5bUy6OyqpqWnrmcrnl3E7z7Rk7ee02BIMamDfAtcLC7vRxnWuhjcYxP1sZGREYDtwNFwP2qekPScXGPHw1sAMaqamHaTIzY8cS0xTXrv33qY3bs1ZGjhvfmIE8TyB++P5yT98r94ZQPkpvY/I5PvfxQenWOp3ttIhbengO60L51S44a3puRg7qy/bYdcsr3ymdn16xv2FLFg+8syCm/dFz739l1to/561v89uid6qU7/m7HQeShd+tHVfjoq9WMHFT/peCqZ2dx8eE70qFNy4JO21AopFAj3kWkCPgCOBxYDHwAnKKqn3jSHA1ciGNs9gZuV9W9G8q7tLRUP/ww88AHWyqrKX/9dQ4/pAyAtRsrQaBj65ZsqaqmZQtBREjcJ4Mun5Q6M8MoACfv1Z8WLYQNmyvZb3B3Srq3Z9uOramsVjq3LaZDa+dB560xGfFg7H4lDO3TiSWrN7JTr47s1KsTA7q2Y8PWKr5Zs5HendsiApu3VtO+dUuKiwRVmLu8gi2V1fTp0pau7VtlXG55eTllZWWIyDRVLY3gqwHBpoUehPPAL/GmD2FQ50hgrqrOc8uZABwHfOJJcxzwsDoWcaqIdBGR3qoaeg9ddbXW/gFfNiNiNE4mfLCoZv2Z6UsKqMTIlLBqbHFtrgvSjPYM8Hfgv0CYo9T6Aos824txai8NpekL1DM2IjIOGAfQs2dPysvLMxKzqdI6+w3DaPxk+uyrqKjI+JxsCGJsNqnqHRGU7ddomfzED5LG2ak6HhgPTjNaWVlZxoIWHFZbpUzK2zcOVNw6nY3mQ98ubWtchs8+YBD9u7ZjyLYd6N+1HcvWbWJA1/Z0a9+KymqlqIXT9Ou9hwt1747ZpTfTF62OnbtzoXn0rL3p1qEV7VoV0bNTG1q3bEHCVyHRv1NdrbRI6uvxPpuyjVfn98yLgiDG5nYRuRp4CajxcQyho34x4O257Qck1/uDpImcVD9gxzYtm/wcMI2F0cN6ceOJu7LrNXW9vGZcfQSd2xY3mReD1y4+mO16pO9w79+1ds6WVgXqiO7WvhWTLjqQTm2KaduqftyzuP4eJ47ox388jicAc64/iiG/8+/j6t6hNSuSxic9/NORHLRDj5rtV16bwpvrerBDr46ctvfAwFqKkn66ZEMDdZ9NcY80HsTY7AKcDhxCbTOautu58AEwxO0T+ho4GTg1Kc1zwAVuf87ewJoo+muyZc8B2/D6F/Wn0TXyw5hdejPRHWB356l70LKoRcr26sN23pZXPo338LCrjhnKMbv2pkfH1lQrDP5t3b7D139TxsBuubkWJ+jTuU290fW58OhZe9O9YysGdW9PCxGKi4IM4QvGjKuOYLff175EvHDRgRx1+5uh5e/lphN348pjh7J241Yqq5QS15V71I49mPJ57X/99pN357jd+wL1DafX0AC0bCFce1wBZp6LGUGMzQ+A7VQ11OBOqlopIhcAL+K4Pj+gqrNF5Fz3+D3AJBxPtLk4rs9nhqkhV8L8QxmZ0a19K/p1rZ2bpCFX0rtPGxE7D6zkmvE27YvZtpPj1lwkzria6YtW89P9B/m+1eZCG09tw+9tPhMePHMvDhjSPQxZfPC7w2rG7STo3K6YBTeMYdLHSzlyWK9Q3IY/vuYIWojQvnXLesaiU5tiOrUprrMvue0+YWiM4AQxNjOALkQQNUBVJ+EYFO++ezzrCpwfdrlhUZxczzXyxmu/LuOBt+bXbDfUhNCqZTQvBn84blidcSANMXJQVx4YuxdrNm6lqkprxgSdsEMxx+1W9wFWWtI1kkGcyZw8cgDf270Pew/qlpVB7tIuc3fbMbv2ZuLM2kaKIB5UR+/SO+NyUtExyZg0hAULyZ0g/8CewGci8qKIPJdYohbWGPjhnjaRUtTccuJuvvs7ty3mrAMHMWTbDrz8y4MC5bV/nyDvVsFZcMMYTt+3JCNX0xEDt6FD65b07dKWTm0dPaN27MEx27UKvfaSjm88TWgjBm7DgUN6ZG2Qd+rlP79LOhrLQNsEQWzNqXsP4IoxO0eupbES5O66Gqcp7Y/YfDZ1OGxoz0JLaLRcMGr7QOkGdGvHUcN7+R7r1KaYl391cMrJrJLZuVs4tZtDd9o2q4fK+NNH8MvDdqjZ7tKuFf85d1/uOGWPUHRlwoYtVaHk859z90058Vk6goZ6650iWsJdp+5Zs965rVNLKR24Tb10d5+2Z7192dC9Q23trU2x/310yI7bcvaB24VSXlOkwX+fd14bdx6bSuCk6KUZTZlzDgr2pxTgbz8ewfMXHpDywZNv/j52r6weKkcM61Wv9rBXSdeMm3TixF5ZNvMN69OpZv3QnbZNmW5MiqazXp1b16yftvcAHhzdnifO269eui7t6l9bP6PUEL/3dPDfcXL+Xw6aAoHaFURkdxxPsZOA+cCTEWoymgFtk96Gn7/wAI7561v10iX6A4b37cy7lx8aiZYDtu/OW3PTz5uT4JGzRkaioTGyV0nmD+0E3TvUGovOPgYhQaqmvT0H1Ja93+DuVH7tTDnxwz378eRHtc4O+wzqVrN+0wm7cuCQHjU1oUzo0Loln183mpYtWqR0UMjW8DYXUtZsRGQHEblKRD7FmTRtEU4stVGqemfeFDYyouqIbmokXyfvm26Cp362X85BHL2UdPJv7nlg7F6B8zhwSA/f/akevH06t+Gpn+3HG78ZFbiMfDDAMxYnW/5zbv2aRDak63xP5fHpdQjxesKduX9JnXTefrCObVrSq3ObeuN+rjl2KABP/yz992ndssjX0Cy4YQwLbhiT1mga6ZvRPgMOBY5V1QNU9a9AOA29TZjtcgyx3hy48JC6/TUjBm5Tz5vspNJ+dd5ew6BfR//bPd0LwkWHDuHJ8/ZtMO9UD8znf34gew7YhgHdcn+4h4mm6PLeoWcw496rU+5NmhcdOgSAS0fXj6qcIFOPz+F9O6c8luo3Grv/IBbcMIY9Qr7fjLqkMzY/BL4BpojIfSJyKP7hYwwPw/qkvtkNhyDNGL88fIcG0+SDcw8ezIiBXRmzS2+OHJbaISR5IB84RjSbKLz5IJWx6NI2td5TRtZ6kL19Wa5jup3feMENY+pNmeDtpzlkp9ydcK48xqm59A+hNmdkT0pjo6pPq+qPgJ2AcuCXQE8R+ZuIHJEnfY2OMbv6e04ZtQQZlCcFfK95ym1OGd63U02Ty12n7cm9p6eOvj7ax2OuMsLZNXMl4c01dr+SOvsP2iH14ExvTTPK+Vhae7y9hvo0rzbE/D8dzQkj+vHCRQcC8NP9S3jjN6PS1nqM6AnijbZeVR9T1WNwYpNNBy6LWlhjpUXM4xPlwu+PGxZKPkEeVB3ahDsmpibf1nXzfclnjM6ufTtz/B59ufWk3QPnW+ITRmaP/l0ylZc3tu3UhpnXHFHz1p/g/DQu6WEOqkzH/oNzi0YgItx84m7s3LtTzXbcmjGbIxn1ZqvqSlW9V1Vzr0M3EYb3rfvmlc9geLl4A/nRt0tb9hvcLeXxn/hMgfvPsxucy64eyQbZ74olG4WwSC6rvVvOhHH71OxrWdSCv/xo98Djd8C/3+cXhw3JSmO+6NSmuJ7h904OCM7vO2rHHtx9aLuaaxU1x+3eJy/lGPnFXKdyZLd+Xeps52pqkps10rH3oNSGIRvKf1PGP8/Zx/fYtd/zr9Xst333jCdrKuSUuMlNW+3dZrJ9tuvGaxcfzPw/HZ1zGWP3K2FQ9/ZZudjGAW/cr/22784/zhxJu2LnN/vgd4fx5iXReta1DBhz8IWLDuTdy+29t7FgxiZHkt/S/ZrRbj9598D5ZVIxSjWSOVv83EwT868ftUv9Pokpvy7LqpxDd049iC9qqjzG5tWLD64T12u7Hh1yqpn+YI++HLB9d6753jCm/Los9iHfU3HWAYMA6OTTlNmjY+vYdLTv3LsTvTu3bTihEQvyUy9uwiQ/Twb6tA13CvENd7vu7Zm3Yj0Ap+9bws0vfZHR+W2Li9i4NbgH+7iDBjPuoMG+xwZl6ea9bce63kf57EYf0K0dc5dVsFv/LgxuYF6YTLn1R7uHml+hGNanE+eVDebH+wSfeyVs/nrKHrS2MWtNCvs1cyT53bV/13a0Sxo0tn2ID7UJ/1fbzJVNM42fMUymVZ6nTshnQNN/j9uHsh178J//a3jsTHNFRLh09E707VK4WsOxu/XhiGHm2dmUMGOTI8fuVr8zM3nUexjNDn3csQjZugQn+kl+6jaRpGPHLKL4NkRxkTC0t78bq3f8BkQbhaFbh9Y8eOZIi/RgGHnG/nE54jffyAkjat/UTyp11j+84rCsyzh0p2157Jx9OH5IcZ3os5nw26N3ZvpVh3NSaX8W3DCGJ86N/s3eG5kXnPEr0686vGZ71rVH8sZvRtXr27gjgz4uwzAaB9ZnEwEHe0aT33iCMx+LN/BgJnz2h9EUFznB/743uFXWnc5FUneSq3STcgXxFgsS1mTMrr05/5/Ouiq0KS6qE46+Q+uWdVycP7rycL5auYHdYzw+xTCM7LCaTQSEOfq9TbF/8L8oSYQL+Z5PE2GCU0YOCL3cru1bmaExjCaKGZsIiIvHqzeScs8MAicmgh/6zQWSoEfH7GpqhmE0T6wZLUQSUWxTceKIfvxn2uK0acKY6/zgHXpw309KKS4SNldW8/bcFRySZoKqZBJNdem0pJrUKpk3LxnFgTdOCVy2YRhNk4LUbESkq4i8LCJz3M96cVdEpL+ITBGRT0VktohcVAitmZCIVJxqfMBNJ+6WFx0P/dTxthIR2hQXcejOPTPq6wmSNF1+fz+jtGaq4+SIvoZhNE8K1Yx2GfCqqg4BXsU/sGclcLGq7gzsA5wvIkN90sWObUOY6yMOpJrzpCEO3bln2v4ewzCaH4VqRjsOKHPXH8KZwuBSbwJVXQosddfXuTOG9gU+yZvKgNxxyh5srawutIzQCNKMFpRE+J6wJ0IzDKNxUShj09M1JqjqUhFJ26EgIiXAHsB7adKMA8YB9OzZk/Ly8qyEVVRUZHxuohu+vHxuvWOZ5vX117V9Oi2k7vnJ2lLlne13T5w356utjpYlSygv/y7jMpKPXbNvG3q235S1rrDI5rfNF3HWBqYvF+KsDfKnLzJjIyKvAH7xJn6XYT4dgCeBX6jq2lTpVHU8MB6gtLRUy8rKMimmhvLycrI9tw6TJwLUz8vdn4qdBpfw8kLHaA3v25mysgPqa/Pm7ZNfYP1J5ybOWzx1IXwyi969+1BWtovvOem+VyjXLwJC+20jIM7awPTlQpy1Qf70RWZsVDXlkHkR+VZEeru1mt7AshTpinEMzWOq+lREUmPFEUN78dfXHGOTaiK2g3bowcLv1kemobbY+M40aRhG46JQDgLPAWe462cAzyYnEKfj4O/Ap6r6lzxqKyi79OvMk+c5oWRSjeV8+Kcjef03uc8pkipqcyGnZDYMo2lSKGNzA3C4iMwBDne3EZE+IjLJTbM/cDpwiIhMd5fcZ7aKEd3a+8c5G9DVMQInlfb3PR4W6QZtQmYOAkcM7ZmjGsMwmjIFcRBQ1e+AQ332LwGOdtffIveJLxslPTq2znj2y2y47yellF73Sr39iRqVn7GZ+PMDmLusot7+bOe2MQyjeWDhaiJieN9OjPaZj+PmE3fj8qOc2S8L3SPSvUNrzvaZciDRZ+M3zmZYn851pg1OsFPv8KclMAyj6WDGJiKev/BA7jl9RL39J4zox2Fuk1Mcqm3pogVk0oz2fR8DZBiGkcCMTQEIY7BkWPiFnUk4CGQiM9upDwzDaB6YsSkgyc/nRLTlXGhbXNRwooYwu2EYRshY1OcCMKh7e47drQ+njOzPqfelDIqQFW9dmrtLdIJMa2C/GtGajn0Gh1a+YRhNBzM2BaCohfDXU/ZgzYatdfaH0bzWLcMZQf0qMZ3aOLfFNg24Rieza4+WlO1f3+HAMAzDjE2MiEtXzpHDenHd94dzwoh+hZZiGEYTwYxNM8fXQUCEH+8zsABqDMNoqpixiQk/KxvMUcODzX4ZJokBnBeM2j7vZRuG0XwwYxMTLhm9U0HLb1NsjomGYUSHPWGaOTY8xjCMfGDGxjAMw4gcMzaNnHatQhjESbyiGhiG0fQwY9PIefK8/fi/g7bL+nybu8YwjHxgxiYGJAZRZsPOvTtx+dE7h6jGMAwjfMzYNHNOLO1H57bFfH8Pi9psGEZ0mOtzM2dgt/bMuPqIQsswDKOJY8amkLjdJW1CiNR8z4/3pE+XtjnnYxiGEQVmbApI57bFXDp6J44c1jPnvEYXIPqAYRhGUMzYFJjzyiwkv2EYTZ+COAiISFcReVlE5rif26RJWyQi/xOR5/Op0TAMwwiPQnmjXQa8qqpDgFfd7VRcBHyaF1WGYRhGJBTK2BwHPOSuPwR83y+RiPQDxgD350eWYRiGEQWiBYhTIiKrVbWLZ3uVqtZrShORJ4A/AR2BX6vqMWnyHAeMA+jZs+eICRMmZKWtoqKCDh06ZHVu1MRZG5i+XIizNjB9uRBnbVCrb9SoUdNUtTSyglQ1kgV4BZjlsxwHrE5Ku8rn/GOAu931MuD5oGWPGDFCs2XKlClZnxs1cdamavpyIc7aVE1fLsRZm2qtPuBDjcgeqGp03miqeliqYyLyrYj0VtWlItIbWOaTbH/geyJyNNAG6CQij6rqjyOSbBiGYUREofpsngPOcNfPAJ5NTqCql6tqP1UtAU4GXjNDYxiG0TgplLG5AThcROYAh7vbiEgfEZlUIE2GYRhGRBTEQSBqRGQ5sDDL07sDK0KUEyZx1gamLxfirA1MXy7EWRvU6huoqj2iKqRJGptcEJEPNUqPjByIszYwfbkQZ21g+nIhztogf/psigHDMAwjcszYGIZhGJFjxqY+4wstIA1x1gamLxfirA1MXy7EWRvkSZ/12RiGYRiRYzUbwzAMI3LM2BiGYRjRE2UsnMa0AKOBz4G5wGURl7UA+BiYjhuPCOgKvAzMcT+38aS/3NX1OXCkZ/8IN5+5wB3UNou2Bv7t7n8PKGlAzwM4IYNmefblRQ9OBIk57nJGBvquAb52r+F04OhC6AP6A1NwpsGYDVwUp+uXRl/Brx9OGKr3gRmutmtjdu1S6Sv4tfOkKQL+hxs7Mi7Xzldrtg/MprS4P9iXwHZAK/fmGhpheQuA7kn7bsQ1cjjz+/zZXR/q6mkNDHJ1FrnH3gf2BQR4ATjK3f8z4B53/WTg3w3oOQjYk7oP88j1uH+Mee7nNu76NgH1XYMTCTw5bV71Ab2BPd31jsAXroZYXL80+gp+/dx8OrjrxTgPtH1idO1S6Sv4tfOU+Svgn9Qam1hcO9/nTFQP1Ma0uBf6Rc/25cDlEZa3gPrG5nOgt7veG/jcTwvwoqu3N/CZZ/8pwL3eNO56S5zRwdKAphLqPswj1+NN4x67FzgloL5r8P/DF0SfJ82zOCGYYnX9fPTF6voB7YCPgL3jeO2S9MXi2gH9cCafPIRaYxO7a5dYrM/GoS+wyLO92N0XFQq8JCLT3Hl4AHqq6lIA93PbBrT1ddf9NNeco6qVwBqgW4Ya86En1+t+gYjMFJEHPFOLF0yfiJQAe+C8Acfu+iXpgxhcP3fa9+k4zaQvq2qsrl0KfRCDawfcBlwCVHv2xebaJWPGxkF89mmE5e2vqnsCRwHni8hBadKm0pZOc5TfJ0w9uej8GzAY2B1YCtxSSH0i0gF4EviFqq5NqTo++mJx/VS1SlV3x3lLHykiw/30F0JbGn0Fv3YicgywTFWn+aTzo+D/WzM2DotxOlIT9AOWRFWYqi5xP5cBTwMjgW/duX1ImuMnlbbF7rqf5ppzRKQl0BlYmaHMfOjJ+rqr6rfug6AauA/nGhZEn4gU4zzIH1PVp9zdsbl+fvridP1cPauBchxHndhcOz99Mbl2ifm+FgATgENE5FFieO1qaKidrTksOO2R83A6zhIOAsMiKqs90NGz/g7OH+wm6nbs3eiuD6Nux948ajv2PsDpsEx07B3t7j+fuh17jwfQVULdPpHI9eB0MM7H6WTcxl3vGlBfb8/6L4EJhdDn5vUwcFvS/lhcvzT6Cn79gB5AF3e9LfAmzgy9cbl2qfQV/Nol6Syjts8mFtfOV2cUD9TGuABH43jqfAn8LsJytnN/9Bk47pS/c/d3w+nsm+N+ev+Uv3N1fY7rKeLuL8WZavtL4E5qXRbbAP/BcVl8H9iuAU3/wmkO2Irz1nJWvvQAP3X3zwXOzEDfIzjumjNxJuPrXQh9wAE4TQgz8bjCxuX6pdFX8OsH7IrjtjvTzfeqfP4XAly7VPoKfu2SdJZRa2xice38FgtXYxiGYUSO9dkYhmEYkWPGxjAMw4gcMzaGYRhG5JixMQzDMCLHjI1hGIYROWZsDKMAiEi5iJQWWodh5AszNoZhGEbkmLExDEBE2ovIRBGZISKzRORH7v6rROQDd994ERF3f7mI3Coib4jIpyKyl4g8JSJzROQ6N02JiHwmIg+5QRufEJF2PmUfISLvishHIvIfN44ZInKDiHzinnuzz3nXuIEgy0Vknoj8PNqrZBjZY8bGMBxGA0tUdTdVHQ5Mdvffqap7ufva4oQrSbBFVQ8C7sEJ3X8+MBwYKyKJKNs7AuNVdVdgLc4cITWISHfgCuAwdYKzfgj8SkS6Aj/ACZu0K3BdCt07AUfixOe62o2DZhixw4yNYTh8DBwmIn8WkQNVdY27f5SIvCciH+PMGzLMc85znnNnq+pSVd2ME3cqEahwkaq+7a4/ihM+xss+OBNbve2Gsj8DGIhjmDYB94vI8cCGFLonqupmVV2BE3SxZ8bf3DDyQMtCCzCMOKCqX4jICJy4YX8SkZdwZj28GyhV1UUicg1OvKgEm93Pas96Yjvx30qOB5W8LTjzpJySrElERgKH4gRBvADH2CXjLbcK+08bMcVqNoYBiEgfYIOqPgrcjDMNdcKwrHD7UU7IIusBIrKvu34K8FbS8anA/iKyvaujnYjs4JbXWVUnAb/AmTvFMBot9hZkGA67ADeJSDVOdOnzVHW1iNyH00y2ACcUe6Z8CpwhIvfiROL9m/egqi4XkbHAv0Sktbv7CmAd8KyItMGp/fwyi7INIzZY1GfDiAh3GubnXecCw2jWWDOaYRiGETlWszEMwzAix2o2hmEYRuSYsTEMwzAix4yNYRiGETlmbAzDMIzIMWNjGIZhRM7/AzQGggqipKDrAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Load audio file\n", "speech_signal , sr =lbr.load(path+'/audio/Iron Maiden - The Number Of The Beast.mp3', sr=Fs, offset=13, duration=12)\n", "# Normalize Audio\n", "speech_signal/=np.abs(speech_signal).max()\n", "# Plot Audio\n", "plt.figure()\n", "plt.plot(speech_signal)\n", "plt.title('Iron Maiden - The Number of the Beast (Intro)')\n", "plt.xlabel('samples n')\n", "plt.ylabel('Amplitude (Normalized)');\n", "plt.grid()\n", "# Listen\n", "display(ipd.Audio(speech_signal, rate = Fs ))" ] }, { "cell_type": "markdown", "metadata": { "id": "KDyORbCTE-d6" }, "source": [ "Now plot the 2 dimensional vectors, with their sample values of even indices on the x axes, and their sample values of odd indices on the y axis. Each such pair is plotted as a ‘+’:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "id": "a_jcxzGkE-d6", "outputId": "fb04216e-d878-4380-b141-f297d24126d2" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(speech_signal[2::2], speech_signal[1:-1:2], '+')\n", "plt.title('2 Dimensional Vectors')\n", "plt.xlabel('Even Indices')\n", "plt.ylabel('Odd Indices');" ] }, { "cell_type": "markdown", "metadata": { "id": "0P5IKXKHE-d8" }, "source": [ "We can see: Since the odd and the even samples are similar to each other, we get a distribution of vector points near the **diagonal** of the space! Hence we also need to sample this space only near the diagonal, or more generally speaking, we should sample more densely near this diagonal.\n", "\n", "This shows that we need **fewer** reconstruction values or **codewords** as in the 1-dimensional case, which means fewer indices for them, and hence **fewer bits** for the quantized signal.\n", "\n", "Vector **Encoder** : Dividing our signal into signal vectors, find the nearest codeword, transmit its index to the decoder:
\n", "Vector **Decoder**: Read out the codevector from the codebook using the index from the encoder, **concatenate** the sequence of codevectors into a sample stream.\n", "\n", "An interesting property is that vector quantizers not only give an advantage for signals with memory, but also for signals without memory. In the scalar case, we can only sample an N-dimensional space on a regular grid, which is given by the coordinate axis of this space, whereas with VQ we can use something like a densest sphere packing in this N-dimensional space, such that we reduce the distance between reconstruction vectors (the so-called **codewords**), and hence reduce the Expectation of the quantisation error even in this case.\n", "\n", "The following image illustrates the densest sphere packing for the case of memoryless signals:
\n", "
\n", "\n", "
\n", " The case of a scalar quantizer:
\n", " \n", " The case of a vector quantizer with N=2:\n", " \n", "
\n", "\n", "Observe that in this way we get a denser “packing”, shifting the spheres in the gaps of the neighbouring layers, which results in a reduced reconstruction error." ] }, { "cell_type": "markdown", "metadata": { "id": "tutdSp4kE-d9" }, "source": [ "How do we do the **quantization in the N-dimensional case** in general? We choose N-dimensional reconstruction values, which we now call **codewords**. \n", "\n", "We use the **nearest neighbour** rule to map each N-dimensional **signal vector to** the **nearest codevector**. You could think of it as the neighbourhood as n-dimensional spheres around each codevector. Each codevector has an index and this index is then transmitted to the receiver, which uses this codevector as a reconstruction value. The collection of all codewords is called a **codebook**. The size of the codebook also determines how many bits are needed for their index. Usually codebooks are fixed, pre-defined, but there are also adaptive codebooks, for instance in speech coding." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "tLGOsVxPE-d-", "outputId": "d3a3bf06-33d5-4026-f42e-5831176ff74a" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "1wsNROR4E-eG" }, "source": [ "So how do we **obtain our codebook**, our codevectors?\n", "\n", "Basically like in the Lloyd-Max case, we are just extending it to the N-dimensional case. For N-dimensional case this is called the **Linde-Buzo-Gray (LBG)** Algorithm (see also the Book Introduction to Data Compression):\n", "\n", "This could look like the following:\n", "\n", "1) Start (**initialize** the iteration) with a **random** assignment of M N-dimensional **codewords**, $\\boldsymbol y_k$(bold-face to indicate a vector).\n", "\n", "2) Using the codewords, compute the **decision boundary** $\\boldsymbol b_k$(bold face to indicate that a line or hyper-plane) as the set of **all** points with equal distance between 2 reconstruction values / codewords (the such constructed regions are also called **Voronoi-regions**), using the **nearest neighbour** rule. To assign a vector to a specific region, we use the nearest neighbour rule directly. We simply test which **codeword is closest** to the observed vector.\n", "\n", "3) Using the pdf of our signal and the decision boundary (Voronoi region), compute new **codewords** $\\boldsymbol y_k$ as **centroids (center of mass) or conditional expectation** over the quantisation areas (the Voronoi region). The same as in 1 dimension, just here the integral is going over N dimension.\n", "\n", "4) Go to 2) until update is sufficiently small (< epsilon).\n", "\n", "Here we assume we have a pdf of the signal. Observe that here we would need a **multi dimensional pdf or probability distribution**, which is difficult to obtain, since the volume of the space increases exponentially with its dimension, but the number of vectors rather decreases. Hence we get less dense signal points in high dimensional space, which means a pdf is difficult to estimate.\n", "\n", "Hence, instead of a multi dimensional pdf, we often only have a so-called **training set** to obtain our codebook. The training set is a set of signals which have statistics like our targeted signals, but which are **only** used to “train” (using LBG) our codebook vectors. To **test** resulting vector quantizer, we should use signals which are **not** in the training set. \n", "\n", "We can still use this same algorithm as with the pdf, we just have to compute the **centroid** or conditional expectation differently. Assume we have L samples in our Voronoi neighbourhood region, and want to compute the centroid of this Voronoi region. We could do that by assigning each signal vector **x(k)** of the training set to a probability of 1/L (we assume each vector is equally likely), and then just use the above formula for the centroid, replacing the integrals by sums. This then results in\n", "\n", "$$\n", "\\boldsymbol y_k =\\frac {\\sum _{ i \\in Voronoi region k } \\boldsymbol x(i)} {Number of signal vectors \\in Voronoi region}\n", "$$\n", "\n", "This is simply the **average** of all **observed training vectors** in our Voronoi region. The sum contains the indices I of signal vevtors x(i) which are closest to codevector k.
\n", "This is then part of our iteration.\n", "\n", "After training the codebook with the training set (only for training or learning to obtain the codebook), we have a (fixed) codebook which we can then use for encoding our data. Observe that the training set should be different from our data.
\n", "The resulting Vector Quantizer could look like in following image for dimension N=2, where the blue lines are the boundaries of the Voronoi regions (consisting of our $\\boldsymbol b_k$), the red stars are the codevectors $\\boldsymbol y_k$, and the green dots the signal vectors:
\n", "\n", "
\n", " \n", " \n", "(From: http://www.data-compression.com/vq.html)\n", "\n", "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "rz9uYFwCE-eG" }, "source": [ "**Example.** Determine the codebook vectors of a LBG vector quantizer for dimension N=2, and number of codevectors M=2, after one iteration for two vectors with the given training set **x** = [3,2,4,5,7,8,8,9]. Initial codebook vectors are y1=[1,2], y2 =[5,6].\n", "\n", "The training set vectors are hence: [3,2], [4,5], [7,8], [8,9]." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "8KyircPKE-eH", "outputId": "40bfc898-2b7c-4508-edb4-0785980f88e2" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "JZz2_GxVE-eJ" }, "source": [ "The solution follows the algorithm which was explained in the lecture:\n", "\n", "1) We start with the given **randomly assigned codebook vectors $\\boldsymbol y_k$**.\n", "\n", "2) The next step is to calculate **decision boundary** $\\boldsymbol b_k$ using the **nearest neighbour** rule to obtain the Voronoi region. This results in a set of midpoints. These mid-points then form the Voronoi boundary line, which is perpendicular to the connecting line of the 2 codewords. The direct mid-point is:
\n", "$$\\boldsymbol b_k=\\frac{\\boldsymbol y_1+ \\boldsymbol y_2}{2}$$\n", "\n", "$\\boldsymbol b_k$ in our case is the line going through the point [3,4], the line consisting of **all points** which have **equal distance** to the neighboring codevectors. Now we can draw the given training set vectors, codebook vectors, and the Voronoi boundaries. Observe that the computation of the **boundary line** of the mid-points is useful only for drawing this picture, but in a computational implementation we don't need to compute it, but use the nearest neighbour rule directly." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 320 }, "id": "5_rSJ8L1E-eK", "outputId": "1d8660e9-5838-4c99-fdb4-6f33df6828c4" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAATIAAAEvCAYAAADGjk2AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1RklEQVR4nO3deVzVVd7A8c8BUTbFNRcwXCoXEFlMUVMxS5tqSu2ZlzmWqaPWaDLWZOaSYZPZambzVE9W1rwynR5TnymbnEosLTVESNzILFIU18RQUFnO88cBxAC5wL33d5fv+/W6Ly73/u7vfO8FvpxzfmdRWmuEEMKd+VgdgBBC1JckMiGE25NEJoRwe5LIhBBuTxKZEMLtSSITQri9Bo44acuWLXWHDh1sPv7cuXMEBQU5IhQp34XL9vbyvfm917X81NTUk1rrVpWe0Frb/RYXF6drIzk5uVbH25s3l+/N793q8r35vde1fGC7riLnSNNSCOH2JJEJIdyeJDIhhNtzSGd/VQoLC8nOzub8+fOVngsJCWHv3r3OCkXKt7Fsf39/wsLC8PPzc3JUQtSO0xJZdnY2jRs3pkOHDiilLnsuLy+Pxo0bOyuUSry5/OrK1lpz6tQpsrOz6dixowWRCWE7pzUtz58/T4sWLSolMeGalFK0aNGiyhq0EK7GqX1kksTci/y8hLuQzn4hhFOtTTtM/2c2kHH4DP2f2cDatMP1PqfT+siEEGJt2mFmrc6goLAY2sPh3AJmrc4AYHhMaJ3P6zU1slOnThEdHU10dDRt2rQhNDS0/PuLFy/afJ5+/frZ5Rh7y83N5dVXX3V6uULUxvPrM00Sq6CgsJjn12fW67xek8hatGhBeno66enpPPDAAzz00EPl3zds2LD8OK01JSUl1Z7nm2++qbEsW46xN0lkwh0cyS2o1eO2ctlEVtaO7vjYOru1o6vz888/061bN6ZMmUJsbCyHDh1i+PDhxMXFERERwRtvvFF+bHBwMABZWVl069aNSZMmERERwdChQykoKLD5mL/97W907dqVm2++mfHjx/PCCy9UiuvcuXPcdttt9OzZk8jISP75z38C8N5779G7d2+io6O5//77KS4u5rHHHuPAgQNER0czY8aMSucaPHgwn332GQBz584lMTHRjp+gELZp1zSgVo/byiUTWVk7+nBuAZpL7WhHJrPMzEzGjh1LWloa4eHhvP3226SmprJ9+3aWLFnCqVOnKr1m//79TJ06ld27d9O0aVM+/PBDm47Zvn07H374IWlpaaxevZq0tLQqY/r0009p164d3333Hbt27eKWW25h7969/POf/+Trr78mPT0dX19fli9fzjPPPEPnzp1JT0/n+eefr3Su+fPns2DBApYvX05aWhovvfRS/T80IWppxrAuBPj5XvZYgJ8vM4Z1qdd5XTKROaodfSXh4eHEx8eXf79kyRJ69uxJfHw8hw4dYv/+/ZVe07FjR6KjowGIi4sjKyvLpmM2b97MnXfeSUBAAI0bN+Z3v/tdlTH16NGDzz//nJkzZ7Jp0yZCQkL44osvSE1N5frrryc6OpovvviCH3/8scb3N3DgQLTWLFq0iJUrV+Lra36ZpkyZUuNrhbCX4TGhLBzZg9DSGlho0wAWjuxRr45+cNGrlo5qR19JxXWRNm7cyOeff86WLVsIDAwkISGhyoGhjRo1Kr/v6+tb3mys6Rht4xZ81113HampqXzyySfMmjWLoUOH0qxZM+677z4WLlx42bFVJdGKMjIyyMnJoWXLluUj+fPz82nSpAnJycl8+umnzJ8/H39/f5tiE6KuhseEMjwmlI0bNzJtTIJdzumSNTJHtaNtdebMGZo1a0ZgYCD79u1j69atdj3/DTfcwEcffcT58+c5e/Ys69evr/K4I0eOEBgYyD333MMjjzzCjh07GDJkCKtWreL48eMA/PLLL/z88880btyYvLy8Ks+Tk5PDmDFj+L//+z+CgoLKy9uxYwcZGRlkZmby7LPPShITbsslE5mj2tG2uuWWWygqKiIqKorHH3/8sianPVx//fXccccd9OzZk5EjRxITE0NISEil4zIyMso79RcsWMDcuXPp3r07Tz31FEOHDiUqKoqbb76ZnJwcWrRoQf/+/YmMjLyssz8/P5+RI0fy4osv0q1bNx5//HGSkpIASElJoVevXpauEiqEXVS12mJ9b1WtELtnz55qV3389ddfKz22Zke27rfwC91h5se638Iv9Jod2bVcS9J2VZXvaHl5eVprrc+dO6djYmJ0amqq02OYOHGizs3N1bNnz9ZfffVVlcdc6edmD+64SqknlO2u5VPNCrEu2UcGl9rRnmry5Mns2bOH8+fPc/fddxMbG+v0GJYuXUpeXh4LFixwetlC2JPLJjJP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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Python Plot\n", "plt.figure(figsize=(5,5))\n", "train=np.array([[3,2], [4,5], [7,8],[8,9]])\n", "codebooks = np.array([[1,2], [5,6]])\n", "x_train, y_train = train.T\n", "x_codebooks, y_codebooks = codebooks.T \n", "plt.scatter(x_train, y_train, label='Training set $x_k$')\n", "plt.scatter(x_codebooks, y_codebooks, label='Codewords $y_k$',color='r')\n", "plt.legend()\n", "plt.grid()\n", "y=lambda x : -x+7\n", "plt.plot([1,5],[2,6],color='r', alpha=0.3)\n", "plt.plot(np.arange(0,8,1),y(np.arange(0,8,1)),'r--', alpha=0.8)\n", "plt.text(1,1,'Voronoi region 1')\n", "plt.text(3,7,'Voronoi region 2');" ] }, { "cell_type": "markdown", "metadata": { "id": "vvXTR34QE-eN" }, "source": [ "3) The next step is to compute the new **codewords** $\\boldsymbol y_k$ as a **centroid or conditional expectation** over a quantization area or Voronoi region. In order to do that, the formula for the trainings set from the lecture should be used:
\n", "\n", "$$\n", "\\boldsymbol y_k= \\frac {\\sum _{i \\in Voronoiregion k} \\boldsymbol x(i)}{Number of signal vectors \\in Voronoiregion}\n", "$$\n", "\n", "\n", "In order to find out in **which Voronoi region** a vector is located, we use the nearest neighbour rule. For that we need to calculate the **Euclidean distances** between all the **training set vectors** and **codebook vectors** and then decide which training vectors are closer to which codebook vector.\n", "\n", "For each training set vector we compute to which codebook vector it has the closest distance, with the Euclidean distances calculated in the following way:\n", "\n", "
    \n", "
  • For trainigs set vector $\\boldsymbol x_1=[3,2]$: \n", "
      \n", "
    • distance to codebook vector $\\boldsymbol y_1=[1,2]$: $d_1=\\sqrt{(3-1)^2+(2-2)^2}=\\sqrt{4}$
    • \n", "
    • distance to codebook vector $\\boldsymbol y_2 =[5,6]$: $d_2=\\sqrt{(3-5)^2+(2-6)^2}=\\sqrt{20}$\n", "
      Hence $\\boldsymbol y_1$ is closer.
    • \n", "
  • \n", "
  • For trainigs set vector $\\boldsymbol x_2=[4,5]$:\n", "
      \n", "
    • distance to codebook vector $\\boldsymbol y_1=[1,2]$: $d_1=\\sqrt{(4-1)^2+(5-2)^2}=\\sqrt{18}$
    • \n", "
    • distance to codebook vector $\\boldsymbol y_2 =[5,6]$: $d_2=\\sqrt{(5-4)^2+(6-5)^2}=\\sqrt{2}$\n", "
      Hence $\\boldsymbol y_2$ is closer.
    • \n", "
  • \n", "
  • For trainigs set vector $\\boldsymbol x_3=[7,8]$:\n", "
      \n", "
    • distance to codebook vector $\\boldsymbol y_1=[1,2]$: $d_1=\\sqrt{(7-1)^2+(8-2)^2}=\\sqrt{72}$
    • \n", "
    • distance to codebook vector $\\boldsymbol y_2 =[5,6]$: $d_2=\\sqrt{(7-5)^2+(8-6)^2}=\\sqrt{8}$\n", "
      Hence $\\boldsymbol y_2$ is closer.
    • \n", "
  • \n", "
  • For trainigs set vector $\\boldsymbol x_4=[8,9]$:\n", "
      \n", "
    • distance to codebook vector $\\boldsymbol y_1=[1,2]$: $d_1=\\sqrt{(8-1)^2+(9-2)^2}=\\sqrt{98}$
    • \n", "
    • distance to codebook vector $\\boldsymbol y_2 =[5,6]$: $d_2=\\sqrt{(8-5)^2+(9-6)^2}=\\sqrt{18}$\n", "
      Hence $\\boldsymbol y_2$ is closer.
    • \n", "
  • \n", "
\n", " \n", " \n", "Now we can compute the **centroid or conditional expectation** for each of the 2 Voronoi regions:\n", "\n", "- **Voronoi region 1** only contains trainings set vector $\\boldsymbol x1=[3,2]$, hence its centroid and new codebook vector is identical to $\\boldsymbol x_1$ and we get the **new codebook vector 1** as:\n", "\n", "$$\\boldsymbol y_1=[3,2]$$\n", "\n", "- **Voronoi region 2** contains the remaining 3 vectors. We obtain its centroid by averaging over them, and obtain the **new codebook vector 2** as: \n", "\n", "$$\n", "\\boldsymbol y_2=[\\frac{4+7+8}{3}, \\frac{5+8+9}{3}]=[6+\\frac{1}{3}, 7+\\frac{1}{3}]\n", "$$\n", "\n", "So the updated codebook vectors will look in the following way:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 320 }, "id": "6rpGAOVgE-eN", "outputId": "167ad446-ab80-4cad-a42f-598c9a041a00" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Python Plot\n", "plt.figure(figsize=(5,5))\n", "train=np.array([[3,2], [4,5], [7,8],[8,9]])\n", "codebooks = np.array([[1,2], [5,6]])\n", "x_train, y_train = train.T\n", "x_codebooks, y_codebooks = codebooks.T \n", "plt.scatter(x_train, y_train, label='Training set $x_k$')\n", "plt.scatter(x_codebooks, y_codebooks, label='Codewords $y_k$',color='r')\n", "plt.legend()\n", "plt.grid()\n", "y=lambda x : -x+7\n", "plt.plot([1,5],[2,6],color='r', alpha=0.3)\n", "plt.scatter(6+1/3,7+1/3,color='r')\n", "plt.plot(np.arange(0,8,1),y(np.arange(0,8,1)),'r--', alpha=0.8)\n", "plt.text(1,1,'Voronoi region 1')\n", "plt.text(3,7,'Voronoi region 2');\n", "plt.annotate(\"\", xy=(3-0.2,2), xytext=(1+0.2, 2), arrowprops=dict(arrowstyle=\"->\"))\n", "plt.annotate(\"\", xy=(6+1/3-0.1,7+1/3-0.1), xytext=(5+0.1, 6+0.1), arrowprops=dict(arrowstyle=\"->\"));" ] }, { "cell_type": "markdown", "metadata": { "id": "sA1hteZ4E-eP" }, "source": [ "4) Go back to step 2) and repeat the procedure until the result does not change much anymore." ] }, { "cell_type": "markdown", "metadata": { "id": "rgrBJeFCE-eQ" }, "source": [ "### Vector Quantization in an Encoder and Decoder" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "iX-RXYglE-eQ", "outputId": "f1c4554e-b3af-4e7b-f42d-8c2784e164a5" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "bhLd4jZ-E-eT" }, "source": [ "- Both, encoder and decoder, have the same codebook in their memory.
\n", "- In an Encoder we first convert our signal sample stream to our vectors.
\n", "- Then we map those vectors to the nearest code vectors.
\n", "- We transmit the indices of those codevectors to the decoder.
\n", "- The decoder converts the indices back to the codevectors.
\n", "- The codevectors are then concatenated and converted back into a stream of samples.

\n", "\n", "**Example:**\n", "Encoder:
\n", "stream to vectors:
\n", "x: [3,4],[7,8],...
\n", "Vectors to codevectors:
\n", "y: [4,5],[6.7]
\n", "to indices:
\n", "k: 4, 5
\n", "Decoder:
\n", "Indices to vectors:
\n", "y: [4,5],[6,7]
\n", "to stream of samples:
\n", "xrek: 4,5,6,7" ] }, { "cell_type": "markdown", "metadata": { "id": "Llf-4alQE-eT" }, "source": [ "### Python Example: Vector Quantization in an Encoder and Decoder" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "AxLtS_vpE-eU", "outputId": "d2b3fd43-1c2e-48a3-eb4c-6ae7f2d5b54a" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "G_1L0w5uE-eX" }, "source": [ "**Codebook**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "C2S_VyR3E-eX", "outputId": "b3a8a450-1a85-4e1b-bdde-ec0821d3ab40" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Training Set\n", "training_signal , sr = lbr.load(path+'/audio/Iron Maiden - Aces High.mp3', sr=Fs, offset=0, duration=28.8)\n", "# Normalize Audio\n", "training_signal/=np.abs(training_signal).max()\n", "# Plot Audio\n", "plt.figure()\n", "plt.plot(training_signal)\n", "plt.title('Iron Maiden - The Number of the Beast (Intro)')\n", "plt.xlabel('samples n')\n", "plt.ylabel('Amplitude (Normalized)');\n", "plt.grid()\n", "# Listen\n", "display(ipd.Audio(training_signal, rate = Fs ))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "id": "p9qwl8x9E-eb", "outputId": "717b3bfd-1da9-48c4-e3d0-f8daf5fa06f9" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 2-Dimensional Vector Space of Samples\n", "plt.figure()\n", "training_data=training_signal.reshape(-1,2).astype('double')\n", "plt.plot(list(zip(*training_data))[0],list(zip(*training_data))[1],'+')\n", "plt.title('2 Dimensional Vectors Training Signal')\n", "plt.xlabel('Even Indices')\n", "plt.ylabel('Odd Indices');" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fFXTizQHE-ed", "outputId": "22a8cf74-107e-4541-c948-a17eb93832ef" }, "outputs": [ { "data": { "text/plain": [ "KMeans(max_iter=1000)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create Codebook\n", "np.random.seed(seed=1)\n", "from sklearn.cluster import KMeans\n", "\n", "N = 3 #Number of bits\n", "n_clusters = 2**N\n", "\n", "kmeans = KMeans(init='k-means++', n_clusters=n_clusters, n_init=10, max_iter=1000)\n", "kmeans.fit(training_data)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 296 }, "id": "GXmmV0ZkE-ef", "outputId": "5b07a439-7e7b-4e11-a592-a73f91e8f142" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Codebook and Voronoi Visualization\n", "# Plot From(https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_digits.html#sphx-glr-auto-examples-cluster-plot-kmeans-digits-py)\n", "\n", "# Step size of the mesh. Decrease to increase the quality of the VQ.\n", "h = .01 # point in the mesh [x_min, x_max]x[y_min, y_max].\n", "\n", "# Plot the decision boundary. For that, we will assign a color to each\n", "x_min, x_max = training_data[:, 0].min() - 1, training_data[:, 0].max() + 1\n", "y_min, y_max = training_data[:, 1].min() - 1, training_data[:, 1].max() + 1\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", "\n", "# Obtain labels for each point in mesh. Use last trained model.\n", "Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])\n", "\n", "# Put the result into a color plot\n", "Z = Z.reshape(xx.shape)\n", "plt.figure()\n", "plt.clf()\n", "plt.imshow(Z, interpolation='nearest',\n", " extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n", " cmap=plt.cm.Paired,\n", " aspect='auto', origin='lower')\n", "\n", "plt.plot(training_data[:, 0], training_data[:, 1], 'k.', markersize=2)\n", "\n", "# Plot the centroids as a white X\n", "centroids = kmeans.cluster_centers_\n", "plt.scatter(centroids[:, 0], centroids[:, 1],\n", " marker='x', s=169, linewidths=3,\n", " color='m', zorder=10)\n", "plt.title('K-means clustering on 2-Dimension Vector Space\\n'\n", " 'Centroids are marked with magenta cross')\n", "plt.xlim(x_min+0.9, x_max-0.9)\n", "plt.ylim(y_min+0.9, y_max-0.9);\n", "#plt.xticks(())\n", "#plt.yticks(());" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "lBbg9opxE-ei", "outputId": "1adc2461-5dc1-4a14-8073-614fa988abed" }, "outputs": [ { "data": { "text/plain": [ "{0: [-0.028647572495907964, -0.028705219690788066],\n", " 1: [0.1989551709518477, 0.19882574005699363],\n", " 2: [-0.215879121329899, -0.21586006326004645],\n", " 3: [-0.10109573194081274, -0.10085536819483747],\n", " 4: [0.08805574047341504, 0.08807161063942998],\n", " 5: [-0.4132903733285011, -0.41357361385348773],\n", " 6: [0.01941490391813982, 0.01938874371938477],\n", " 7: [0.39100170265545986, 0.3915001479088411]}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Codebook\n", "centroids\n", "codebook_dict = {ind : val for ind,val in enumerate(centroids.tolist())}\n", "codebook_dict" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 312 }, "id": "LIwzrzSUE-ek", "outputId": "7ea44eba-45fd-4535-c00f-43048cbe6864" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[6 6 6 ... 0 6 4]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Indices of Codewords\n", "#k = kmeans.labels_\n", "k = kmeans.predict(training_data)\n", "plt.figure()\n", "plt.plot(k)\n", "print(k)\n", "plt.grid()\n", "plt.title('Coded Signal')\n", "plt.ylabel('Indices')\n", "plt.xlabel('Samples n');" ] }, { "cell_type": "markdown", "metadata": { "id": "yYP_aOR0E-em" }, "source": [ "**Decoder**" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "xzL4W98kE-em", "outputId": "516470e8-11d3-459f-c8d0-ebd31af25454" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Decode Indices to Vectors\n", "decoded=np.array([codebook_dict[ind] for ind in k.tolist()])\n", "decoded/=np.abs(decoded).max()\n", "\n", "#Vectors to Stream of Samples\n", "decoded=decoded.reshape(-1,)\n", "\n", "# Plot Decoded Samples\n", "plt.figure()\n", "plt.plot(decoded)\n", "plt.grid()\n", "plt.title('Decoded Samples')\n", "plt.xlabel('Samples n')\n", "plt.ylabel('Amplitude');\n", "\n", "# Listen to Decoded Samples\n", "ipd.Audio(decoded, rate=Fs)" ] }, { "cell_type": "markdown", "metadata": { "id": "zvL6HfljE-eq" }, "source": [ "**Encode / Decode using Another Signal**" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "hide_input": true, "id": "g8JkuU9uE-eq", "outputId": "27cf6cf0-a907-4e6f-d55e-53cb9d272361" }, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "EMqva4XtE-et", "outputId": "11a1041f-02af-4711-9ef9-9121ab42b8de" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Test Signal\n", "test_signal , sr =lbr.load(path+'/audio/Iron Maiden - The Number Of The Beast.mp3', sr=Fs, offset=13, duration=12)\n", "# Normalize Audio\n", "test_signal/=np.abs(test_signal).max()\n", "# Plot Test Signal\n", "plt.figure()\n", "plt.plot(test_signal)\n", "plt.grid()\n", "plt.title('Test Signal')\n", "plt.xlabel('Samples n')\n", "plt.ylabel('Amplitude Normalized')\n", "# Listen to Test Signal\n", "display(ipd.Audio(test_signal, rate=Fs))" ] }, { "cell_type": "markdown", "metadata": { "id": "FFvAoSjEE-ex" }, "source": [ "Mid-Rise Quantizer" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "WRVsIRkhE-ex", "outputId": "47cb88b1-053a-47b1-f189-fb61d6882939" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Define Step Size\n", "stepsize=(1.0-(-1.0))/(2**N)\n", "# Mid-Rise Quantization\n", "speech_quant_rise_ind=np.floor(test_signal/stepsize)\n", "# Mid-Rise De-Quantization\n", "speech_quant_rise_rec=speech_quant_rise_ind*stepsize+stepsize/2\n", "# Normalize\n", "speech_quant_rise_rec/=np.abs(speech_quant_rise_rec).max()\n", "# Plot De-Quantized Signal\n", "plt.figure()\n", "plt.plot(speech_quant_rise_rec)\n", "plt.title('De-Quantized Signal (Mid-Riser)')\n", "plt.xlabel('Samples n')\n", "plt.ylabel('Amplotude')\n", "plt.grid()\n", "# Listen to De-Quantized Signal\n", "ipd.display(ipd.Audio(speech_quant_rise_rec, rate=Fs))\n" ] }, { "cell_type": "markdown", "metadata": { "id": "r9vsNFeHE-e0" }, "source": [ "Vector Quantization: Encoder" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "id": "alkGKEsKE-e0", "outputId": "a660af3c-6180-4e58-a910-6819fc21f549" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Stream to Vectors\n", "test_signal_vec=test_signal.reshape(-1,2).astype('double')\n", "# Vectors to Indices\n", "quantized = kmeans.predict(test_signal_vec)\n", "# Plot Quantized Indices\n", "plt.figure()\n", "plt.plot(quantized)\n", "plt.grid()\n", "plt.title('Quantized Indices')\n", "plt.ylabel('Indices')\n", "plt.xlabel('Samples n');" ] }, { "cell_type": "markdown", "metadata": { "id": "BnpvchOJE-e2" }, "source": [ "Vector Quantization: Decoder" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 353 }, "id": "SQwK_lZqE-e2", "outputId": "05d197e8-d1fa-4ed8-954a-cfddf210738e" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Indices to Vectors\n", "decoded=np.array([codebook_dict[ind] for ind in quantized.tolist()])\n", "decoded/=np.abs(decoded).max()\n", "# Vectors to Stream of Samples\n", "decoded=decoded.reshape(-1,)\n", "# Plot De-Quantized Signal\n", "plt.figure()\n", "plt.plot(decoded)\n", "plt.grid()\n", "plt.title('De-Quantized Signal (VQ)')\n", "plt.xlabel('Samples n')\n", "plt.ylabel('Amplitude (Normalized)')\n", "# Listen to de-Quantized Signal\n", "ipd.Audio(decoded, rate=Fs)" ] }, { "cell_type": "markdown", "metadata": { "id": "lQxdlyegE-e5" }, "source": [ "Quantization Error" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "id": "KgiqZX7uE-e6", "outputId": "be597352-870b-4af8-d27a-7d6d944654e1" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAD4CAYAAAAQP7oXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAA0lklEQVR4nO3de3gTVfrA8e9pCxQplwKKCEoRQUQsULrALqJ10VWQBVFRUFfUVRZddlddXHF9Vqqru4rXn1dEQGTVRRFRRBRdJIpyEZBauV+LVG7KpVKgQNvz+2PSNEmTdJLMJJP0/TxPnsxMzpzzZpLMO2duUVprhBBCCDNS4h2AEEKIxCFJQwghhGmSNIQQQpgmSUMIIYRpkjSEEEKYlhbvAEJp2bKlzsrKimjew4cP06hRI2sDsoiTYwOJLxpOjg0kvmg4OTaojm/lypU/aa1Ptq0hrbVjHz179tSRWrhwYcTz2s3JsWkt8UXDybFpLfFFw8mxaV0dH7BC27helt1TQgghTJOkIYQQwjRJGkIIIUxz9IFwIWLtxIkTFBcXU1ZWFtH8TZs2Zd26dRZHZR2JL3JOiy09PZ22bdtSr169mLYrSUMIL8XFxTRu3JisrCyUUmHPf+jQIRo3bmxDZNaQ+CLnpNi01uzbt4/i4mLat28f07Zl95QQXsrKymjRokVECUOIWFFK0aJFi4h7xNGQpCGEH0kYIhHE63sqScNJdn8HO5bHOwohhAhKkoaTTDwfplwMa98H+Z+TOqu4uJghQ4bQsWNHzjzzTMaMGcOxY8csb8flcrF48WLP+MSJE5k+fXrc6vFXVFREw4YN6d69u+dhRb3B5OXlccYZZ6C9fntXXHEFGRkZAOzatYurr7466LwrVqyoMd3lctG0aVN69OhB586dGTt2rOe1OXPm8Oijj1r8LuwnScNqRV/BsUPR1fH2jbDhI2viEQlFa82VV17JFVdcwaZNm9i0aRNHjx7lb3/7m+Vt+a/sR48ezY033hi3egLp0KEDBQUFnkegeisqKkKOB6K1prKyssb0Zs2a8dVXXwFw8OBBdu3a5XmtdevWvPPOO+G+Bfr168eqVatYtWoVc+fO9dQ/ePBgxo0bF3Z98SZJw0qH98G0gfDvthbU9WP0dURiVyF5riGwf1t82q/jPvvsM9LT07n55psBSE1N5emnn2b69OmUlpYybdo0xowZ4yk/aNAgXC4XALfffju5ubmce+65jB8/3lMmKyuL8ePHk5OTQ58+fVi/fj1FRUVMnDiRp59+mu7du7No0SLy8/N54okn2Llzp8/WfWpqKtu3b+eDDz6gd+/e9OjRg4svvpg9e/aErAegoKCAPn36kJ2dzdChQzlw4ABgbJnfe++99OrVi06dOrFo0aKwllNGRgYPPPAAvXv3ZsmSJTXGn3rqKbp27UrXrl155plnAKPncs4553DHHXeQk5PDjh07atQ7fPhwZsyYAcC7777LlVde6Xlt+/btdO3aFYCjR48yfPhwsrOzufbaazl69GitMVf1mn744QcAn89y5syZdO3alW7dunHBBRcARvK75557+MUvfkF2djYvv/xyWMvILnLKrZUWPRn5vGUl1sURjYI3jOeNH0Of2+MbS5w9+MEa1u78Oax5KioqSE1NDfp6l9OaMP635wZ9fc2aNfTs2dNnWpMmTcjKymLz5s0h237kkUdo3rw5FRUV9O/fn8LCQrKzswFo2bIl33zzDU899RRPPPEEkydPZvTo0WRkZHh2mSxYsACA0047jYKCAgBeeOEFPv/8c9q1a0eTJk1YunQpSikmT57MhAkTePLJJ4PWA3DjjTfy3HPPceGFF/LAAw/w4IMPelbi5eXlfP3118ybN48HH3yQ//3vfzXe05YtW+jevbtn/LnnnqNfv34cPnyYrl278tBDDwH4jK9cuZJXX32VZcuWobWmd+/eXHjhhWRmZrJhwwZeffVVXnzxxYDLsH///tx2221UVFQwY8YMJk2axD//+c8a5V566SVOOukkCgsLKSwsJCcnJ+RnA3DgwAE2bdrkSQreHnroIebPn0+bNm04ePAgAFOmTKFp06YsX76cY8eO0bdvX37zm9/E/BRbf5I0rLT0Bd/xHzdAs3ZQL732eR89w56YRELRWgc8K0abOMb19ttvM2nSJMrLy9m1axdr1671JI2qLebu3bszb948U7F89dVXTJ482dMLKC4u5tprr2XXrl0cP3681pVXSUkJBw8e5MILLwRg5MiRDBs2zPN6VUw9e/akqKgoYB1Vu6f8paamctVVVwUc//LLLxk6dKjnjrRXXnklixYtYvDgwbRr144+ffoEjTk1NZXzzz+ft956i6NHjxLsLttffPEFf/7znwHIzs72LOdAFi1aRHZ2Nhs2bGDcuHGceuqpNcr07duXm266iWuuucazXD755BMKCws9u8RKSkrYtGmTJI2EdqwU3roeLn8Kdq7ye+0QvNALzh0Kw6aFX/feMK88rSiHz/4JF+dDNKfiLZtoPOua+3vrmlA9gmCivQDs3HPPZdasWT7Tfv75Z/bs2cPZZ5/N6tWrffbFV52nv23bNp544gmWL19OZmYmN910k885/A0aNACMlWJ5eXmtcezatYvf//73zJkzx3Mg+E9/+hN33303gwcPxuVykZ+fH/H7jCQmb+np6T49Ou/xUAnWzK3Nhw8fztChQ2t9f4GS++zZs3nwwQcBmDx5MmAc05g7dy4bN27k/PPPZ+jQoT69JzBOHli2bBkffvgh3bt3p6CgAK01zz33HJdeemmtMceSHNPwdvwIvD8Gjuw3V37lNNjqgk/+AbN+7/vaCfcPNtID2steMl/22CH4Zwv46hl464bI2vM3/+/W1CPC0r9/f44cOeI5S6iiooK//vWvjBkzhoYNG5KVlUVBQQGVlZXs2LGDr7/+GjASS6NGjWjatCl79uzho49q/941btyYQ4dqnrRx4sQJrrnmGh577DE6derkmV5SUkKbNm0AeO2112qtp2nTpmRmZnp6Kv/5z388vQ47XXDBBbz33nscOXKEw4cPM3v2bPr162d6/n79+nHfffcxYsSIkG288YaxK3f16tUUFhYCMHToUM9B+9zcXJ95OnXqxH333cdjjz1Wo74tW7bQu3dvHnroIVq2bMmOHTu49NJLeemllzhx4gQAGzdu5PDhw6bfh10kaXgreANW/QeecXc1D+2G/KbGw9+zOfDJ/cbwzz/UfP14qfFcXmYkFTv9tKl6eP1ce9sStlJKMXv2bN555x06duxIixYtSElJ4f77je9a3759ad++Peeddx5jx4717Evv1q0bPXr04Nxzz+WWW26hb9++tbb129/+ltmzZ3sOYFdZvHgxy5cvZ/z48Z6D4Tt37iQ/P59hw4bRr18/WrZsWWs9YCSXe+65h+zsbAoKCnjggQfCWh5VxzSqHs8++2yt8+Tk5HDTTTfRq1cvevfuza233kqPHj1Mt6mUYuzYsT7v0d/tt99OaWkp2dnZTJgwgV69epmqe/To0XzxxRds2+Z7osk999zDeeedR9euXbngggvo1q0bt956K126dCEnJ4euXbvyhz/8IewemR2U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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "quant_error_rise = speech_quant_rise_rec - test_signal\n", "quant_error_vq = decoded - test_signal\n", "plt.figure()\n", "plt.plot(quant_error_rise, label='Quantization Error Mid-Rise')\n", "plt.plot(quant_error_vq, label='Quantization Error VQ')\n", "plt.legend()\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "PrdpoYSME-e8", "outputId": "26975ef3-a390-40b7-e90d-c2942b75e3d2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean Squared Quantization Error - Mid-Riser: 0.009268379\n", "Mean Squared Quantization Error - VQ: 0.0003092007330044081\n" ] } ], "source": [ "print('Mean Squared Quantization Error - Mid-Riser:',((speech_quant_rise_rec - test_signal)**2).mean())\n", "print('Mean Squared Quantization Error - VQ:',(((decoded - test_signal)**2)**2).mean())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "name": "ADSP_05_VQ_LBG.ipynb", "provenance": [] }, "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.8" }, "livereveal": { "rise": { "height": "90%", "width": "90%" }, "scroll": true, "theme": "sky", "transition": "zoom" } }, "nbformat": 4, "nbformat_minor": 1 }