\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": "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\n",
"text/plain": [
"