{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# Random 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": [ "## Auto-Correlation Function\n", "\n", "[Correlation](https://en.wikipedia.org/wiki/Correlation_and_dependence) is a statistical measure for the dependencies between random processes or between the samples of one random process. The [auto-correlation function](https://en.wikipedia.org/wiki/Autocorrelation) (ACF) characterizes the temporal dependencies within one random signal $x[k]$. It is an important measure for the analysis of signals in communications engineering, source coding and system identification." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definition\n", "\n", "For a continuous-amplitude real-valued random signal $x[k]$ the ACF is defined by the [second-order ensemble avarage](ensemble_averages.ipynb#Second-Order-Ensemble-Averages) of the signal at two different time-instants $k_1$ and $k_2$\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[k_1, k_2] = E\\{ x[k_1] \\cdot x[k_2] \\}\n", "\\end{equation}\n", "\n", "Under the assumption of [wide-sense stationarity](stationary_ergodic.ipynb#Wide-Sense-Stationary-Random-Processes) (WSS) the ACF does only depend on the difference $\\kappa = k_1 - k_2$ between the considered sample indexes\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[\\kappa] = E\\{x[k] \\cdot x[k-\\kappa] \\}\n", "\\end{equation}\n", "\n", "where $\\kappa$ is commonly chosen as sample index instead of $k$ in order to indicate that it denotes a shift/lag. The ACF quantifies the similarity of a signal with a shifted version of itself. It has high values for high similarity and low values for low similarity.\n", "\n", "If the process is additionally [wide-sense ergodic](stationary_ergodic.ipynb#Wide-Sense-Ergodic-Random-Processes), the ACF can be computed by averaging along one sample function\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[\\kappa] = \\lim_{K \\to \\infty} \\frac{1}{2K + 1} \\sum_{k=-K}^{K} x[k] \\cdot x[k-\\kappa]\n", "\\end{equation}\n", "\n", "Note that the normalization on the left side of the sum is discarded in some definitions of the ACF. Above summation resembles strongly the definition of the [discrete convolution](https://en.wikipedia.org/wiki/Convolution#Discrete_convolution). For a random signal $x_N[k] = \\text{rect}_N[k] \\cdot x[k]$ of finite length $N$ and by exploiting the properties of a wide-sense ergodic random process one yields\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[\\kappa] = \\frac{1}{N} \\sum_{k=0}^{N-1} x_N[k] \\cdot x_N[k-\\kappa] = \\frac{1}{N} \\; x_N[k] * x_N[-k]\n", "\\end{equation}\n", "\n", "where the ACF $\\varphi_{xx}[\\kappa] = 0$ for $|\\kappa| > N-1$. Hence, the ACF can be computed by (fast) convolution of the random signal with a time reversed version of itself. \n", "\n", "Note in numerical implementations (e.g. MATLAB, Python), the computed ACF is stored in a vector of length $2 N - 1$. The positive indexes $0, 1, \\dots, 2 N - 1$ of this vector cannot be directly interpreted as $\\kappa$. The indexes of the vector have to be shifted by $N-1$ for a proper interpretation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties\n", "\n", "The following properties of the ACF can be deduced from its definition\n", "\n", "1. The ACF $\\varphi_{xx}[\\kappa]$ has a maximum for $\\kappa = 0$. It is given as\n", " \n", " $$ \\varphi_{xx}[0] = E\\{x^2[k]\\} = \\sigma_x^2 + \\mu_x^2 $$\n", " \n", " This is due to the fact that the signal is equal to itself for $\\kappa = 0$. Please note that for periodic random signals more than one maximum will be present.\n", " \n", "2. The ACF is a function with even symmetry\n", " \n", " $$ \\varphi_{xx}[\\kappa] = \\varphi_{xx}[-\\kappa] $$\n", " \n", "3. For typical random signals, the ACF approaches the limiting value\n", " \n", " $$ \\lim_{|\\kappa| \\to \\infty} \\varphi_{xx}[\\kappa] = \\mu_x^2 $$\n", " \n", " The similarity of a typical random signal is often low for large lags $\\kappa$.\n", "\n", "4. The ACF of a periodic signal $x[k] = x[k + P]$ is also periodic\n", "\n", " $$ \\varphi_{xx}[\\kappa] = \\varphi_{xx}[\\kappa + P] $$\n", " \n", " with the period $P \\in \\mathbb{N} \\setminus 0$\n", "\n", "A random signal $x[k]$ is said to be *uncorrelated* if\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[\\kappa] = \\mu_x^2 + \\sigma_x^2 \\cdot \\delta[\\kappa]\n", "\\end{equation}\n", "\n", "and as correlated if this condition is not met. The samples of a signal which is uncorrelated show no dependencies between each other in a statistical sense." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example - Auto-Correlation Function of a Periodic Signal\n", "\n", "A periodic signal $x[k]$ can be expressed as\n", "\n", "\\begin{equation}\n", "x[k] = x_0[k] * \\sum_{n = - \\infty}^{\\infty} \\delta[k - nP]\n", "\\end{equation}\n", "\n", "where $x_0[k]$ denotes the signal of one period. The DTFT $X(e^{j \\Omega})$ of a periodic signal consists of a series of equidistant Dirac impulses (line spectrum). Expressing the ACF as convolution, transforming this into the frequency domain by the DTFT and having the multiplication property of the Dirac delta in mind it can be concluded that the ACF is periodic with period $P$. The ACF is then given by convolution over one period only and periodic continuation\n", "\n", "\\begin{equation}\n", "\\varphi_{xx}[\\kappa] = \\frac{1}{N} \\left( x_0[\\kappa] * x_0[-\\kappa] \\right) * \\sum_{n = - \\infty}^{\\infty} \\delta[k - nP]\n", "\\end{equation}\n", "\n", "The ACF of a periodic signal is computed and plotted in the following." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 8192 # total length of signal\n", "P = 128 # period\n", "K = 275 # upper/lower limit for lag in ACF\n", "\n", "# generate periodic random signal\n", "np.random.seed(1)\n", "x0 = np.random.normal(size=P)\n", "x = np.tile(x0, N//P)\n", "\n", "# compute and truncate ACF\n", "acf = 1/len(x) * np.correlate(x, x, mode='full')\n", "acf = acf[(len(x)-1)-(K-1):(len(x)-1)+K]\n", "kappa = np.arange(-(K-1), K)\n", "\n", "# plot signal and its ACF\n", "plt.figure(figsize = (10, 4))\n", "plt.stem(x[:512])\n", "plt.xlabel(r'$k$')\n", "plt.ylabel(r'$x[k]$')\n", "plt.grid()\n", "\n", "plt.figure(figsize = (10, 4))\n", "plt.stem(kappa, acf)\n", "plt.xlabel(r'$\\kappa$')\n", "plt.ylabel(r'$\\hat{\\varphi}_{xx}[\\kappa]$')\n", "plt.axis([-K, K, 1.1*min(acf), 1.1*max(acf)]);\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* What period $P$ does the periodic random signal have?\n", "\n", "Solution: The period of the random signal can be estimated from the ACF, as both have the same period. This is most easy by inspection of the regular peaks of the ACF." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example - Auto-Correlation Function of a Speech Signal\n", "\n", "The following example estimates and plots the ACF of a short recorded speech signal." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.io import wavfile\n", "\n", "K = 30 # upper/lower limit for lag in ACF\n", "\n", "# read audio file \n", "fs, x = wavfile.read('../data/speech_8k.wav')\n", "x = np.asarray(x, dtype=float)/2**15\n", "\n", "# compute and truncate ACF\n", "acf = 1/len(x) * np.correlate(x, x, mode='full')\n", "acf = acf[(len(x)-1)-(K-1):(len(x)-1)+K]\n", "kappa = np.arange(-(K-1), K)\n", "\n", "# plot ACF\n", "plt.figure(figsize = (10, 8))\n", "plt.stem(kappa, acf)\n", "plt.xlabel(r'$\\kappa$')\n", "plt.ylabel(r'$\\hat{\\varphi}_{xx}[\\kappa]$')\n", "plt.axis([-K, K, 1.1*min(acf), 1.1*max(acf)]);\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Does the ACF fulfill the properties stated above?\n", "* The plot shows only a small part of the ACF. Increase the range `K` for $-K \\leq \\kappa < K$ and check if the last property is fulfilled for the speech signal.\n", "* Is the speech signal uncorrelated or correlated?\n", "\n", "Solution: It can be observed that the plotted ACF has its maximum value at $\\kappa = 0$ and that it shows an even symmetry. The third property can be confirmed by increasing `K` in above example. The speech signal is correlated since $\\varphi_{xx}[\\kappa] \\neq 0$ for $\\kappa \\neq 0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Auto-Covariance Function\n", "\n", "The [auto-covariance function](https://en.wikipedia.org/wiki/Covariance) is defined as the ACF of a zero-mean random signal. For a random signal $x[k]$ with linear mean $\\mu_x \\neq 0$ it is given as\n", "\n", "\\begin{equation}\n", "\\psi_{xx}[\\kappa] = \\varphi_{xx}[\\kappa] - \\mu_x^2\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Correlation Function\n", "\n", "The cross-correlation function (CCF) is a measure of similarity that two random signals $x[k]$ and $y[k]$ show in a statistical sense." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definition\n", "\n", "For a continuous-amplitude real-valued random signal $x[k]$ the CCF is defined by the [second-order ensemble avarage](ensemble_averages.ipynb#Second-Order-Ensemble-Averages) of the two signals $x[k]$ and $y[k]$ at two different time-instants $k_x$ and $k_y$\n", "\n", "\\begin{equation}\n", "\\varphi_{xy}[k_x, k_y] = E\\{ x[k_x] \\cdot y[k_y] \\}\n", "\\end{equation}\n", "\n", "Under the assumption of [wide-sense stationarity](stationary_ergodic.ipynb#Wide-Sense-Stationary-Random-Processes) (WSS) the CCF does only depend on the difference $\\kappa = k_x - k_y$ between the considered sample indexes\n", "\n", "\\begin{equation}\n", "\\varphi_{xy}[\\kappa] = E\\{x[k] \\cdot y[k - \\kappa] \\} = E\\{x[k + \\kappa] \\cdot y[k] \\}\n", "\\end{equation}\n", "\n", "The cross-correlation function (CCF) is a measure of similarity that two random signals $x[k]$ and $y[k - \\kappa]$ have with respect to the shift $\\kappa \\in \\mathbb{Z}$. If $x[k]$ and $y[k]$ are wide-sense ergodic processes, the CCF can be computed by averaging along one sample function\n", "\n", "\\begin{equation}\n", "\\varphi_{xy}[\\kappa] = \\lim_{K \\to \\infty} \\frac{1}{2K + 1} \\sum_{k=-K}^{K} x[k] \\cdot y[k-\\kappa]\n", "\\end{equation}\n", "\n", "For random signals $x_N[k] = \\text{rect}_N[k] \\cdot x[k]$ and $y_M[k] = \\text{rect}_M[k] \\cdot y[k]$ of finite lengths $N$ and $M$ one yields\n", "\n", "\\begin{equation}\n", "\\varphi_{xy}[\\kappa] = \\frac{1}{N} \\sum_{k=0}^{N-1} x_N[k] \\cdot y_M[k-\\kappa] = \\frac{1}{N} \\; x_N[k] * y_M[-k]\n", "\\end{equation}\n", "\n", "where the CCF $\\varphi_{xy}[\\kappa] = 0$ for $\\kappa < -(M-1)$ and $\\kappa > N-1$. The CCF can be computed by (fast) convolution of one random signal with a time reversed version of the other random signal. Note in numerical implementations (e.g. MATLAB, Python), the computed CCF is stored in a vector of length $N + M - 1$. The positive indexes $0, 1, \\dots, N + M - 1$ of this vector cannot be directly interpreted as $\\kappa$. The indexes of the vector have to be shifted by $M-1$ for a proper interpretation.\n", "\n", "Above results hold also for the CCF $\\varphi_{yx}[\\kappa]$ when exchanging $x[k]$ with $y[k]$ and $N$ with $M$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties\n", "\n", "1. When exchanging the two random signals, the CCF exhibits the following symmetry \n", "\n", " $$ \\varphi_{xy}[\\kappa] = \\varphi_{yx}[-\\kappa] $$\n", " \n", "2. For typical random processes, the CCF approaches the limiting value\n", "\n", " $$ \\lim_{|\\kappa| \\to \\infty} \\varphi_{xy}[\\kappa] = \\mu_x \\cdot \\mu_y$$\n", "\n", "Two random signals are said to be [*uncorrelated*](https://en.wikipedia.org/wiki/Uncorrelated_random_variables) if\n", " \n", "\\begin{equation}\n", "\\varphi_{xy}[\\kappa] = \\mu_x \\cdot \\mu_y\n", "\\end{equation}\n", "\n", "and as correlated if this condition is not met. The samples of two signals which are uncorrelated to each other show no dependencies between each other in a statistical sense. $\\varphi_{xy}[\\kappa] = 0$ for uncorrelated signals if one of the two random processes is zero-mean." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example - Time-of-Arrival Estimation\n", "\n", "The CCF can be used to estimate the [time-of-arrival (TOA)](https://en.wikipedia.org/wiki/Time_of_arrival) of a signal at transmitted from a sender to a receiver. The TOA is used for instance for [radiolocation](https://en.wikipedia.org/wiki/Radiolocation) or sound source localization. For ease of illustration it is assumed that a random signal $x[k]$ is only delayed by transmission. The received signal $y[k]$ is then just a delayed version of transmitted signal\n", "\n", "\\begin{equation}\n", "y[k] = x[k - k_0] = x[k] * \\delta[k - k_0]\n", "\\end{equation}\n", "\n", "The aim is to estimate the delay $k_0$ by observation of the received signal under knowledge of the transmitted signal. Under the assumption of finite length signals, the CCF between the transmitted and the received signal is given as\n", "\n", "\\begin{equation}\n", "\\begin{split}\n", "\\varphi_{xy}[\\kappa] &= \\frac{1}{N} x_N[k] * y_M[-k] \\\\\n", "&= \\frac{1}{N} \\left( x_N[k] * x_N[-k] \\right) * \\delta[-k+k_0] \\\\\n", "&= \\frac{1}{N} \\varphi_{xx}[\\kappa] * \\delta[k - k_0]\n", "\\end{split}\n", "\\end{equation}\n", "\n", "where the associativity of the convolution and the even symmetry of the Dirac pulse has been used. The delay between the two signals results in a shift of the ACF of the transmitted signal. The delay can be estimated by finding the maximum value of the CCF $\\varphi_{xy}[\\kappa]$, if the ACF $\\varphi_{xx}[\\kappa]$ of the transmitted signal $x[k]$ exhibits a pronounced maximum at $\\kappa = 0$\n", "\n", "\\begin{equation}\n", "\\hat{k}_0 = \\underset{\\kappa}{\\mathrm{argmax}} \\{ \\varphi_{xy}[\\kappa] \\}\n", "\\end{equation}\n", "\n", "One can differentiate between to types of transmitted signals: (i) ones which have been designed explicitly for TOA estimation and (ii) application specific signals. The latter are for instance wireless or speech signals which are used in the applications where specific measurement signals may not be appropriate. For the former, there exist various choices for finite length random sequences with good auto-correlation properties.\n", "\n", "The Gold code is a pseudo random noise (PRN) sequence used in the [Global Positioning System (GPS)](https://en.wikipedia.org/wiki/Global_Positioning_System) to estimate the TOA between satellites and the receiver. It constitutes a series of binary sequences with good auto- and cross-correlation properties. The latter is required to lower the interference between the sequences of different GPS satellites. The properties of these specific random signals are investigated and the application of these sequences to TOA estimation is illustrated. First the pre-computed sequences are loaded and a function for computing and plotting the CCF (and ACF) is defined for convenience" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# load set of PRN sequences (Gold codes)\n", "prn = np.load('../data/gold_sequences.npz')['prn']\n", "\n", "def compute_plot_CCF(x, y, ylabel, K=30):\n", " # compute and truncate CCF\n", " ccf = 1/len(x) * np.correlate(x, y, mode='full')\n", " ccf = ccf[(len(y)-1)-K:len(y)+K]\n", " kappa = np.arange(-K, K+1)\n", " \n", " # plot CCF\n", " plt.stem(kappa, ccf)\n", " plt.xlabel(r'$\\kappa$')\n", " plt.ylabel(ylabel)\n", " plt.axis([-K, K, 1.1*min(ccf), 1.1*max(ccf)]);\n", " plt.grid()\n", " \n", " return ccf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ACF for one particular sequence and the CCF between two different sequences is computed and plotted" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAEYCAYAAABBfQDEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3XmcXGWZ9//PN53OIlvARJZmdYitaJQIggyORmQfJRlciDojqDxRZ9BxQ+FhHkRciPLMor9hlIgoLgMiIsaf0YhCo4NEEgwQFgMxCEkDshYY0oZ09/X8cU6F05Wq7uru6jp1ur/v16teXXXWq+5z6tTVd93nvhURmJmZmZlZYlLeAZiZmZmZtRInyGZmZmZmGU6QzczMzMwynCCbmZmZmWU4QTYzMzMzy3CCbGZmZmaW4QTZzMysBUg6T9J38o7DzJwg2wQhqUvSk5KmVkw/TNIySSVJT0i6WdK703nzJPVL2pR5/Difd2BmeZH0Dkmr0mvAQ5J+Kuk1mfkvkvR9SY9JekrS7ZI+KqlN0v6SouI6ctsYxNjyybWkb0r6bBP280dJPWlZ/ynd747pvC5Jf0nnPSbpakl7ZtY9Lz1eb8tMm5xO23+sY7fW4QTZxr30ovY3QAAnZaYfAVwH3AAcCDwf+ABwQmb1ByNix8zjTc2K28zyJ+mjwH8Anwd2B/YF/guYn87/K+C3wAZgTkTsArwVOBTYKbOpGZnryCua+BYmqjdFxI7AK0mOxb9k5p2RzjsQ2BH4vxXrPgF8WlJbUyK1luQE2SaCdwErgG8Cp2amXwhcFhFfiIjHInFLRLyt2kbMbGKRtAtwPvBPEXF1RDwTEVsj4scRcWa62KeB30TERyPiIYCIWBsR74iI0gh2O03S9yT9WdLvJG1LpiXtJekHkh6VdJ+kD6XTjwf+N3BKuYZa0uslrcmse62klZnXv5a0YLDtpvMmSTpL0h8kPS7pSkm7pfPKteOnSnogrZE9p0ZZLgLeCXyi/GucpHdnf5WTdK+k72deb5B0cPr8ryWtTGvoV0r663oKMyK6gZ8CL6syrwRcAxxcMetnwLPA39ezD0mnSVqfHrP7JL0zM+89ku5Of8FcLmm/zLxjJP0+fU//KekGSaen8wb8IpAp68np610kfT39RaNb0mfLCX0az/9I+r/pfu+TdEJmW7tJ+oakB9P512TmvVHSrUp+Vf2NpJdn5n0y3defJa2V9IZ6yqeonCDbRPAu4Lvp4zhJu0t6HnAEcFWukZlZKzsCmAb8cJBljqax15H5wPeB3YD/Bq6R1C5pEvBj4DagA3gD8GFJx0XEz0hquL+XqaFeAcyWNFNSO/ByYC9JO0maTlKr+uvBtpvG80FgAfA6YC/gSeCiiphfA3Sm654r6SWVbyoilpBcg7+Y+TXuBuBv0iR8L2AKSZkj6YUktbu3pwn5T4Avk/zS92/ATyQ9f6jClLQPcCKwusq85wMnA+sqwwX+D/CptOwG2/4OaVwnRMROwF8Dt6bz5pP843IyMAv4NXB5Om8mcDVJzfZM4A/AkUO9n4xvAr0kteBzgWOB0zPzDwfWptv+IvB1SUrnfRt4HvBS4AXAv6cxzQUuBd5HUs4XA0slTZXUCZwBvCp9n8cBfxxGvIXjBNnGNSXtBPcDroyIW0guQu8AdiU5/x8aYhN7pf9Jlx+uXTabOJ4PPBYRvUMsM9R1BOCxzHXk44Msd0tEXBURW0kSwWnAq4FXAbMi4vyIeDYi1gNfAxZW20hE9AArgdcCh5AkwDeSJGGvBu6NiMfr2O77gXMiYmNEbAHOA95SrslMfToieiLitnQ/dTUhSff1Z5Ia3NcCy4EHJb2YJCH/dUT0A3+bxvvtiOiNiMuB3wODNXm7RlIJ+B+SRPzzmXlflvQU8BhJAvnBKrEtBR5lYNJZSz/wMknTI+KhiLgznf5+4IKIuDs9hz4PHJzWIp8I3Jk51v8BPFzHvpC0e7r+h9NfNR4hSXKz58L9EfG1iOgDLgP2BHZX0t76BOD9EfFk+ovIDek6i4CLI+K3EdEXEZcBW0jOlz5gKnCQpPaI+GNE/KGeeItq8tCLmBXaqcDPI+Kx9PV/p9MuJrmo7Ulyoa3lwYjYe2xDNLMW9TgwU9LkQZLkx0muI0OZOUSiXbah/CQi+iVtJKm5DdJ/2DPLtpHUStZyAzAP2Jg+f5Ik8dySvoakAmGw7e4H/FBSf2Z+H0l77LJsYreZpOa3XuUYD0yfl9IYj8jEuBdwf8V695PUeNeyICJ+UWPehyLiEklzgP8f2Bt4oMpy/wJ8g6TGtaqIeEbSKcDHSWppbwQ+FhG/Jym7L0n618wqSuPei4HHOiRtoD77Ae3AQ89VCjMpuz0yxyQiNqfL7Ujyy8QTEfFkje2eKin7D8MUYK+IuEHSh0n+QXqppOXARyPiwTpjLhzXINu4lf6M+DbgdZIelvQw8BGS2o3ZwE3Am3MM0cxa200kyeSCQZb5BY29juxTfpI2f9gbeJAk+bkvImZkHjtFxInp4lFlW+Xk87Xp8xtIks/X8VzyOdR2N5A0H8jOn5a27R2uwWL8m0FifJAkecvaFxhJDM8FE7EG+CxwUab5QXb+tSTNL/5xiO0sj4hjeK7C5WvprA3A+yrKbnpE/IbkV4fssVb2NfAMSTOIsj0yzzeQnJczM9vdOSJeWsfb3gDsJmlGjXmfq4j3eWmNPRHx3xFR/lU2gC/Usb/CcoJs49kCkpqOg0h+wjsYeAlJzci7gE8Ap0k6s9yWTdIrJF2RU7xm1kIi4ingXJIEaoGk56XtgU+Q9MV0sU8Bfy3pQkl7AEg6UNJ3aiQhQzlE0slpE4YPkyRCK4CbgT+nN0pNV9KF3MskvSpd70/A/mlSXfYbkrbBhwE3pz/970fSPvVX6TJDbferwOfSZgFImpW2rR2JPwEvrJh2A/B6YHpEbCS5Ph9P0nSl3G54GfAiJd3tTU5rbA8iqf0drctIasNPqjH/HJLviqrSe1rmp22RtwCbSH6dhKTszpb00nTZXSS9NZ33E5Ka2PKx/hADk+BbgddK2lfJzaJnl2ekN4P+HPhXSTunbbj/StLrhnqz6bo/Bf5L0q7p+fzadPbXgPdLOlyJHST9bdpuvVPSUUq6Sv0L0JN5n+OSE2Qbz04FvhERD0TEw+UH8J8kd1PfDByVPtZLegJYQnIxNjMjIv4V+CjJz+2PktSynUHS+wFpO8wjgP2BO9O2rT8AVpG0rx2uHwGnkDSH+Afg5LSdaB/wRpJ/9O8jaT97CbBLul6594fHJf0uje0Z4HckbV2fTeffRNI+9ZF0maG2+yVgKfBzSX8mSdYPH8H7Avg6SRvWktKeEyLiHpKk8tfp66eB9cCNaWykbaXfCHyMpEnLJ4A3ZprOjVhaLl8iuSmv2vwbSb4raplEcn48SNI93OtIugslIn5IUst6haSngTtIuxFNY38rsDh9T7NJ2oiX93st8D3gduAWtv9n4F0kzR/uIjlXrqK+pj6QnFdbSWq7HyH5R4yIWAX8L5LvyCdJas9PS9eZmsb6GEnzjReQSdrHI0VU+8XDzMzMzJpFUhfwnYi4JO9YzDXIZmZmZmYDOEE2M5vAJF0q6RFJd9SYL0lflrROyRDKr8zMO1XJ4A73Sjq12vpmZkXkJhZmZhNYeoPOJuBbEbHdaGOSTiTpJ/ZEkranX4qIw5UM3rCKZMCJIGkneUiN7qPMzArFNchmZhNYRPyK5OaiWuaTJM8RESuAGelgA8cB10ZEuU/Va0l6HzAzK7xxNVDIjBkz4sADD8w7jBF75pln2GGHHfIOY8SKHH+RYwfHn6dbbrnlsYiYlXccY6iDgQMQbEyn1Zq+HUmLSEbpYtq0aYfsu+++YxNpE/T39zNpUnHrloocf5FjB8efp3vuuWfY1+lxlSDvvvvurFq1Ku8wRqyrq4t58+blHcaIFTn+IscOjj9PkipH+LIKEbGEpAtFOjs7Y+3atTlHNHJFPleh2PEXOXZw/HkayXW6mP8KmJlZs3QzcISvvdNptaabmRWeE2QzMxvMUuBdaW8WrwaeSkfjWg4cm47GtStwbDrNzKzwxlUTCzMzGx5JlwPzgJmSNpIMndwOEBFfJRlZ8kSSUbU2A+9O5z0h6TPAynRT50fEYDf7mZkVhhNkM7MJLCLePsT8AP6pxrxLgUvHIi4zszy5iYWZmZmZWYYTZDMzMzOzDCfIZmZmZmYZTpDNzMzMzDKcIJuZmZmZZThBNjMzMzPLcIJsZmZmZpbhBNnMzMzMLMMJspmZmZlZhhNkMzMzM7OM3BJkSZdKekTSHTXmS9KXJa2TdLukVzY7Rhv/rlndzZGLr+O0nz3DkYuv45rV3XmHZGZmZjnLswb5m8Dxg8w/AZidPhYBX2lCTDaBXLO6m7OvXkN3qQeA7lIPZ1+9xkmymZnZBJdbghwRvwKeGGSR+cC3IrECmCFpz+ZEZxPBhcvX0rO1b8C0nq19XLh8bU4RmZmZWSuYnHcAg+gANmReb0ynPZRdSNIikhpmZs2aRVdXV7Pia7hNmzY5/iYq1xxXm16k9wHFK/tKRY/fzMzGl1ZOkOsSEUuAJQCdnZ0xb968fAMaha6uLhx/83SsuK5qktwxY3qh3gcUr+wrFT1+MzMbX1q5F4tuYJ/M673TaWYNceZxnUxvbxswbXp7G2ce15lTRGZmZtYKWjlBXgq8K+3N4tXAUxHx0FArmdVrwdwOLjh5DlPako9Bx4zpXHDyHBbM7cg5MjMzM8tTbk0sJF0OzANmStoIfApoB4iIrwLLgBOBdcBm4N35RGrj2YK5HVx+8wOUSiWWf/KovMMxMzOzFpBbghwRbx9ifgD/1KRwzMzMzMyA1m5iYWZmTSDpeElr04GZzqoy/98l3Zo+7pFUyszry8xb2tzIzczGRuF7sTAzs5GT1AZcBBxD0p3mSklLI+Ku8jIR8ZHM8h8E5mY20RMRBzcrXjOzZnANspnZxHYYsC4i1kfEs8AVJAM11fJ24PKmRGZmlhPXIJuZTWzVBmU6vNqCkvYDDgCuy0yeJmkV0AssjohrqqznAZ1aRJHjL3Ls4PiLxgmymZnVayFwVURkx2jfLyK6Jb0QuE7Smoj4Q3YlD+jUOoocf5FjB8dfNG5iYWY2sQ1nUKaFVDSviIju9O96oIuB7ZPNzArJCbKZ2cS2Epgt6QBJU0iS4O16o5D0YmBX4KbMtF0lTU2fzwSOBO6qXNfMrGjcxMLMbAKLiF5JZwDLgTbg0oi4U9L5wKqIKCfLC4Er0j7qy14CXCypn6TCZXG29wszs6JygmxmNsFFxDKS0Uuz086teH1elfV+A8wZ0+DMzHLgJhZmZmZmZhlOkM3MzMzMMpwgm5mZmZllOEE2MzMzM8twgmxmZmZmluEE2czMzMwswwmymZmZmVmGE2QzMzMzswwnyGZmZmZmGU6QzczMzMwynCCbmZmZmWU4QTYzMzMzy3CCbGZmZmaW4QTZzMzMzCzDCbKZmZmZWYYTZDMzMzOzDCfIZmZmZmYZTpDNzMzMzDKcIJuZTXCSjpe0VtI6SWdVmX+apEcl3Zo+Ts/MO1XSvenj1OZGbmY2NnJLkOu4IO8r6XpJqyXdLunEPOI0MxvPJLUBFwEnAAcBb5d0UJVFvxcRB6ePS9J1dwM+BRwOHAZ8StKuTQrdzGzM5JIg13lB/hfgyoiYCywE/qu5UZqZTQiHAesiYn1EPAtcAcyvc93jgGsj4omIeBK4Fjh+jOI0M2uayTntd9sFGUBS+YJ8V2aZAHZOn+8CPNjUCM3MJoYOYEPm9UaSGuFKb5b0WuAe4CMRsaHGuh2VK0paBCwCmDVrFl1dXY2JPAebNm1y/Dkpcuzg+IsmrwS5ngvyecDPJX0Q2AE4ujmhmZlZhR8Dl0fEFknvAy4Djqp35YhYAiwB6OzsjHnz5o1JkM3Q1dWF489HkWMHx180eSXI9Xg78M2I+FdJRwDflvSyiOjPLuSaidZR1PhLpR76+voKGXtZUcu+rOjxF1w3sE/m9d7ptG0i4vHMy0uAL2bWnVexblfDIzQza7K8EuQhL8jAe0nbskXETZKmATOBR7ILuWaidRQ1/q+svYlSqVTI2MuKWvZlRY+/4FYCsyUdQHIdXgi8I7uApD0j4qH05UnA3enz5cDnMzfmHQucPfYhm5mNrbx6sdh2QZY0heSCvLRimQeANwBIegkwDXi0qVGamY1zEdELnEGS7N5NcnP0nZLOl3RSutiHJN0p6TbgQ8Bp6bpPAJ8huaavBM5Pp5mZFVouNcgR0SupfEFuAy4tX5CBVRGxFPgY8DVJHyG5Ye+0iIg84jUzG88iYhmwrGLauZnnZ1OjZjgiLgUuHdMAzcyaLLc2yHVckO8Cjmx2XGZmZmY2sXkkPTMzMzOzDCfIZmZmZmYZTpDNzMzMzDKcIJuZmZmZZThBNjMzMzPLcIJsZmZmZpbhBNnMzMzMLMMJspmZmZlZhhNkMzMzM7MMJ8hmZmZmZhlOkM3MzMzMMpwgm5mZmZllOEE2MzMzM8twgmxmZmZmluEE2czMzMwswwmymZmZmVmGE2QzMzMzswwnyGZmE5yk4yWtlbRO0llV5n9U0l2Sbpf0S0n7Zeb1Sbo1fSxtbuRmZmNjct4BmJlZfiS1ARcBxwAbgZWSlkbEXZnFVgOHRsRmSR8Avgicks7riYiDmxq0mdkYcw2ymdnEdhiwLiLWR8SzwBXA/OwCEXF9RGxOX64A9m5yjGZmTeUE2cxsYusANmReb0yn1fJe4KeZ19MkrZK0QtKCsQjQzKzZ3MTCzMzqIunvgUOB12Um7xcR3ZJeCFwnaU1E/KFivUXAIoBZs2bR1dXVrJAbbtOmTY4/J0WOHRx/0ThBNjOb2LqBfTKv906nDSDpaOAc4HURsaU8PSK607/rJXUBc4EBCXJELAGWAHR2dsa8efMa+w6aqKurC8efjyLHDo6/aNzEwsxsYlsJzJZ0gKQpwEJgQG8UkuYCFwMnRcQjmem7SpqaPp8JHAlkb+4zMysk1yCbmU1gEdEr6QxgOdAGXBoRd0o6H1gVEUuBC4Edge9LAnggIk4CXgJcLKmfpMJlcUXvF2ZmheQE2cxsgouIZcCyimnnZp4fXWO93wBzxjY6M7PmcxMLMzMzM7MMJ8hmZmZmZhlOkM3MzMzMMnJLkCUdL2mtpHWSzqqxzNsk3SXpTkn/3ewYzczMzGziyeUmPUltwEXAMSSjNq2UtDR797Ok2cDZwJER8aSkF+QRq5mZmZlNLHn1YnEYsC4i1gNIugKYz8D+M/8XcFFEPAmQ7XvTzGy8krRbHYv1R0RpzIMxM5ug6k6QG3zR7gA2ZF5vBA6vWOZF6X5vJOmb87yI+FmVuDyEaYsoavylUg99fX2FjL2sqGVfVvT4G+zB9KFBlmkD9m1OOGZmE89wapCbfdGeDMwG5pEMfforSXMqE3APYdo6ihr/V9beRKlUKmTsZUUt+7Kix99gd0fE3MEWkLS6WcGYmU1Ew0mQG3nR7gb2ybzeO52WtRH4bURsBe6TdA9Jwryyzn2YmRXREQ1axszMRmg4vVg08qK9Epgt6QBJU4CFwNKKZa4hqT1G0kySJhfr69y+mVkhRcRfACTNr5wnaVJ2GTMzGxt1J8iNvGhHRC9wBrAcuBu4MiLulHS+pJPSxZYDj0u6C7geODMiHq83XjOzglsk6XBIev6R9B7g9znHZGY2IYykF4tFkh6OiN+m3bWdCpxFelNdvSJiGbCsYtq5mecBfDR9mJlNNO8AfiTpJ8AHgDXAu/INycxsYhhJguyLtpnZ2HsNcA7wXeC0iOjKN5yJ7ZrV3Vy4fC3dpR46VlzHmcd1smBuR95hWUb5GD1Y6mGvGdPH/Bg1e3+tYqK875EkyL5om5mNvTcDc4CZwMWSrgXuiIiv5htWcTTqi/ya1d2cffUaerb2AdBd6uHsq9cAFCYxGO8JfrOP0XD2l0fZNzKJzcY/44af88yzvWztC6D1Pwvl2KfsceAhw113JENNvxn4D567aP+npPePYDtmZlZDRLwnIl4F7AS8ieRejD3yjao4yglMd6mH4Lkv8mtWV3aYNLQLl6/dlgiV9Wzt48LlaxsU7djKlgWMrixaVbOPUb37y6PsG3nuV8Zf6tm6LTkua9XPQmXswzXsBNkXbTOz5onEPRHxg4g4L+94iqKRCdODNb5ga01vNUVP8OvR7GNU7/7yKPtG7rPatqppxc9CvbHXMpIaZMAXbTOzsSDpd41YZqJrZMK014zpw5reaoqe4Nej2ceo3v3lUfaN3Ge967TiZ2G0ZVx3guyLtplZU7xE0u2DPNaQNHGzQTQyYTrzuE6mt7cNmDa9vY0zj+scUWzNVvQEvx7NPkb17i+Psm/kPutZp1U/C6Mt4+HcpPcSSbcPMl/ALqOKxszMXlzHMiP/3XCCOPO4zgE3UcHIv8jLNx994qrbebavn46C3bnfyLJoVc0+RvXuL4+yH80+K2/ue/2LZ/GDW7oHbKt9kgigtz9a7rOQjX+X6e20t2m7NtP1Gk6C7Iu2mdkYi4j7B5sv6VhgB0nTImJdI/Yp6XjgS0AbcElELK6YPxX4FnAI8DhwSkT8MZ13NvBekuv/hyJi+WhiadTd97USGIAjF183IAG4/vePDrm/BXM7uPzmByiVSiz/5FE1YwW2SzAqt1+5TL3T6t1WZfzVyuL1L57FhcvX8pHv3TrquBr9vuvpBaLWepff/AAA33vfEVWPUSPjqmd/Zx7XyQUnzxnyPGx0GVbbZ61yrZUMd5d6+MEt3bz5kA6uXLlxwLYq33c19X6W61mu3s9aNv5Sz1baJ4nJk1QzxsEoGY9j9CR9BOgH+iPi/2vIRoeps7Mz1q4t7k0HXV1dzJs3L+8wRqyo8Z9y8U3pl94JeYcyYkUt+7Iixy/plog4tIn7ezfwc2BORPysAdtrA+4BjgE2AiuBt0fEXZll/hF4eUS8X9JC4O8i4hRJBwGXA4cBewG/AF4UETUrS7LX6Xpqq6a3t/HmQzoGJArDSRRPufgmIPkir+yaq5pq+8tuq3ytqLat9kkCMWiNVbVl6p1Wz7bqif8Dx768rtjHOtZa8V9w8pxtCVK95VxeL5u41XO8hxNXtXIdan/ZuJp17lQri0rVYhBQbe8dM6az967TB3xPZj9X5e2N9LNcrYZ6x2mTKW3eOugyle+7VvxT2iZx7+dPHPZ1upEJ8ukRcUlDNjZCTpDzVdT4nSDnr8jx55Ag/ydwH/BMI/pElnQEcF5EHJe+PhsgIi7ILLM8XeYmSZOBh4FZJKOobls2u1yt/b1o5xlx7fyTeGzTFtY/9gz9/aP/DpKSGqLs99mkSeKFM3fgkT9vAeCgPXdm9QMltvQO/4fO7LZ6e3t5+T67jXhbeaiMvy8mtXTsUye3sesO7QA8+czWumOdOrmNqe3JrVWjOd71mjRJTJ08ifa2SYPurxxXM8+dyrIA+OPjzwCw//N3GHYMO09v3xY/wF0PPb1t2438LI+Vhb9ZNuzr9EgGChlAUltaWyBJHwO2RsSXR7tdMzOr6raI+Fra7KEROoANmdcbgcNrLRMRvZKeAp6fTl9Rse52v6FKWgQsAvirHXamVCpxf6m/YV+o1Sp6+vuD+x97hh2nJK9LpZEnJdltTZoUo9pWHraLf0trx76lt4+nN/enz+s/R7b09vG8ycl6zThG/f3Blq19TJvUP+j+ynE189ypLAtgW5mW2ur/pwOS2tq26N0WP0BbPLftRn6Wx8IIW1iMPkEGlkj6YHrBfl1E3NCAbZqZWUamMgJJHwV6gUJURkTEEmAJwC57z45X/HgpC876SdWfQxtJwH2L/3bb639cfN2IBw0ob6urq4tXzJs3qm3lIRv/l1f0t3Ts5Z/0ATY+2VN3rB0zpnPjWUdte92MY5Q9x2rtrxxXM8+dyrIA+HymWUStGCqbKZSbaxw7t2Nb/JWa8VmuV634eeXew97WiPtBzjgX+LqkbwNN+5nRzGyCWSLpeRHxNeCWBv5S1w3sk3m9dzqt6jJpE4tdSG7Wq2fdqmp1wVRZ2TPCyp+q+6jWNddQ+x/Ottonifa2wSOutky90+rZVj3x1xv7WMdabVplbwv1xlqtl4Z6jne9cY20XOuNayzLsJpasb7z1fvSMWM6Ikmys+3BaxntZ7mez3jlMrXe90jir6URNcifAdYCLwSubMD2zMxse+XKiF7gVqBRv9atBGZLOoAkuV0IvKNimaXAqcBNwFuA6yIiJC0F/lvSv5HcpDcbuLmendbqiqqem3gq1bpRqTJJKH9RDtZTQK2bi+rZViv0YlFP/PXGnmcvFuUbzLKxdpd6BvQCUW/vHY2IazTlWk9cY90TSKV6Y63HaD7LlcvtMr2dZ57tresGyUbFX8uob9KTNDMiHpO0A/CliDi9MaENn2/Sy1dR4/dNevkrcvzNuklP0qXAAySVEedExIYhVhnOtk8E/oOkm7dLI+Jzks4HVkXEUknTgG8Dc4EngIURsT5d9xzgPSRNPj4cET8dbF9T95wdh/7zxcP6ghtpV10j/bIcrNupIpyr4yH+al2U5R37aLsgzDP+WmU6HIPFP9Zduo028R3JdXrUNcgR8Vj69xlJ7xvt9szMrKpPZCsjgIZVRkTEMmBZxbRzM8//Ary1xrqfAz43nP11l3o4++o1XHDynO3aSVazYG5HXV+Qjao9qnd/rarI8Ze7H3u2L7kJrHyuAMzIMzCKW66DlWmzPzP1LNcq5dyINsjAtptGzpD0wUZt08zMEtnKCKDwlRE9W/u4cHlxf/GzsXHh8rXbNafxuTI6LtORaUQb5LKn8+4H2cxsvEsrI/ok5TYoU6M82MI9KVg+ap0TyfQdmhvMODF4mVot7gfZzKxYxk1lRK27323i2mvG9Krdj/lcGTmX6cg0oolFtuuhVU6OzcwaLx0SOn2qj0n6UK4BjVI9XVHZxFNvV2lWP5fpyLgfZDOzYhg3lRGj7Z/Uxq8Fczu44OQ5DevL1lymI+V+kM3MimGs+kFuqv13nlRXzxU2cbVKLwbjict0+EaUIEt6FTAFuIMx7HrIzMy2cWWEmVmTDDtBlnQNyXCiG4D5smsPAAAZgElEQVSDgBslneF+kM3MGsuVEWZm+RiyDbKkl0r6bmbSy4AzgFMiohP4H+ArAGlvFmZmNkppZcRXgI+TDN/8xbQN8rjoB9nMrJXVc5PeL4BzMq8XA58A7pa0BjgaOFrSsZJeMAYxmpmNe66MMDNrHfUkyMcycBjRNwFXRsRfAa8Bvgq0AW8DftrwCM3MJgZXRpiZtYghE+SIWBMR78xMOh34e0m3Af8F/Bvws4g4PSIOGaM4zczGO1dGmJm1iGHfpBcRjwJvlNRB8hPgUxGxYrjbkXQ8yY0mbcAlEbG4xnJvBq4CXhURq4a7HzOzIoiINUBlZcQ3JJ1NcpNeJ2llRB7xmZlNJCPuBzkiuoHukaybjgh1EXAMsBFYKWlpRNxVsdxOwD8Dvx1pnGZmRdSoyggzMxu+RoykNxKHAesiYn1EPAtcAcyvstxngC8Af2lmcGZmrSIiuiNiuZNjM7PmyStB7iDpR7lsYzptG0mvBPaJiJ80MzAzMzMzm9gaMdR0w0maRHLz32l1LLsIWAQwa9Ysurq6xjS2sbRp0ybHn4NSqYe+vr5Cxl5W1LIvK3r8ZmY2vuSVIHcD+2Re783A9sw7kbS565IEsAewVNJJlTfqRcQSYAlAZ2dnzJs3bwzDHltdXV04/ub7ytqbKJVKhYy9rKhlX1b0+M3MbHzJq4nFSmC2pAMkTQEWAkvLMyPiqYiYGRH7R8T+wApgu+TYzMxGTtJukq6VdG/6d9cqyxws6SZJd0q6XdIpmXnflHSfpFvTx8HNfQdmZmMjlwQ5InpJRohaDtxN0tfnnZLOl3RSHjGZmU1AZwG/jIjZwC/T15U2A++KiJcCxwP/IWlGZv6ZEXFw+rh17EM2Mxt7ubVBjohlwLKKaefWWHZeM2IyM5tg5gPz0ueXAV3AJ7MLRMQ9mecPSnoEmAWUmhOimVnz5dXEwszM8rd7RDyUPn8Y2H2whSUdBkwB/pCZ/Lm06cW/S5o6RnGamTVVS/ZiYWZmjSHpFyQ3Olc6J/siIkJSDLKdPYFvA6dGRH86+WySxHoKyc3SnwTOr7KuextqEUWOv8ixg+MvGifIZmbjWEQcXWuepD9J2jMiHkoT4EdqLLcz8BPgnOyAJZna5y2SvgF8vEYM7m2oRRQ5/iLHDo6/aNzEwsxs4loKnJo+PxX4UeUCaU9DPwS+FRFXVczbM/0rYAFwx5hGa2bWJE6QzcwmrsXAMZLuBY5OXyPpUEmXpMu8DXgtcFqV7ty+K2kNsAaYCXy2ueGbmY0NN7EwM5ugIuJx4A1Vpq8CTk+ffwf4To31jxrTAM3McuIaZDMzMzOzDCfIZmZmZmYZTpDNzMzMzDKcIJuZmZmZZThBNjMzMzPLcIJsZmZmZpbhBNnMzMzMLMMJspmZmZlZhhNkMzMzM7MMJ8hmZmZmZhlOkM3MzMzMMpwgm5mZmZllOEE2MzMzM8twgmxmZmZmluEE2czMzMwswwmymZmZmVmGE2QzMzMzswwnyGZmZmZmGU6QzczMzMwynCCbmU1QknaTdK2ke9O/u9ZYrk/SreljaWb6AZJ+K2mdpO9JmtK86M3Mxo4TZDOziess4JcRMRv4Zfq6mp6IODh9nJSZ/gXg3yPiQOBJ4L1jG66ZWXM4QTYzm7jmA5elzy8DFtS7oiQBRwFXjWR9M7NWNjnvAMzMLDe7R8RD6fOHgd1rLDdN0iqgF1gcEdcAzwdKEdGbLrMR6Ki2sqRFwCKAWbNm0dXV1aDwm2/Tpk2OPydFjh0cf9HkliBLOh74EtAGXBIRiyvmfxQ4neSC/Cjwnoi4v+mBmpkVmKRfAHtUmXVO9kVEhKSosZn9IqJb0guB6yStAZ6qN4aIWAIsAejs7Ix58+bVu2rL6erqwvHno8ixg+MvmlwSZEltwEXAMSS1DislLY2IuzKLrQYOjYjNkj4AfBE4pfnRmpkVV0QcXWuepD9J2jMiHpK0J/BIjW10p3/XS+oC5gI/AGZImpzWIu8NdDf8DZiZ5SCvNsiHAesiYn1EPAtcQdIWbpuIuD4iNqcvV5BcfM3MrHGWAqemz08FflS5gKRdJU1Nn88EjgTuiogArgfeMtj6ZmZFlFcTiw5gQ+b1RuDwQZZ/L/DTajPctq11FDX+UqmHvr6+QsZeVtSyLyt6/AW2GLhS0nuB+4G3AUg6FHh/RJwOvAS4WFI/SaXK4syvfZ8ErpD0WZJf/b7e7DdgZjYWWv4mPUl/DxwKvK7afLdtax1Fjf8ra2+iVCoVMvayopZ9WdHjL6qIeBx4Q5Xpq0juASEifgPMqbH+epJfBM3MxpW8EuRuYJ/M66pt1yQdTXIjyesiYkuTYjMzMzOzCSyvNsgrgdnpKExTgIUkbeG2kTQXuBg4KSKq3jhiZmZmZtZouSTI6R3PZwDLgbuBKyPiTknnSyqP0nQhsCPw/crhTc3MzMzMxkpubZAjYhmwrGLauZnnNbsmMjMzMzMbKx5q2szMzMwswwmymZmZmVmGE2QzMzMzswwnyGZmZmZmGU6QzczMzMwynCCbmZmZmWU4QTYzMzMzy3CCbGZmZmaW4QTZzMzMzCzDCbKZmZmZWYYTZDMzMzOzDCfIZmZmZmYZTpDNzMzMzDKcIJuZmZmZZThBNjOboCTtJulaSfemf3etsszrJd2aefxF0oJ03jcl3ZeZd3Dz34WZWeM5QTYzm7jOAn4ZEbOBX6avB4iI6yPi4Ig4GDgK2Az8PLPImeX5EXFrU6I2MxtjTpDNzCau+cBl6fPLgAVDLP8W4KcRsXlMozIzy9nkvAOwxrpmdTcXLl/Lg6Ue9poxnTOP62TB3I68w7JxxOfYuLJ7RDyUPn8Y2H2I5RcC/1Yx7XOSziWtgY6ILZUrSVoELAKYNWsWXV1dowo6T5s2bXL8OSly7OD4i8YJch2KkhBcs7qbs69eQ8/WPgC6Sz2cffUaVt3/BNf//tFc4y9KGbaSViizyhhe/+JZ/OCW7u3OMaAlj2crlGHeJP0C2KPKrHOyLyIiJMUg29kTmAMsz0w+mySxngIsAT4JnF+5bkQsSefT2dkZ8+bNG96baCFdXV04/nwUOXZw/EXjBHkItZJOaL2E4MLla7fFWdaztY/vrniA8rdeHvEXqQxbRSuUWbUYsudSWc/WPi5cvrbljmUrlGEriIija82T9CdJe0bEQ2kC/Mggm3ob8MOI2JrZdrn2eYukbwAfb0jQZmY5cxvkCtes7ubIxddxwFk/4cjF1/HpH99ZNem8cPnanCKs7cFST9XptRKaZqmVuLdiGbaKViizajHUql6sde7lqVYZfuzK27Z9vq9Z3Z1TdC1jKXBq+vxU4EeDLPt24PLshDSpRpJI2i/fMQYxmpk1nRPkjHKNU3ephyCpcXpy89aqy7ZiQrDXjOl1L9vM+GvtqxXLsFW0QpkNZ1/DOfeapVb8fRHbPt9nX71moifJi4FjJN0LHJ2+RtKhki4pLyRpf2Af4IaK9b8raQ2wBpgJfLYJMZuZjTknyBnVapxqacWE4MzjOpne3jZgmmos28z4a+2rFcuwVbRCmdXaV+U5Nb29jTOP6xz7gIapnrKa6L9kRMTjEfGGiJgdEUdHxBPp9FURcXpmuT9GREdE9Fesf1REzImIl0XE30fEpma/BzOzseAEOaPeGrNWTQgWzO3ggpPnMKUtOawdM6bzzlfvu13S3Oz4qyXurVqGraIVyqxWDO989b4DzrELTp7Tkm16q8VfjX/JMDOzSr5JL2OvGdPprvJlOWN6O5uf7ePZvn46WvxO+AVzO7j85gcA+N77jgDg0P124xNX3Z5b/OV95RlD0bRCmQ0Ww71/SioKy+dYK6qMv02iL7ZvRe1fMszMrJIT5Iwzj+sccNc7JDVm55300u2SziKpljRPxBiKphXKrBViGI1s/G8/bN+qn2//kmFmZpXcxCKjWhOFVv352MyGx59vMzOr14SvQa42kMDcfWcAxawxM7PaqtWIezARMzOrlFuCLOl44EtAG3BJRCyumD8V+BZwCPA4cEpE/LHe7dfzpVdrIIG9Zkxj5o5TR/P2RhVXM9RbPo61eHEVOdZmxzCcwURaoXzMzKw5ckmQJbUBFwHHABuBlZKWRsRdmcXeCzwZEQdKWgh8ATilnu3XO+Ty5md7qw4ksOGJniET5Hq/LLPL7TK9nWee7WVrXwyIC+ob2atRX9DVyufM79/Gp398J6XNWwcdUrjasNWQdJHXXeqhY8V1vP7Fs+oa2rra+ylvazhDGw9niO3K7Vdrf9oqcdWToFWWfb2x1nu8R2ok5+poh0ofyT5rDSZy3tI76z7eZmY2/uRVg3wYsC4i1gNIugKYD2QT5PnAeenzq4D/lKSIKrehV6h3yOVanu3rrzkP6v8ir/xSLfVsP+hIrWF6K7/s60ly6k2Yq5XP1v7YNijKYEMKV5bhmd+/DcSApP87Kx7Ytk6tRKJWkl65rXqGNq73eFfbfvkXg/IHoZXiGkl51Rtrvcf7wuVr2XvXwXt5qOdcrSfRHc5Q6UN91upNYGt18Vbq2brt8zpU+ZiZ2fijOvLNxu9UegtwfLkjekn/ABweEWdklrkjXWZj+voP6TKP1drui3aeEdfOP4kV6x8fbXzsNG0yB+2587Zpdz30NAAH7bkzqx8osaW3vgFF6rXHLtPYsmULnXvtxmObtrD+sWfo7x/esZk0Sbxw5g488uct22Ity8Y/2vIZiamT25jaPmlbDI0owz12mcb+z9+hIcd7+mR4+T67tVRc2TLbsrW/4edcvXae3g5UP59esNPUEZ2r8Nz5umlLL1u2bOHJvzT+WlR53kHjP8sLf7Pslog4dHSRThydnZ2xdm1x/7Ho6upi3rx5eYcxYkWOv8ixg+PPk6RhX6cLf5OepEXAIoC/2mFnSqUS7ZPE1hF8YSfbg+dNhrbopVQqbZvelg4gVSo1PjlunySe3ryFiKBUKnF/qX9ECUd/f3D/Y8+w4xS2xVqWjX805TNSW3r7eN7kxpWhBE9v3kKpbeuo309EMGVS68WVLbMtvc3/RxaSc7MteoHq59P9j/WO6FyF587X9rbkGIzFeVl53sHAz8Ju04KHn4GR1hOo1lCVZmZWaHklyN3APpnXe6fTqi2zUdJkYBeSm/UGiIglwBKAXfaeHa/48VLuW93NeRX9nQq2+4kUkkFAdpg6ecDPvm8copnCPy6+btAmGsMxvb2NC06ew3dufoBSqcTyT57AgrN+UjXWegi4b/HfDrpMtfKpta0Y5PVwdMyYzo1nHbXt9XDKsHK/09vbtt1I+b33HTGs410rts+9ehKvmDev5eIql9mRozzn6tlvtfdzwclzOHaQz8MBozhXy/s87IDdKJVKfODYl4+qvKqpPO+qqWwisvnZ3m3NTypjrXa8uXHZKCI0M7NWlFc/yCuB2ZIOkDQFWAgsrVhmKXBq+vwtwHX1tD+G5/o77ZgxHTH4kMvnnfRSbjzrKO5b/LfceNZRdbXhrTaEba2KpMrp7ZPErs9r3xZXtX5Ya43sVU9lVT2jglWWz4zp7bS3Ddx6eUjhocqwfZK2W7dStcEYqpVhtW1Vi+OCk+cMuImy3uNda/vZ2IoeVz2x1nu86+kjuN5ztdYZkl2/3vKq97NW7yAgC+Z2DLgGfOpNL605xPZgx9vMzMaPXGqQI6JX0hnAcpJu3i6NiDslnQ+sioilwNeBb0taBzxBkkTXbcHcju2+3A/db7eG9AKRvQmr1k1CkHypvvmQjrruwM+qNaJfdluVPWKUl6l3VLDK8qm3B4BqZVgui+5SDx1pWQz1nquVYb29OQDb+rKt9X6GirVy+11d97ZkXPWWV7nsR9Mjxkg+C/Wcq4N9Ps48rnNAmdVTXo38rFVTq6zrOd5mZjY+5NYGOSKWAcsqpp2bef4X4K2N3Ge1L99GbmssE/Cx7re23rKptVySZA6vAf9g22qEkW6/iHFVlv1ItzVcw0kma30+hkoyx/KzNpx9mpnZxFH4m/RayVgn4GO5P7ORGu0/V2O5TzMzs5HIqw2ymZmZmVlLcoJsZmZmZpYxrhLkv/Ql3WFds7qyxzgbT65Z3c3qB0r89r4nWup4t2pcNjbKx3vKHgcekncsZmbWWOMqQYbnhpgtUnJS/qJd+2S/E6shlIdcLg8H3irHu1XjanVFPfcrj7eZmY0v4y5BBujZ2seFy4sxlKkTq+G5cPna7QY4aYXj3apxtbIin/vVjncRSXqrpDsl9UuqOQyrpOMlrZW0TtJZmekHSPptOv17ab/2ZmaFNy4TZIAHGzTS3VhzYjU8tY5r3se7VeNqZUU+98fRcb0DOBn4Va0FJLUBFwEnAAcBb5d0UDr7C8C/R8SBwJPAe8c2XDOz5hi3CXI9I8q1AidWw1PruOZ9vFs1rlZW5HN/vBzXiLg7Iob6j+QwYF1ErI+IZ4ErgPmSBBwFXJUudxmwYOyiNTNrHtU5enMhtD1vl5i8ywsgor/36Ufv7+95+om8YxpK+6z956ht8nY/S0Zf77NbH/3jmjxiGoWZwGNjuYNJ03febfLOs/ZDeu6fu8Yc71HFPoZx1WvMy77RinzuZ49371OP0Lf5qXpGgm9ZkrqAj0fEqirz3gIcHxGnp6//ATgcOA9YkdYeI2kf4KcR8bIq21gELEpfvoyk5rqoCvdZq1Dk+IscOzj+PHVGxE7DWWFcDRTS3/P0LVs2P1WzHV2rk7QqIhx/DoocOzj+PEnaLqlsJZJ+AexRZdY5EfGjZsQQEUuAJWk8hT3W4PjzVOTYwfHnaSTX6XGVIJuZ2UARcfQoN9EN7JN5vXc67XFghqTJEdGbmW5mVnjjtg2ymZk1xEpgdtpjxRRgIbA0kvZ51wNvSZc7FWhKjbSZ2VgbbwnykrwDGCXHn58ixw6OP0+FjV3S30naCBwB/ETS8nT6XpKWAaS1w2cAy4G7gSsj4s50E58EPippHfB84Ot17Law5ZVy/Pkpcuzg+PM07NjH1U16ZmZmZmajNd5qkM3MzMzMRsUJspmZmZlZxrhIkCV9RtLtkm6V9HNJe6XTJenL6TCot0t6Zd6xViPpQkm/T2P8oaQZmXlnp/GvlXRcnnFWM9hQta0ee1mtYXRblaRLJT0i6Y7MtN0kXSvp3vTvrnnGWIukfSRdL+mu9Lz553R6UeKfJulmSbel8X86ne4hl4fg63R+fJ1uPl+n89Ow63REFP4B7Jx5/iHgq+nzE4GfAgJeDfw271hrxH8sMDl9/gXgC+nzg4DbgKnAAcAfgLa8462I/SVAJ9AFHJqZ3vKxp3G2pbG9EJiSxnxQ3nENEfNrgVcCd2SmfRE4K31+VvkcarUHsCfwyvT5TsA96blSlPgF7Jg+bwd+m15brgQWptO/Cnwg71hb7eHrdK6x+zrd/Jh9nc4v/oZcp8dFDXJEPJ15uQNQvvNwPvCtSKwg6bNzz6YHOISI+Hkkd4oDrCDpTxSS+K+IiC0RcR+wjmTY15YRtYeqbfnYU1WH0c05pkFFxK+AytH55pMM9QstPORvRDwUEb9Ln/+ZpFeEDooTf0TEpvRle/oIPOTykHydzo+v083n63R+GnWdHhcJMoCkz0naALwTODed3AFsyCy2MZ3Wyt5DUpsCxYy/rCixFyXOoeweEQ+lzx8Gds8zmHpI2h+YS/LffWHil9Qm6VbgEeBakpqtUiZ5Kuo5NOZ8nW45RYm9KHEOpTDXubKJfJ0uTIIs6ReS7qjymA8QEedExD7Ad0n67GwpQ8WfLnMO0EvyHlpGPbFb64jk96OW7r9R0o7AD4APV9Qstnz8EdEXEQeT1CAeBrw455Bahq/T+fF1ulha/ToHvk4XZqjpqH+41O8Cy4BPUXuI1KYbKn5JpwFvBN6QnnjQIvEPo+yzWiL2OhQlzqH8SdKeEfFQ+vP0I3kHVIukdpKL7ncj4up0cmHiL4uIkqTrSQbZ8JDL+Dqd8nW68YoS51AKc53zdbpANciDkTQ783I+8Pv0+VLgXUq8Gngq8/NAy5B0PPAJ4KSI2JyZtRRYKGmqpAOA2cDNecQ4AkWJveowujnHNBJLSYb6hRYe8leSSEZbuzsi/i0zqyjxz1Lae4Gk6cAxJO3zPOTyEHydbklFid3X6SbydTrVyDsH83qQ/JdzB3A78GOgI567k/EikrYna8jcvdtKD5IbIzYAt6aPr2bmnZPGvxY4Ie9Yq8T+dyRtebYAfwKWFyX2TJwnktyl+wfgnLzjqSPey4GHgK1p2b+XZJjfXwL3Ar8Adss7zhqxv4bkZ7nbM+f7iQWK/+XA6jT+O4Bz0+kvJEks1gHfB6bmHWurPXydzjV2X6ebH6+v0/nF35DrtIeaNjMzMzPLGBdNLMzMzMzMGsUJspmZmZlZhhNkMzMzM7MMJ8hmZmZmZhlOkM3MzMzMMpwgm5mZmZllOEE2MzMzM8twgmwTmqRvSHqTpBmSlkn6u7xjMjOz5/g6bXlwgmwT3RzgSZIhJz8bET/MOR4zMxvI12lrOo+kZxOWpEnAn4HHgYsi4gs5h2RmZhm+TlteXINsE9ls4EHgNOD9ktrzDcfMzCr4Om25cIJsE9kc4NqIuA64A3hXzvGYmdlAvk5bLpwg20Q2h+SCC/B54GxJk3OMx8zMBvJ12nLhNshmZmZmZhmuQTYzMzMzy3CCbGZmZmaW4QTZzMzMzCzDCbKZmZmZWYYTZDMzMzOzDCfIZmZmZmYZTpDNzMzMzDL+Hyg04KZEN4AgAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (10, 4))\n", "\n", "plt.subplot(121)\n", "compute_plot_CCF(prn[10, :], prn[10, :], r'$\\hat{\\varphi}_{x_n x_n}[\\kappa]$')\n", "plt.title('ACF')\n", "\n", "plt.subplot(122)\n", "compute_plot_CCF(prn[10, :], prn[11, :], r'$\\hat{\\varphi}_{x_n x_m}[\\kappa]$')\n", "plt.title('CCF between two PRN sequences')\n", "plt.ylim([-1, 1])\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ACF features a pronounced peak for $\\kappa = 0$ and the two PRN sequences are reasonably uncorrelated. Now one particular sequence is delayed in order to model the received signal. The CCF is plotted and the TOA is estimated by finding the maximum value of the CCF between the transmitted and received sequence" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estimated TOA is 10 samples\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "k0 = 10 # true TOA\n", "\n", "x = prn[10, :] # pick one PRN sequence\n", "y = x[k0:] # delay transmitted signal by k0 samples\n", "\n", "# compute and plot CCF\n", "plt.figure(figsize = (10, 4))\n", "ccf = compute_plot_CCF(x, y, r'$\\hat{\\varphi}_{xx}[\\kappa]$')\n", "plt.title('CCF between transmitted and received signal')\n", "\n", "# estimate the TOA\n", "print('Estimated TOA is {:2.0f} samples'.format(np.argmax(ccf) - K))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Add a random signal with different levels to the received signal. How does this influence the TOA estimation?\n", "\n", "Solution: Additive noise can be added for instance by extending above example with `y = y + 0.1 * np.random.normal(len(y))`. Additive noise corrupts the CCF. For high levels, the maximum value of the CCF might not correspond to the delay $k_0$ anymore." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example - Cross-Correlation Function of Two Random Signals\n", "\n", "The following example estimates and plots the CCF of two random signals $x[k]$ and $y[k]$ of finite lengths $N$ and $M = 2 N$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean of signal x[k]: 1.954480\n", "Mean of signal y[k]: 1.000330\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = 1024 # length of random signals\n", "\n", "# generate two uncorrelated random signals\n", "np.random.seed(2)\n", "x = 2 + np.random.normal(size=N)\n", "y = 1 + np.random.normal(size=2*N)\n", "\n", "# compute CCF\n", "ccf = 1/len(x) * np.correlate(x, y, mode='full')\n", "kappa = np.arange(-(N-1), 2*N)\n", "\n", "# print mean values of signals\n", "print('Mean of signal x[k]: %f' %np.mean(x))\n", "print('Mean of signal y[k]: %f' %np.mean(y))\n", "\n", "# plot CCF\n", "plt.figure(figsize = (10, 8))\n", "plt.stem(kappa, ccf)\n", "plt.title('Estimated cross-correlation function')\n", "plt.ylabel(r'$\\hat{\\varphi}_{xy}[\\kappa]$')\n", "plt.xlabel(r'$\\kappa$')\n", "plt.axis([kappa[0], kappa[-1], 0, 1.1*max(ccf)]);\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Can the signals be assumed to be correlated or uncorrelated when considering the CCF in the range $0 < \\kappa < N$ only?\n", "* Why does the CCF of the two finite length signals have this overall trapezoid like shape? \n", "* What would be its theoretic value for signals of infinte length?\n", "\n", "Solution: The CCF is approximately constant for $0 < \\kappa < N$. Consequently, the random signals $x[k]$ and $y[k]$ can be assumed to be uncorrelated. The trapezoidal shape of the CCF results from the truncation of the random signals to a finite number of samples. This truncation can be modeled as a multiplication of the infinite length signals by a rectangular signal $\\text{rect}_N[k]$ and $\\text{rect}_M[k]$, respectively. Interpreting the CCF as convolution and having in mind that the convolution of two rectangular signals results in a signal of trapezoidal shape explains the shape of the CCF shown above. Its theoretic value is constant with a value given by the multiplication of the two linear means of the random signals $\\varphi_{xy}[\\kappa] = \\mu_x \\cdot \\mu_y$.\n", "\n", "The output of the CCF were both correlated signals overlap completely, here $0 \\leq \\kappa < N$, is also termed as *valid* part of the CCF, the remaining contributions as boundary effects. The computation of the CCF can be limted to the valid part only with the parameter `mode=valid`, for instance `np.correlate(x, y, mode='valid')`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Covariance Function\n", "\n", "The [cross-covariance function](https://en.wikipedia.org/wiki/Covariance) is defined as the CCF of two zero-mean random signals. For two random signals $x[k]$ and $y[k]$ with linear means $\\mu_x \\neq 0$ and $\\mu_y \\neq 0$ it is given as\n", "\n", "\\begin{equation}\n", "\\psi_{xy}[\\kappa] = \\varphi_{xy}[\\kappa] - \\mu_x \\mu_y\n", "\\end{equation}\n", "\n", "It follows from the properties of the CCF that the cross-covariance function $\\psi_{xy}[\\kappa]$ of two uncorrelated signals $x[k]$ and $y[k]$ is zero, $\\psi_{xy}[\\kappa] = 0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* What would the plot for $\\psi_{xy}[\\kappa]$ look like for the [example above](#Example---Cross-Correlation-Function-of-Two-Random-Signals) under the assumption of signals of infinite length?" ] }, { "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, 2016-2018*." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }