{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "EE 123 Lab 0 - Basic Python and DTFT\n", "
\n", " January 23rd, 2014 " ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "General iPython Notebook usage instructions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Click the `Play` button to run and advance a cell. The short-cut for it is `shift-enter`\n", "- To add a new cell, either select `\"Insert->Insert New Cell Below\"` or click the white down arrow button\n", "- You can change the cell mode from code to text in the pulldown menu. I use `Markdown` for text\n", "- You can change the texts in the `Markdown` cells by double-clicking them.\n", "- To save your notebook, either select `\"File->Save and Checkpoint\"` or hit `Command-s` for Mac and `Ctrl-s` for Windows\n", "- To undo in each cell, hit `Command-z` for Mac and `Ctrl-z` for Windows\n", "- To undo `Delete Cell`, select `Edit->Undo Delete Cell`\n", "- `Help->Keyboard Shortcuts` has a list of keyboard shortcuts" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Basic Python Questions:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To complete this part of the lab, you will need to read and run the python tutorial posted on the class website.\n", "\n", "Double-click the answer cell to add your answer. You can also insert a new cell by selecting `\"Insert->Insert New Cell Below\"` or clicking the white down arrow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q0.__ What do you add after a function to get the help window?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__A0.__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q1.__ What do you have to import to make all division a real division?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__A1.__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q2.__ What are the standard abbreviations for `numpy` and `matplotlib.pyplot` ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__A2.__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q3.__ What is the output of the following commands?\n", "\n", " x = np.array([1,2,3,4,5,6])\n", " y = x[0:4]\n", " y[0] = 7\n", " print x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__A3.__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q4.__ Write a code that prints `[5 4 3 2 1 0 1 2 3 4]`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# A4." ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q5.__ Write a code that prints out an array of every other integer from 0 to 4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# A5." ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Q6.__ Generate the same plot as in the following figure inline:\n", " \n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import Image\n", "Image('http://inst.eecs.berkeley.edu/~ee123/sp14/lab/tutorial_plot.jpg')" ], "language": "python", "metadata": {}, "outputs": [ { "jpeg": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEZCAYAAACTsIJzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYU+ffBvA7TMHFFlkiQ4Yo4MKFxIm2iChFcKCAxVXc\nbR04wIECbnHgtipuf+LE1hHEiXuAIiCiIlUZDoZAyPP+cV5TERCEhJOE53NdXCXk5JybFM835zyL\nQwghoCiKoqj/J8d2AIqiKEqy0MJAURRFlUELA0VRFFUGLQwURVFUGbQwUBRFUWXQwkBRFEWVQQsD\nVS179+6Fs7Mz2zHqhefPn0NOTg4CgaBa20+YMAGLFy8W2fHl5OTw7Nkzke1PHL6XcefOnXB0dKzj\nRLKFFgYpYWxsDGVlZWRnZ5f5ub29PeTk5PDixYta7b+qk8GIESNw9uzZWh1DVET9Dz8oKAje3t4i\n219d27hxI+bOnVuj13K5XGzbtk3EiShpRwuDlOBwODAxMcG+ffuEP3v48CEKCwvB4XBEcgxpGOvI\n5/PZjlAlacj4haj+duqKNL230owWBikycuRI/PXXX8LHu3btwqhRo8qc0D98+IBRo0ZBR0cHxsbG\nWLJkifD5lJQUODk5QU1NDdra2hg2bBgAoEePHgAAW1tbNG7cGIcOHSp37G8/pcvJyWHjxo0wNzdH\nkyZNMH/+fKSmpqJLly5QU1ODl5cXSkpKAAA8Hg8GBgZYunQptLW10bJlS0RFRVUr886dO9GtWzdM\nnz4dWlpa8PLywoQJE3Dt2jU0btwYGhoaAIBTp07B3t4eTZs2hZGREYKDg4X7/3Jr5q+//kKLFi2g\nra2NkJAQAEBMTAyWLl2KAwcOoHHjxrC3t6/wvb9z5w7s7e3RpEkTDB06FJ6enpg3b16Z3y8sLAzN\nmzfHmDFj8P79e7i4uEBHRwcaGhoYOHAgMjIyhPvjcrmYPXs2HBwc0LRpU7i5uSE3N7fMMffs2VMu\nb0V8fHzKZVm5ciWaNWsGPT097Ny5s8LXBQYGIi4uDgEBAWjcuDEmT54sfO6ff/5Bq1atoK6ujoCA\ngDKv2759O6ytraGhoYH+/ftXerU6evRorFy5EgCQkZEBOTk5bNiwAQCQmpoKTU1N4bZbtmyBubk5\nNDU1MWjQIGRmZgqf+/I6c3NzWFhYlDtOdnY2XF1d0bRpUzg4OCA1NbXS94qqJkJJBWNjY3Lu3Dli\nYWFBHj9+TPh8PjEwMCDp6emEw+GQ9PR0Qggh3t7exM3NjeTl5ZHnz5+TVq1akW3bthFCCPHy8iIh\nISGEEEKKiorIlStXhPvncDgkNTW10uPv2LGDdO/evcz2bm5u5NOnTyQhIYEoKSmRnj17krS0NPLh\nwwdibW1Ndu3aRQgh5OLFi0RBQYHMmDGDFBcXk9jYWNKwYUOSlJRUZeYdO3YQBQUFEhERQUpLS0lh\nYSHZuXNnmSyEEMLj8cijR48IIYQ8ePCANGvWjBw7dowQQkhaWhrhcDhk7Nix5PPnz+T+/ftEWVmZ\nPHnyhBBCSFBQEPH29q70dy8qKiJGRkZk7dq1hM/nk6NHjxIlJSUyb968Mr/frFmzSHFxMSksLCTZ\n2dnk6NGjpLCwkHz69Il4eHgQNzc34T6dnJyIvr4+SUhIIPn5+cTd3Z2MHDnyu3kfP35cYT4fH59y\nWRYsWED4fD45ffo0UVVVJe/fv6/wtVwuV/hef/3/duDAgeTDhw/kxYsXRFtbm8TExBBCCDl27Bgx\nMzMjT548IaWlpWTx4sWka9euFe57+/btZODAgYQQQvbu3UtMTU2Jp6cnIYSQbdu2Cd+P8+fPEy0t\nLXL37l1SVFREJk2aRHr06FEmT79+/Uhubi75/Pmz8Gdf/l49PT2Jp6cnKSgoII8ePSL6+vrE0dGx\nwkxU9dDCICW+FIbFixeT2bNnkzNnzpB+/foRPp8vLAx8Pp8oKSmVOYFERkYSLpdLCCFk1KhRZOzY\nseTVq1fl9l+TwnD16lXh4/bt25OwsDDh4xkzZpCpU6cSQv47WRUUFAifHzp0KFm0aFGVmXfs2EGM\njIy+m6UiU6ZMIdOmTSOE/HeizcjIED7fqVMncuDAAUIIIQsWLBCelCsSGxtL9PX1y/yse/fuZU7G\nSkpKpKioqNJ93L17l6irqwsfc7lcMnv2bOHjxMREoqSkRAQCQaV59+/fX+G+fXx8yNy5c4VZVFRU\nSGlpqfB5HR0dcuPGjQpfy+VyydatW8v8jMPhlPnQMHToUBIaGkoIIaR///5lCklpaSlRVVUlL168\nKLfvlJQUoq6uTgQCARk/fjyJjIwkBgYGhBDmb3HVqlWEEEL8/PzIzJkzha/Ly8sjioqKwg87HA6H\nXLx4sVzG1NRUwufziaKiovBDBiGEzJkzp8q/D+r76K0kKcLhcODt7Y29e/dWeBspKysLJSUlaNGi\nhfBnRkZGwlsYYWFhIISgU6dOsLGxwY4dO2qVp1mzZsLvVVRUyjxu0KAB8vLyhI/V1dWhoqIifNyi\nRQtkZmYiOzv7u5kBwNDQsMosN27cQM+ePaGjowM1NTVERkaWa6jX1dUVfq+qqlom3/e8fv0a+vr6\nZX72bSZtbW0oKSkJHxcUFGDcuHEwNjZG06ZN4eTkhA8fPpT5//X1PoyMjFBSUoKsrKxK8+bn51cr\nr6amJuTk/vunXdXvWlE7Q2XvVXp6OqZMmQJ1dXWoq6sLbwd9/f/rC1NTUzRs2BD37t1DXFwcXFxc\noKenh6dPn+LSpUtwcnICAGRmZpb5/9+wYUNoampW62/g3bt34PP55d5LqnZoYZAyRkZGMDExwZkz\nZzBkyJAyz2lpaUFRURHPnz8X/uzFixcwMDAAwJzIN2/ejIyMDERGRmLixIli65b47ckmNzcXBQUF\nwsfp6enQ09OrMnNF+6roRDZ8+HC4ubnh1atXeP/+PcaPH1/t7p5VNcA2b9683Inv2/vq3+5jxYoV\nePr0KeLj4/HhwwfExsaCMFfoFe7jxYsXUFRUhJaWVrUy/+jvIKrXGRkZYfPmzcjNzRV+5efno3Pn\nzhVu7+TkhEOHDqGkpAR6enpwcnLCzp07kZubCzs7OwCAnp5emf//+fn5yM7OLlOMK8upra0NBQWF\ncu8lVTu0MEihbdu24cKFC2U+gQOAvLw8hg4disDAQOTl5SE9PR2rVq3CyJEjAQCHDh3Cq1evAABq\namrgcDjCT5bNmjWrdaPd1yc9UkEPpwULFqCkpARxcXE4deoUPDw8ICcn993MFdHV1cWrV6+EjdsA\nkJeXB3V1dSgpKSE+Ph5RUVHVPunp6uri+fPnlfbK6tq1K+Tl5REREQE+n4/o6GjcvHnzu/vMy8uD\niooKmjZtipycnDKN4QDz/uzZswePHz9GQUEB5s+fDw8Pj+9mrizftwXnR1Tn//vX+x8/fjxCQkKQ\nmJgIgOk4UFFnhS+cnJwQEREh7ODA5XIREREBR0dH4e86bNgw7NixA/fv30dRURHmzJmDzp07V+uT\nv7y8PIYMGYKgoCAUFhYiMTERu3btkrreVpKGFgYpZGJignbt2gkff/2PYN26dWjYsCFMTEzg6OiI\nESNGwM/PDwBw69YtdO7cGY0bN8agQYOwdu1aGBsbA2D68o8ePRrq6uo4fPhwuWNyOJwyx6noH963\nz3/9WFdXF+rq6tDT04O3tzciIyPRqlWrSjP7+vpWuB8A6NWrF1q3bg1dXV3o6OgAADZs2ID58+ej\nSZMmWLRoETw9PSvN9i0PDw8AzC2YDh06lHteUVERR48exbZt26Curo69e/fCxcWlzK2jb/c/depU\nFBYWQktLC127dsWAAQPKvT/e3t7w8fFB8+bNUVxcjLVr1343b2W/Q3X+31RmypQpOHz4MDQ0NDB1\n6tQq9+/m5oaZM2fCy8sLTZs2RZs2bb47vqVHjx7Iy8sTFoZu3bqhsLBQ+BgAevfujUWLFsHd3R16\nenpIS0vD/v37v/v7fP2ziIgI5OXlQVdXF35+fsK/d6rmOKSmHzWqwc/PD6dOnYKOjg4ePnxY4TaT\nJ0/GmTNnoKqqip07d1baXZCSXjweD97e3nj58iXbUUTGwcEBEydOxOjRo2v0+p49e8Lb25uexCiJ\nJNYrBl9fX8TExFT6/OnTp5GSkoLk5GRs3rwZEyZMEGcciqqxS5cu4d9//wWfz8euXbvw6NEj9O/f\nv1b7FONnMoqqFQVx7tzR0bFMo9K3jh8/LvzE5eDggPfv3+PNmzdlerdQskHa7/kmJSVh6NChyM/P\nh6mpKQ4fPlzrv1Npf08o2SXWwlCVjIyMMt3MDAwM8OrVK1oYZAyXy5X6niL+/v7w9/cX2f4uXrwo\nsn1RlKix3vj87eU0/RRFURTFLlavGPT19cs0SL569arcQCIAUFU1Q2Ehnf+EoijqR5iamiIlJeWH\nX8fqFYOrq6twUrjr169DTU2twttIhYWp+PNPAlNTgoQEIuxXXR+/FixYwHoGSfmi7wV9L+h78f2v\nmo5NEusVw7BhwxAbG4usrCwYGhoiODhYOChp3Lhx+Omnn3D69GmYmZmhYcOG352iITQUaN0a4HKB\n7dsBFxdxJqcoiqq/xFoYvl47oDIRERHV3t+oUUCrVoC7OzB5MvDnnwBtkqAoihIt1huff1TnzsCN\nG8ChQ4C3N1BYyHaiusXlctmOIDHoe/Ef+l78h74XtSfWkc+iwuFw8G3MggJgzBggJQX43/+Ar+Zc\noyiKolDxubM6pO6K4QtVVSAqCvjlF8DBAbh6le1EFEXVFQ0NDeEcTvSLI1zJUFSk9orha6dPAz4+\nQEgI8OuvdZeLoih21PSTsKyq7P2o6fskE4UBAJKSgEGDgF69gNWrga8mvqQoSsbQwlCWqAuD1N5K\n+paFBdMo/eoV0Ls38OYN24koiqKkk8wUBgBo2hQ4dowpDB07AvHxbCeiKIqSPjJVGABATg4ICgLW\nrgV+/pkZDEdRFFVXjI2Ncf78+XI/5/F41Vq/XBKwOleSOLm5MbeXBg8Gbt2i7Q4URdWNilYdlDYy\nd8XwNSsr5nZSRgbQsyfw+jXbiSiKoiSfTBcGAGjShBkAN2AA0+4QF8d2IoqiZF18fDxat24NDQ0N\n+Pn5oaioqNw2cnJyePbsmfCxj48P5s2bJ3x88uRJ2NnZQV1dHd26dat0eWRxkPnCADDtDnPnAlu3\nMgPi1q4FaE83iqLEgRCCqKgo/P3330hNTcXTp0+xePHiKm8vfX0L6u7duxgzZgy2bNmCnJwcjBs3\nDq6uriguLq6LX6F+FIYvBgwArl0DduwARo4E8vPZTkRRlLhwOKL5+vHjchAQEAB9fX2oq6sjMDCw\nWhOKfm3z5s0YN24cOnbsCA6Hg1GjRkFZWRnXr1//8UA1UK8KAwCYmABXrgCKisyEfMnJbCeiKEoc\nCBHNV0183fvIyMgIr3+wgTM9PR0rVqyAurq68OvVq1fIzMysWaAfVO8KA8DMs7RjBxAQAHTrxox9\noCiKEpWv1zh/8eIF9PT0ym2jqqqKgoIC4eOvT/pGRkYIDAxEbm6u8CsvLw+enp7iDf7/6mVhAJhL\nxHHjgJMngalTgZkzAT6f7VQURUk7QgjWr1+PjIwM5OTkYMmSJfDy8iq3nZ2dHfbu3YvS0lLExMTg\n0qVLwuf8/f2xadMmxMfHgxCC/Px8nDp1Cnl5eXXyO9TbwvBFp07MOId794A+fYB//2U7EUVR0ozD\n4WDEiBHo168fTE1NYW5ujrlz54IQUqYBes2aNThx4gTU1dURFRWFwYMHC59r3749tmzZgoCAAGho\naMDc3Fy4DHKd/A6yMolebZWWAosWAVu2MNN5OzmJ9XAURdUCnUSvLDq7qpidPQuMHg1Mmwb88QfT\n1ZWiKMlCC0NZUjW7akxMDCwtLWFubo7Q0NByz+fm5mLw4MGwtbWFg4MDEhISxBmnWpydgZs3mQbp\nQYOAnBy2E1EURdUtsRWG0tJSBAQEICYmBomJidi3bx8eP35cZpuQkBC0a9cO9+/fx19//YUpU6aI\nK84PMTQEYmMBMzOgfXs6SytFUfWL2ApDfHw8zMzMYGxsDEVFRXh5eSE6OrrMNo8fP0bPnj0BABYW\nFnj+/DnevXsnrkg/REkJWLUKWL4ccHEB1q2jo6UpiqofxFYYMjIyygzyMDAwQEZGRpltbG1tcfTo\nUQBMIUlPT8erV6/EFalG3N3/Gy3t4QF8+MB2IoqiKPES27Tb1Zl2dtasWZgyZQrs7e3Rpk0b2Nvb\nQ15evsJtg4KChN9zuVxwuVwRJa2aqSlw9Srw++9Au3bAwYPMLSaKoihJwuPxwOPxar0fsfVKun79\nOoKCghATEwMAWLp0KeTk5DBz5sxKX9OyZUs8fPgQjRo1KhtSgnogHDoE/PYbMG8eM3Jayqddpyip\nJEnnBEkgNb2SOnTogOTkZDx//hzFxcU4cOAAXF1dy2zz4cMH4WyBW7ZsgZOTU7miIGk8PJhbS7t2\nMbeZcnPZTkRRFCVaYisMCgoKiIiIgLOzM6ytreHp6QkrKytERkYiMjISAJCYmIg2bdrA0tISZ8+e\nxZo1a8QVR6RMTZmJ+IyMmFtLdTThIUVRMi4oKAje3t5sx6AD3Grr2DFmzqUZM5g2CDogjqLET5LP\nCbURHByMlJQU7N69+4deJzW3kuoLNzdmQNzx48x6D2/esJ2IoihJwZfSmTlpYRABIyOAx2OWDm3X\nDvjnH7YTURTFFmNjY4SFhaFt27Zo3Lgxrly5gq5du0JdXR12dnaIjY0VbpuWlgYnJyc0adIE/fr1\nQ1ZWFovJ/0MLg4goKACLFwO7dwO+vsw03iUlbKeiKIoN+/fvx5kzZ5CamopBgwZh/vz5yM3NxfLl\ny+Hu7o7s7GwAwPDhw9GxY0dkZ2dj3rx52LVrV7W6+osbbWMQg3fvmOLw7h0zU6upKduJKEq2VOec\nwAkWzQmWLPixc0/Lli2xYMEC+Pj4IDQ0FAkJCWWmzO7fvz+GDx8OLpcLU1NTfPz4ESoqKgCAESNG\nQE5OjvU2BrENcKvPtLWBEyeAtWuZ5UNXrWLWmKYoqu786AldlL7M+pCeno5Dhw7hxIkTwuf4fD56\n9eqF169fQ11dXVgUAKBFixZ4+fJlnef9Fi0MYsLhAFOmAFwu4OUFxMQAGzYATZqwnYyiKHH7cjvI\nyMgI3t7e2Lx5c7lt0tPTkZubi4KCAqiqqgp/VtnsD3WJtjGIma0tcPs20LAhYGfHDI6jKKp+GDly\nJE6cOIG///4bpaWl+Pz5M3g8HjIyMtCiRQt06NABCxYsQElJCS5fvoyTJ0+yHRkALQx1QlUViIwE\nVqwABg8GFi6k60tTVH1gYGCA6OhohISEQEdHB0ZGRlixYgUEAgEAICoqCjdu3ICGhgYWLlyI0aNH\ns5yYQRuf69jr18CoUcDnz8CePYCxMduJKEr6yNI5QRToADcpp6cH/P03c+XQqRNTHOjfN0VRkoRe\nMbDo/n1g+HCgTRtg40ZAXZ3tRBQlHWT1nFBT9IpBhtjaArduATo6zPcXLrCdiKIoil4xSIyzZ4Ex\nY4ChQ4GQEKBBA7YTUZTkqg/nhB9BrxhklLMzc2vp5UtmzqV799hORFFUfUULgwTR1GSWDf3zT6Bv\nX2DpUqC0lO1UFEXVN/RWkoRKTwd8fJiJ+HbtovMtUdTXNDQ0kEuXTxRSV1dHTk5OuZ/X9NxJC4ME\nEwiANWuAJUuYr7Fj6RrTFEVVHy0MMiwxkRkUp60NbNvGjIWgKIqqCm18lmHW1swcS507A/b2zFTe\n9bhOUhQlZmItDDExMbC0tIS5uTlCQ0PLPZ+VlYX+/fvDzs4ONjY22LlzpzjjSDVFRWDBAuD0aaY7\n6y+/AG/fsp2KoihZJLbCUFpaioCAAMTExCAxMRH79u3D48ePy2wTEREBe3t73Lt3DzweDzNmzJDa\nNVLrSvv2zKA4U1NmUNyRI2wnoihK1oitMMTHx8PMzAzGxsZQVFSEl5cXoqOjy2zTvHlzfPz4EQDw\n8eNHaGpqQkGBLhFRlQYNgLAwpijMmcNMq/H/KwVSFEXVmtgKQ0ZGhnAVI4CZfjYjI6PMNv7+/khI\nSICenh5sbW2xZs0accWRSV27AnfvAs2aMfMtfVN3KYqiakRsH8+rs6B1SEgI7OzswOPxkJqair59\n++L+/fto3LhxuW2DgoKE33O5XHC5XBGmlV6qqszSoUOGAH5+zAC5tWuZwXIURdUvPB4PPB6v1vsR\nW2HQ19cvs3bpy5cvYWBgUGabq1evIjAwEABgamqKli1bIikpCR06dCi3v68LA1WeoyMzpUZgIHP1\nsH49M7U3RVH1x7cfmoODg2u0H7HdSurQoQOSk5Px/PlzFBcX48CBA3B1dS2zjaWlJc6dOwcAePPm\nDZKSkmBiYiKuSDLvy9XDwYPAzJmApyfw7h3bqSiKkjZiKwwKCgqIiIiAs7MzrK2t4enpCSsrK0RG\nRiIyMhIAMGfOHNy6dQu2trbo06cPwsLCoKGhIa5I9Ub37swkfEZGzNXDgQN03ANFUdVHRz7LuBs3\nAF9foFUrYMMGOmqaouoTOvKZqpCDA9NzqU0bwM4O2L6dXj1QFPV99IqhHrl/n+m5pKEBREYCtDmH\nomQbvWKgqmRry9xa6tcP6NQJWLmSrvdAUVR59IqhnkpOBvz9gYICYOtWoG1bthNRFCVq9IqB+iHm\n5sCFC0xx6N2bGf/w+TPbqSiKkgS0MNRjcnJMYXjwAEhKYm41iWDQJEVRUo7eSqKEoqOBgACmDSI8\nnGmkpihKetFbSVStDRoEJCQwI6hbt6YLAlFUfUWvGOoQIQSF/ELkF+ejRFAC3Ua6kONIZm2+fh0Y\nNw7Q1WUGxpmasp2IohgCIkB+cT4ERIBSUgpFOUU0Vi4/8SZF13yWSLmFubiQdgG85zzw0nlIfJcI\nRTlFNFRqCAU5BeQV58FSyxLW2tbo07IP3K3d0UipEduxhUpKgNWrgdBQYMYM5ktJie1UVH1DCEFs\neix4z3m4/uo6bmTcAF/AhzxHHnIcORSVFkFLVQvtm7dHB70OcLN0g7W2NduxJQItDBIkJScFK6+t\nxL5H+9DFoAu4xlz0NO4JO107KMorCrf7WPQRT7Ke4OGbhziWdAyXX1zGIItBGNd+HLoYdmHxNygr\nLY1pe0hPBzZtYuZioihx+1j0Ebvu7cL6m+uhJK+Ega0GwsHAAQ76DmjWqJlwOwERIDUnFbde30J8\nRjwOJByAuaY5xrcfjyFWQ6CsoMzib8EuWhgkQPr7dPz+z+/gPedhXPtxCOgUAN1GutV+/Zu8N9j7\ncC/W3FgDB30HhPUNg7GasfgC/wBCmBXjpk4FnJ2ZqwgtLbZTUbKIL+Bj7Y21WBK3BH1M+iCgYwC6\nG3Wv1hovAFBSWoLjScex8dZGpOSkYE3/NXC1cK3262VJjc+dRApIesxSQSlZH7+eaIZqksWxi8mn\nok+12l9+cT5ZyFtINEI1yJxzc8jnks8iSlp7Hz4QMnkyITo6hGzfTkhpKduJKFly49UNYrfJjvTe\n1Zs8zXpa6/2df3aeWEZYEpcoF/Is55kIEkqXmp476RVDLaW/T8eoY6NQXFqM7a7bYaVtJbJ9v/r4\nCpPOTELGxwwc8jiEFmotRLbv2rpzBxg/HlBWBjZuBGxs2E5ESTMBEWD+xfnYdncblvddjuFthovs\nE35xaTFWXluJ5VeXY92AdRjWZphI9isN6BUDC669vEaaL29OQi+HEn4pXyzHEAgEZPmV5aRZeDNy\nJvmMWI5RU3w+IRs2EKKtTcjvvxPyqXYXSlQ99eHzB+IS5UKcdjiRt3lvxXace5n3SMvVLckff/8h\ntn+vkqam507J7CspBQ48OgDXfa7YMnAL/uz2J+Tl5MVyHA6HgxldZ+Cgx0GMOT4GK66uEMtxakJe\nHpgwAXj0iFkpzsoKOHSIjn2gqi8lJwWdt3aGYRND/OP9D7QbaovtWLa6trjpfxN3Mu9gwN4ByC3M\nFduxpB29lVQDyy4vw8ZbG3Hc6zhsdW3r7LivPr5C7796Y0SbEZjXY57ENabFxQETJwLNmwPr1gEW\nFmwnoiTZwzcP0W9PP8zvMR8TOk6os+PyBXxMPzsdl19cxrlR56ChIrtD/OnI5zoSejkUO+/txLUx\n1+q0KACAQRMDxPrE4lDiIcw+P1uiiiUAODoybQ8DBgDdugGzZwP5+WynoiTRo7eP0G9PP6x2Xl2n\nRQEAFOQUsKb/GvQx6YPef/VGdkF2nR5fGtDC8APW3liLzXc24/yo89BrzM4ambqNdHFx9EX88+wf\nTD87XeKKg6IiMG0a8PAh8OIFvb1ElZfwNgF9d/fFyn4r4WnjyUoGDoeD0D6hcDZ1Ru+/eiOrIIuV\nHBJLZK0cFThz5gyxsLAgZmZmZNmyZeWeDw8PJ3Z2dsTOzo7Y2NgQeXl5kpubW247MceslshbkcRo\nlRF5nvuc7SiEEEJyC3NJmw1tSNjlMLajfFdsLCFt2hDSuzchiYlsp6HYlpydTJovb072PtjLdhRC\nCNO5Y/a52aRdZDuSV5THdhyRq+m5U2xnXD6fT0xNTUlaWhopLi4mtra2JPE7Z4YTJ06Q3r17VxyS\n5cIQ/SSa6K3QI8nZyazm+NbLDy+J4UpDsv/hfrajfFdJCSFr1hCipUXI9OnMWAiq/skpyCGt1rUi\nm25uYjtKGQKBgPgd8yOu+1xlrrdSTc+dYruVFB8fDzMzMxgbG0NRURFeXl6Ijo6udPuoqCgMGyZ5\n/YsfvnmIX4//iv95/g9mGmZsxynDoIkBTg4/iUlnJuFS+iW241RKQQGYPJmZufXDB8DSEti1CxAI\n2E5G1ZWS0hL8cugX/Gz+M8Z1GMd2nDI4HA42umzEp6JP+P3v39mOIxHEVhgyMjJgaGgofGxgYICM\njIwKty0oKMDZs2fh7u4urjg18i7/HQbtH4TV/Vejk34ntuNUqG2zttg7ZC88DnkgJSeF7TjfpaPD\nLCN67BgzKK5rVyA+nu1UlLgRQjDx1ESoKqoivG8423EqpCSvhCNDjyAmNQYbbm5gOw7rFMS14x/p\nSnnixAlYji9nAAAgAElEQVR0794dampqlW4TFBQk/J7L5YLL5dYiXdWKS4vxy6Ff4GXjheFthov1\nWLXV17Qv5veYD49DHrjqdxUqiipsR/quTp2Aq1eB3bsBNzdm7qWQEKabKyV71t5Yi/jX8bjse1ls\n431EQV1FHaeGn0LXbV1ho2ODHi16sB3ph/F4PPBEsQyjaO9o/efatWvE2dlZ+DgkJKTCBmhCCHFz\ncyP79u2rdF9ijFmpyacnk4FRA0mpQDomAxIIBMTrsBf5NfpXtqP8kA8fCPnjD0I0NQkJDSXks+RM\nC0WJwI1XN4h2mLZUzVN0+ulpYrDSQKyjsOtKTc+dYjvjlpSUEBMTE5KWlkaKiooqbXx+//490dDQ\nIAUFBZWHrOPCcPzJcdJiVQuSU5BTp8etrY+fPxKLdRZk592dbEf5YU+fEjJwICFmZoRERxMiELCd\niKqt94XvScvVLcnhhMNsR/lhs/6ZRZx3O0vNB8PK1PTcKbY2BgUFBURERMDZ2RnW1tbw9PSElZUV\nIiMjERkZKdzu2LFjcHZ2hoqKZNz+eP3pNfxP+GPvkL1QV1FnO84PaazcGIeHHsbv//yOh28esh3n\nh5ibA8ePAxERwKxZzLrTD6XrV6C+QgjBryd+xU/mP8HdWrLaDqtjUa9FyCvOQ+jlULajsIJOifGV\nUkEp+u7ui57GPTHPaZ7YjycuO+7uwKrrq3DT/6ZULlJSUgJERgILFwLu7sx/tcU3hQ4lBptubULk\n7UhcG3MNDRQasB2nRl5+eImOWzriyNAj6GbUje04NUKnxBCBsCthEBAB5jjOYTtKrfjY+aCleksE\n8YLYjlIjiorMinFPnjDTeltZAeHhQFER28mo6nia/RRzL8zFfvf9UlsUAMCwqSEiXSIx+tho5BfX\nr7ld6BXD/3v45iF6/9Ubt8fehmFTw6pfIOHe5L2B7SZbHPU8iq6GXdmOUytJScAffzDjIMLCgCFD\nAAmbP5D6f6WCUvTY2QNerb0wyWES23FEwvt/3lBvoI61A9ayHeWH0SuGWuAL+PCN9sXS3ktloigA\nQLNGzbD+p/XwOeYj9Z92LCyY9ocvt5d69ABu3mQ7FVWRNTfWQEFOAb91+o3tKCKzpv8aHHl8BLzn\nPLaj1BlaGACsuLoC6irq8LP3YzuKSLlbu6OTfifMOjeL7Sgi0acPM3urry8waBAwYgSQns52KuqL\np9lPERIXgu2u2yHHkZ1Ti4aKBiJdIuEb7YtPRZ/YjlMnZOf/Xg09yXqC8Kvh2DJwi8StbyAK6was\nw5HHR3Dt5TW2o4iEvDzg5wc8fcr0ZGrXjunF9OED28nqt1JBKXyjfbHAaQFMNUzZjiNyLq1cwDXm\nYua5mWxHqRP1ujCUCkrhF+2HYG4wjNWM2Y4jFuoq6ljRbwXGnRyHktIStuOITKNGQFAQ8OAB8PYt\n0KoVszhQcTHbyeqnTbc2QZ4jL1O3kL61ynkVjj05huuvrrMdRezqdWHYemcrOBxOnS8UUte8bLzQ\nvHFzrL6+mu0oIqevD2zfDvzzD3DqFNC6NXD4MF3/oS79m/cvgmKDsPHnjTJ1C+lbag3UEN43HONP\njgdfwGc7jljV215J7/LfofWG1jg36hzaNmsr0n1LotScVDhsdcCtsbdk9uoIYArEH38AKipMDyZH\nR7YTyT7v/3lDr5EeQvvK/mAwQgj67O6Dga0GYmrnqWzHqVJNz531tjD8evxXNFJqhNX9Ze9TdGWW\nxi3F5ZeXcXLYSZlsT/lCIAD27gXmzgXs7IBly5ixEJToXUy7CJ9oHyRMTEAjpUZsx6kTSVlJ6La9\nG+6NvweDJgZsx/ku2l31B1x/dR2nk08jmBvMdpQ6NaPrDDx//xzRSZWviyEL5OQAb29m/IOjI+Dk\nBPj7A5XM+k7VUHFpMSaenog1/dfUm6IAABZaFpjYcSKmnZ3GdhSxqXeFoVRQiomnJiK8bziaNmjK\ndpw6pSSvhDX912DG3zNQxJf9YcQNGgC//84UCE1NoG1bpgdTbi7byWTDqmurYKpuikEWg9iOUudm\nd5+NO5l3cO7ZObajiEWVhSE/Px+LFi2Cv78/ACA5ORknT54UezBxibwdiSbKTSR+jQVx6WPSB210\n2shkQ3Rl1NWZ20n37wNZWUwPprAwoLCQ7WTS69+8fxF+NRyr+6+W6duSlVFRVEF433BMOztNJhui\nqywMvr6+UFJSwtWrVwEAenp6CAwMFHswcXj/+T2CY4OxdsDaevnH/MXyfssRfjUcmZ8y2Y5SpwwM\nmBXkLl0Crl9nCsSWLQBf9v5di93cC3Pha+crccvd1qXBloOhpaqFrXe2sh1F5KosDKmpqZg5cyaU\nlJQAAA0bNhR7KHFZcmkJXFu51oteSN9jpmGGX9v9ijkXpHuywJqysgKOHmW6te7bx3RxPXiQrkFd\nXXcz7+Lk05OY22Mu21FYxeFwsMp5FRbwFuD95/dsxxGpKguDsrIyCr+65k5NTYWysvRN5Zyak4rt\n97ZjUa9FbEeRCIGOgTibchbxGfV30WUHB+D8eWD9emb21g4dgDNn6BiI7yGEYNrZaQjmBte7NrqK\n2OnawbWVKxbFyth5paqVfM6ePUt69OhBtLS0yLBhw4iRkRG5cOFCjVYFqqlqxKyS+wF3sjh2sQjS\nyI5td7aR7tu7EwFdLo0IBIQcOUKIlRUh3bsTEhvLdiLJdDTxKLHZYENKSkvYjiIx/v30L9EM1SRJ\nWUlsRymnpufOao1jyMrKwvXrzDDwzp07Q0tLS8zlqqzajmOIS4/DiKMjkBSQBBVFyVgpThKUCkph\nF2mHJb2WwNXCle04EqG0lBkDERTEzMW0eDHQsSPbqSRDcWkxrNdbY+PPG9HXtC/bcSRK6OVQxL+O\nx5GhR9iOUobYxjEcPXoUCgoKcHFxgYuLCxQUFHDs2LEahWQDIQQz/p6Bpb2X0qLwDXk5eYT2CcXM\nczNlsmdFTcjLA6NGMYsEDR7839eDB2wnY9/m25thrmlOi0IFJjtMRnxGvMzMo1RlYQgODoaamprw\nsZqaGoKCgsSZSaSOPD4CvoCPYW2GsR1FIg0wG4DmjZpjx90dbEeRKEpKwPjxQHIys/5Dv36Apyfw\n+DHbydjxqegTlsQtwbLey9iOIpFUFFUQzA3Gn//8WSfLEItblYWhol+ytLS0WjuPiYmBpaUlzM3N\nERpa8TwqPB4P9vb2sLGxAZfLrdZ+q4sv4CPwQiCW9l4q05N71QaHw0FY3zAExQZJ/YI+4qCiAkyb\nBqSmMlN8Ozkxo6pTUthOVrdWXluJ3i17w1bXlu0oEmuU7ShkF2bjdPJptqPUXlWNED4+PmTatGkk\nJSWFJCcnk6lTp5LRo0dX2XjB5/OJqakpSUtLI8XFxcTW1pYkJiaW2SY3N5dYW1uTly9fEkIIeffu\nXYX7qkbMCm2+tZn03NmTNq5Wg+chT7IodhHbMSTe+/eELFxIiKYmIX5+hDx7xnYi8XuT94ZohGqQ\nZzn14Jetpegn0cRmgw3hl/LZjkIIqfm5s8qP0evWrYOioiI8PT3h5eWFBg0aYP369VUWnPj4eJiZ\nmcHY2BiKiorw8vJCdHTZOXqioqLg7u4OAwNmIipRNmoXlBQgODYYy/osq9eD2aprSa8lWHV9FbIK\nstiOItGaNgXmzWOuGAwMmIbpsWOB58/ZTiY+iy8thndbb7RUb8l2FIk3sNVAqDVQw+4Hu9mOUitV\nFoZGjRohNDQUt27dwq1bt7B06dJqDXLLyMiAoeF/6ycbGBgg45tZzJKTk5GTk4OePXuiQ4cO2L1b\ndG9mRHwEHAwc0Em/k8j2KctMNUwx1Hoowq6EsR1FKqipAcHBzEpyOjpA+/ZMgZC1pUaf5T5D1MMo\nBDpK52wHdY3D4SC0TygW8BZI9XxkClVt8PbtW4SFhSExMVE40I3D4eDChQvffV11PqWXlJTgzp07\nOH/+PAoKCtClSxd07twZ5ubm5bb9usGby+V+tz3i/ef3CL8ajjjfuCozUP+Z22Mu2m5qi2mdp6F5\n4+Zsx5EKGhpMl9Zp04AVK5h2CHd3YM4cwNiY7XS1tzB2IQI6BUC7oTbbUaRGV8OuaKPTBlvubEFA\np4A6PTaPxwOPx6v1fqosDCNGjICnpydOnjyJyMhI7Ny5E9raVf+R6Ovr4+XLl8LHL1++FN4y+sLQ\n0BBaWlpQUVGBiooKevTogfv371dZGKqy4uoKDGw1EJZaltV+DQXoN9GHj60PlsQtQcRPEWzHkSqa\nmkBICDBjBrBqFXMFMXgwUyBMTNhOVzNPsp7gdPJpJE9KZjuK1FnYcyFcolzgZ+8HVUXVOjvutx+a\ng4NruLRAVY0Q9vb2hBBC2rRpI/xZ+/btq2y8KCkpISYmJiQtLY0UFRVV2Pj8+PFj0rt3b8Ln80l+\nfj6xsbEhCQkJ5fZVjZhC7/Lf0YayWnib95ZohGqQtNw0tqNItexsQubNYxqpfXwIefqU7UQ/zvOQ\nJ1kat5TtGFLL/YA7Cb8SzmqGHzl3fq3KNoYvk+fp6uri5MmTuHPnDnKrMaG9goICIiIi4OzsDGtr\na3h6esLKygqRkZGIjIwEAFhaWqJ///5o27YtHBwc4O/vD2tr65pVuP8XfiUcHtYetKGshrQbamNi\nh4lYGLuQ7ShSTUMDWLiQGQdhbAx06QKMHCk94yAevHmA2PRYTOo0ie0oUiuYG4zwq+H4VPSJ7Sg/\nrqrKcfz4cZKbm0sePHhAnJyciL29PYmOjq5RFaqpasQkhDBzlqgvUycv3r8QcyLZlluYS7TCtMiT\nd0/YjiIz3r8nZMkSQrS1CfHwIOTePbYTfZ/bfjey8upKtmNIvRFHRrDaDby6585vydSaz9PPTgdf\nwMfaAWvrIJVsW3JpCZ5kP8HuwdLd7U7S5OUBmzYxDdUdOwKBgcwsr5Lk1utbcNvvhuRJyXQamVpK\nzk5Gl21dkDwpGeoq6nV+fLHNlZSamoqBAwdCS0sL2traGDRoEJ49e1ajkOL0+tNr7Ly3E7O7z2Y7\nikyY5DAJMSkxSMpKYjuKTGnUiFlu9NkzwNkZ8PAA+vYFLl6UnOm+F/AWYI7jHFoURMBc0xyuFq5Y\nc2MN21F+SJWFYfjw4Rg6dCgyMzPx+vVreHh4YNgwyZt3aGncUvja+dJuliLSRLkJpjpMxeK4xWxH\nkUkqKsBvvzED5YYPB8aNA7p1A06dYrdAxGfE48GbBxhjP4a9EDIm0DEQEfERUrWYT5W3ktq2bYsH\n30wtaWtri/v374s12Nequhx6/ek1bDbY4PFvj9GsUbM6yyXrPhZ9hNlaM8T5xsFCy4LtODKttBQ4\ncoTp8koIMGsWczWhUGWHctFyiXLBT+Y/YWLHiXV7YBnnF+0Ho6ZGCOIG1elxa3orqcrCMHPmTKip\nqQmvEg4cOIDc3Fz8+eefAAANDY0axP3BkFX8clPOTIG8nDxWOq8Ue5b6JiQuBInvErFnyB62o9QL\nhDCryC1dCmRmAn/+yUwD3qCB+I99M+MmhhwcgpRJKVBWkL5VGiVZak4qHLY6IGVyCtQaqFX9AhER\nW2EwNjaudBQzh8Opk/aG7/1ymZ8y0XpDayT+lgjdRrpiz1LffLlquOR7iQ4YrGOXLwPLlgF37gBT\npjDTgDcV42qaA/cNhLOpc52P1q0v2LhqEFvjc1hYGO7fv4+0tDT4+vrCzs4Ohw8fRlpamkQ0Qodd\nCcMo21G0KIhJE+UmmNp5KhZfom0Nda17d+DkSSAmhlkoyMSEucWUmSn6Y91+fRt3M+/i13a/in7n\nFACmrWH9zfVS0dZQZWFYtGgRmjRpgsuXL+PChQsYM2YMJk6UjPuP/+b9i133d+HPbn+yHUWmBXQK\nwNnUs0jOplMjsKFtW2a50du3gfx8oHVrZsK+JBF2GAuODcbMbjPRQKEO7lnVU6YapnBp5YI11yW/\nh1KVhUFeXh4AcPLkSfj7+8PFxQXFxcViD1Yd4VfCMbLtSOg11mM7ikxrotwEAR0DsPTyUraj1GvG\nxsC6dUxBaN4ccHQEhgwBrl2r3X7vZt7Frde36NVCHZjTfQ4ibkbgY9FHtqN8V5WFQV9fH2PHjsWB\nAwfw888/4/PnzxAIBHWR7bve5b/Djns7MLPbTLaj1AuTHSbjeNJxpOWmsR2l3tPWZqb8TksDevVi\nurt27w5ERwM1+ae5JG4J/uj6Bx23UAfMNc3Rz7Qf1sdXvaYNm6psfM7Pz0dMTAzatm0Lc3NzZGZm\n4uHDh+jXr19dZaywAWXO+TnILczFRpeNdZajvgs8H4isgixEDoxkOwr1FT4fOHoUCA8HPn5kZnj1\n9mbGSlQl4W0Cev3VC88mP0NDparXWaFqL/FdInru6lkn77nYeiVJgm9/udzCXJitM8PtsbdhrGbM\nXrB6JqsgCxYRFrg37h4MmxpW/QKqThECXLoELF8OxMcDEycyX9+bJX/E0RFoo9MGs7rPqrugFDwO\neaCLQRdM7zJdrMcRW68kSbT2xlq4WrjSolDHtFS1MMZ+DF3lTUJxOICTE3DiBBAbC7x+DbRqxTRU\nVzSra3J2Mv5O/Ru/dfyt7sPWc3Md52L51eUoLClkO0qFpK4wfCz6iIibEXROJJbM6DIDex/uReYn\nMfSZpETG0hKIjGQaqvX1gZ49gZ9/Bs6d+2/KjZDLIZjUaRIaKzdmN2w9ZKtriw56HbDt7ja2o1RI\n6m4lhV4Oxf039xHlHsVyqvprypkpUJJXQni/cLajUNX0+TOwZw+wejUgJweMDHiO0Nz2SJmcwsqs\nn9R/I81TJ6dCSV5JLMeoF20MBSUFMFljgnOjzsFGx4btWPXWq4+vYLvJFk8DnkJTVZPtONQPIAT4\n5x/g12MTkJ2hjt/tQjBhAqBLx4eywnmPMzysPcTWVbhetDFsvr0ZXQy70KLAMoMmBnC3cpe6qYQp\nph3Cpstr5LU4gH+Cp+HdO8DKChg9mpl6g6pbgY6BWHZ5GfgCPttRypCawlDEL8Lyq8sx13Eu21Eo\nADO7zcSGmxvw4fMHtqNQP2j51eUYbTsaXe20sWEDkJrKjKZ2c2MGzR06xHSBpcSvR4seaN64OQ4m\nHGQ7ShlSUxh23d8FGx0btNdrz3YUCszw/v5m/bHh5ga2o1A/IKsgCzvv7cTvXX8X/kxDg5nF9dkz\nYPJkYM0aZl6mZcuArCwWw9YTgY6BCIkLgYCwP3D4C7EWhpiYGFhaWsLc3ByhoaHlnufxeGjatCns\n7e1hb2+PxYsrn6gt9Eoo5vagVwuSZI7jHKy+sRr5xflsR6GqafX11fCw9oB+E/1yzykoMGtAXL4M\nHDvG9GgyNwfGjAHu3WMhbD3hbOqMBgoNEP0kmu0o/6nRStHVwOfziampKUlLSyPFxcXE1taWJCYm\nltnm4sWLZODAgVXuCwDpsaOHuKJStTDkwBCy+tpqtmNQ1ZBbmEs0QzVJak5qtV/z9i0hS5YQYmBA\nSPfuhOzfT0hxsRhD1lNHE4+S9pHtiUAgEOl+a3qKF9sVQ3x8PMzMzGBsbAxFRUV4eXkhOrp8RSTV\nbDEPdAwUdURKBOZ0n4Pl15ajiF/EdhSqCuvj1+Mn859gom5S7ddoawNz5jDzMk2dCmzcCLRoAQQF\nMQPoKNEYZDkIn/mf8Xfq32xHASDGW0kZGRkwNPxv2gQDAwNkZGSU2YbD4eDq1auwtbXFTz/9hMTE\nxEr319ekr7iiUrXQXq89bHRs8Nf9v9iOQn1HfnE+1savrfHAUAUFwN0d4PGAv/8G3rxhGqw9PZlp\nOCS/07tkk+PIYXb32VgSt4TtKAAAsa0oW9mqb19r164dXr58CVVVVZw5cwZubm54+vRphdsGBwcL\nv+dyueByuaKKStVSoGMgRh8bDV97XyjI1fEixVS1bL69GY5GjrDStqr1vmxsmCuHZcuAv/4Cxo0D\n5OWZeZlGjgSaNBFB4HrI08YT83nzEZceB8cWjjXaB4/HA4/Hq30Ykd7Q+sq1a9eIs7Oz8HFISAhZ\ntmzZd19jbGxMsrOzy/1cjDEpEemxowfZc38P2zGoCnwu+Uz0VuiRO6/viGX/AgEh588TMmQIIWpq\nhIwfT8j9+2I5lMzbfGszcd7tXPWG1VTTc6fYbiV16NABycnJeP78OYqLi3HgwAG4urqW2ebNmzfC\nNob4+HgQQqChoSGuSJQYBToGIuSyZHW5oxg77+2EbTNb2De3F8v+ORxmXYgjR4BHj5hR1D/9xKwR\nsWcPMx0HVT2jbEch4V0Cbr2+xWoOsRUGBQUFREREwNnZGdbW1vD09ISVlRUiIyMRGcnM53/48GG0\nadMGdnZ2mDp1Kvbv3y+uOJSY9TXpC1VFVcnqckeBL+Aj9EponXXe0NcHFiwAnj8Hfv8d2L0bMDRk\nvq/kLjH1FWUFZfze5XeExIWwmkOq5kqiJNuxJ8ew+NJi3PS/Wa02Jkr8dt/fjW13t4Hnw2MtQ2oq\nsHkzsHMn0z4xbhwzylpJPPPGSb0vc8KdH3UerXVa12pf9WKuJEqyuVq4oqi0CGdTz7IdhQIgIAIs\nvbyU9a7epqZAaCjw4gXg7880XBsaAjNnAikprEaTSKqKqpjiMAUhl9m7aqCFgRIZOY4cAh0DsfjS\nYnqFJwH+9/h/aKTUCH1M+rAdBQCgrAx4eQEXLwJxccz61F27Mu0T+/cDRXQojNBvnX7D2ZSzSMlh\np3LSwkCJlIe1B97mv8Wl9EtsR6nXCCFYHLcYc3vMlcjbeq1aMWtUv3zJ3FrauhUwMACmTwe+M5yp\n3mii3AS/dfwNyy4vY+X4tDBQIiUvJ4/Z3WdjcVzl815R4nc6+TQERACXVi5sR/kuZWVmkNy5c8D1\n64CKCtCnD9CtG7BjB5Bfj6fhmuwwGUcfH8WLDy/q/Ni0MFAiN7LtSDzNfoobr26wHaVeIoRg0aVF\nCHQMhBxHev6Jm5oCS5YwbREzZwJHjzJtEWPHAjdu1L/R1ZqqmvBv58/KGuvS81dDSQ1FeUXM7DaT\nXjWw5ELaBbz//B7uVu5sR6kRBQXA1RU4cYIZF9GyJTBiBNCmDbByJfD2LdsJ6870LtMR9TCqztdY\np4WBEgs/ez/cybyDu5l32Y5S7yyOW4w5jnMgLyfPdpRa09MDZs8GkpOB9euB+/eZ9okhQ4CTJ2V/\nQaFmjZrBu603VlxbUafHpeMYKLFZfX014l7E4cjQI2xHqTeuvLgC7/95IykgCYryimzHEYsPH4CD\nB5k2iLQ0wNsb8PEBrK3ZTiYerz6+QtuNbZEUkATthto/9Fo6joGSOGPbj8WVF1fw8M1DtqPUGwsv\nLcSs7rNktigAQNOmzHiIq1eBCxeYKTn69AEcHJgxErm5bCcULYMmBvBs7YmV11bW2THpFQMlVuFX\nwnE78zb2/0KnOxG366+uw/OwJ5InJUNJvn4NK+bzgX/+Ya4izp4F+vcHRo8G+vVj2iykXfr7dLTb\n3A5PA55CU1Wz2q+r6bmTFgZKrPKK82C61hS80TyRTPlMVe6nvT/B1cIV4zuMZzsKq3JygAMHgF27\ngPR0YPhwpki0bct2strxP+4P3Ua6WNRrUbVfQwsDJbFC4kLwOOsxdg/ezXYUmXUz4yaGHByClEkp\nUFZQZjuOxEhKYtaM2L0b0NAARo1iCoWuLtvJftyz3GfouKUjUialQF1FvVqvoYWBklgfiz7CdK0p\nrvpdhbmmOdtxZNLAfQPR37Q/fuv0G9tRJJJAwKw+t3s3cOwY0Lkz02jt5gaoqrKdrvp8o31h3NQY\nC7gLqrU9LQyURFsUuwjJOcn4azBdAlTU7mTeges+V6RMTkEDhQZsx5F4+flMcdizhxlt7erKFIme\nPZmV6CRZcnYyumzrgtTJqWjaoGmV29PCQEm0D58/wGydGS77XoaFlgXbcWSK23439DTuiSmdp7Ad\nRer8+y8zgd/u3UBmJjBsGDOYzt6e6e0kiUb9bxTMNcwxz2leldvSwkBJvMWXFuNJ1hPsGbKH7Sgy\n4/br2xi0fxCSJyVDRVGF7ThS7ckTYO9e5ktZmSkQw4cDJiZsJyvry1VDyuQUqDVQ++62tDBQEu9j\n0UeYrTXDJd9LsNSyZDuOTHCJcsEAswG0bUGECGFuMe3dywykMzNjCoSHB9CsGdvpGH7RfjBsYojg\nnsHf3Y4WBkoqhMSF4NHbR4hyj2I7itS78eoGPA55IHlSMu2JJCYlJcD580BUFDN3U6dOzO2mwYOZ\ngXZs+dJDKXlSMjRUNCrdjhYGSip8KvrEjGvw4cFaW0bnMKgj/ff0x2DLwRjXYRzbUeqFggJmfqZ9\n+5gR1716MUXCxYWdnk3+x/2h01AHS3ovqXQbiZwSIyYmBpaWljA3N0doaGil2928eRMKCgo4evSo\nOONQEqCxcmNM7zIdwbHfvwSmvu/KiytIyk6Cr70v21HqDVVVYOhQ4H//YwbOuboC27YxE/0NHw4c\nP163q9AF9gjEptubkFWQJfJ9i+2KobS0FBYWFjh37hz09fXRsWNH7Nu3D1ZWVuW269u3L1RVVeHr\n6wt39/JTBdMrBtmSX5wPs3VmODPiDOx07diOI5X6/NUHw9sMh5+9H9tR6r23b4EjR5jR1g8eMAXD\n05OZv0lRzFNWTTg5AY2VGyOsb8VrNkjcFUN8fDzMzMxgbGwMRUVFeHl5ITo6utx269atwy+//AJt\n7R+bNZCSXg2VGmJO9zmYe2Eu21Gk0oW0C3j+/jm823qzHYUCoKMDTJjADKB79Ijp6rpoEdC8OfDr\nr8DffzNtFeIQ2CMQW+9sxetPr0W6X7EVhoyMDBgaGgofGxgYICMjo9w20dHRmDBhAgBI5Nq0lHiM\nbT8WD98+xJUXV9iOIlUIIZh9fjYW9Vwk0zOoSis9PWDKFGbm1zt3mKnA581jioS/v+iLhEETA/jZ\n+2FRbPXnT6oOsc07WJ2T/NSpU7Fs2TLh5c73LnmCgoKE33O5XHC5XBGkpNiirKCMIKcgzLkwB7zR\nPGs2wiIAABENSURBVPqhoJqik6JRxC+Cp40n21GoKhgZAdOnM1/p6cDhw0yRSE1lpuL45Regd+/a\n326a1X0WLCMs8XvX3/HywUvweLxaZxdbG8P169cRFBSEmJgYAMDSpUshJyeHmTNnCrcxMTERFoOs\nrCyoqqpiy5YtcHV1LRuStjHIJL6AD5sNNlg7YC36mfZjO47EKxWUou2mtgjvG46fzH9iOw5VQ+np\nTJvEoUPA06dMm8QvvzBtEso17HW8MHYhkrKTsHfI3jI/r/G5k4hJSUkJMTExIWlpaaSoqIjY2tqS\nxMTESrf38fEhR44cqfA5McakWHbw0UHSPrI9EQgEbEeReDvv7iTdt3en75UMefGCkNWrCenenRB1\ndUJGjCDk6FFC8vN/bD8fP38kzcKbkfv/3i/z85qeO8XWxqCgoICIiAg4OzvD2toanp6esLKyQmRk\nJCIjI8V1WErKuFszvdAOJhxkOYlkK+IXYQFvAZb2Xkpvu8kQQ0OmTSIuDkhIALp1Y9a2bt6cuYqI\nimKWMq1KY+XGmNV9lsg6dNABbhTrLqZdxJjjY/D4t8d0BG8lVl9fjXPPzuHk8JNsR6HqQFYWM9L6\nyBHg0iWge3dgyBDmtpOOTsWv+cz/jBVXV2C242zIcZjP/HTkMyXVXKJc0Ltlb0zrMo3tKBInpzAH\nlhGWuDj6IlrrtGY7DlXHPn4ETp9mBtadPcusRDd4MNOA3bLl919LCwMl1RLeJqDnrp5ICkiq9upU\n9cX0s9NRUFKATS6b2I5CsezzZ+DcOWY9iePHme6xbm7Ml61t+anCaWGgpJ7/cX+oNVBDeL9wtqNI\njJScFDhsdUDixEQ0ayQhU3tSEqG0FLhyBYiOZgpFaSng7g4sX/5fgaCFgZJ6mZ8yYbPRBrfH3oax\nmjHbcSSCxyEP2DWzQ2CPQLajUBKMEKbx+vZtYPTo/35OCwMlE4J5wUh4l4CDHrSX0pUXVzDsyDA8\nCXgCVUUpWpiYkhgSN1cSRdXEn93+RHxGPC6mXWQ7CqsERIBpZ6dhSa8ltChQdY4WBkqiqCiqYEW/\nFZgcMxl8AZ/tOKzZfnc7FOQUMKLtCLajUPUQLQyUxBliNQTaqtrYdKt+9sLJKcxB4IVARPwUIeyP\nTlF1ibYxUBLp4ZuH6P1XbyT+lggtVS2249Sp3079BgKCDT9vYDsKJeVo4zMlcyafmYwifhEiB9af\nKVTuZt5F/7398fi3x99dy5eiqoM2PlMyZ2HPhTiZfBKXX1xmO0qdEBABAs4EYHHPxbQoUKyihYGS\nWGoN1LCm/xqMOzkOxaXFbMcRu613toIv4NPlOinW0cJASTR3K3eYqJsg7ErFa9rKioyPGQi8EIht\nrtsgLyfPdhyqnqNtDJTEe/HhBdpFtsMVvyuw0LJgO47IEUIwaP8g2OvaI7hnMNtxKBlC2xgomWXU\n1AjzeszDuJPjICACtuOI3MGEg0jNTcUcxzlsR6EoALQwUFIioFMAikqLsD5+PdtRRCq7IBtTz07F\n1oFb6VoUlMSgt5IoqZGSk4Iu27rgks8lWGlbsR2n1ggh8DzsCf3G+ljVfxXbcSgZRG8lUTLPTMMM\nS3otwcj/jZSJXkq77u/C46zHWNpnKdtRKKoMsRaGmJgYWFpawtzcHKGhoeWej46Ohq2tLezt7dG+\nfXtcuHBBnHEoGeDfzh/NGzXHothFbEeplZScFPzxzx+IGhKFBgoN2I5DUWWI7VZSaWkpLCwscO7c\nOejr66Njx47Yt28frKz+uwWQn5+Phg0bAgAePnyIwYMHIyUlpXxIeiuJ+sq/ef/CbpMdjgw9gm5G\n3diO88NKSkvQbXs3jGw7EpMdJrMdh5JhEncrKT4+HmZmZjA2NoaioiK8vLwQHR1dZpsvRQEA8vLy\noKVVv+bEoWpGt5Eutrlug9cRL7zJe8N2nB+2gLcAWqpamNRpEttRKKpCYisMGRkZMDQ0FD42MDBA\nRkZGue2OHTsGKysrDBgwAGvXrhVXHErG/NzqZ/jZ+cHzsKdUTc997Mkx7H6wGzsG7QDn2wV6KUpC\niK0wVPeP3s3NDY8fP8aJEyfg7e0trjiUDJrvNB8NFBpg9rnZbEeploS3CfA/4Y+jQ4/S9ZspiaYg\nrh3r6+vj5cuXwscvX76EgYFBpds7OjqCz+cjOzsbmpqa5Z4PCgoSfs/lcsHlckUZl5JC8nLy2Dtk\nLzps6YBO+p3g0dqD7UiVyi3MhdsBN6zotwId9TuyHYeSUTweDzwer9b7EVvjM5/Ph4WFBc6fPw89\nPT106tSpXONzamoqTExMwOFwcOfOHXh4eCA1NbV8SNr4TH3Hncw7cN7jjGivaHQ17Mp2nHL4Aj5c\nolxgpWVFxytQdaqm506xXTEoKCggIiIC/9fevcdEdaZhAH9kmUWYYrnGKJAVhwmXHRzoWgENrGi6\ngC6uW7UrTVNvQSK1RtLa2BorWmO1pH9YmhjbqCyKuA1423CxCQExQFdalCFALCWoeC0oqAvbOgzf\n/mGEHqrlgJxzhvH5JSdhnDPDw5vxe3Mu33wJCQmw2WxYs2YNQkNDsX//o+/WT0tLQ2FhIXJzc6HT\n6fDCCy/g2LFjSsUhB/bSlJdw+O+H8eq/XkX5inK7mvzWL/qR+u9UCAhk/SVL6zhEsnDmMzmM3Ppc\nfFj+IapWV8Fvkp/WcSCEQMaZDNTeqMXXb3wN/e/1w7+IaAzZ3e2qRGp70/wm0l9OR2JeIjp6OrSO\ngx1nd6DicgWKXi9iU6BxhY2BHMqm2ZuwOHgxYg/Fov1e+/AvUIAQAh+f+xh5DXk488YZeEz00CQH\n0Wgpdo2BSAsTJkzAR/M+gperF2IPxeLMG2dUXcPB1m/D2yVvo6q9CuUrynlbKo1LbAzkkDJiMuAx\n0QNz/zkXJ/9xElH+UYr/zl5rL1IKU9Br7cW5VecwyWWS4r+TSAk8lUQOa1XkKnzx1y+QnJ+MT6s/\nVXSRn+/vfI+4Q3HwmOiBoteL2BRoXONdSeTwLndfRkphCrxcvZDztxz46n3H7L37RT/21e5D5tlM\nZP45E+kvp/OrLshu8K4koqeY5jENlSsrYfI1wbTPhM/+89mYrOfQ+GMjEo8kIteSi6rVVXhr1lts\nCuQQeMRAz5X6W/V4v+x9XLpzCTvjd2Jp2FLofqcb0XtcvHUROyt34tzVc9g0exM2Rm+EsxMv15H9\nGe3YycZAz6XytnJsq9iGpo4mLA5ZjNf++Bri/hD3xEVzhBBo+LEBxS3FKG4pxg93f8C7s99F2p/S\nOD+B7BobA9EoXL13FQVNBfiq8StcvHUR3m7eCPQIhK/eF13/60Jnbydu/vcmPCd6IikoCUnGJMwL\nnMdV12hcYGMgeka2fhtuPLiBtu42dPR0wNvNGz5uPvB18+V8BBqX2BiIiEiCdyUREdGYYGMgIiIJ\nNgYiIpJgYyAiIgk2BiIikmBjICIiCTYGIiKSULwxlJaWIiQkBEajEXv27PnV83l5eTCbzZgxYwbm\nzJkDi8WidCQiIvoNijYGm82G9evXo7S0FE1NTcjPz0dzc7Nkn+nTp6OyshIWiwVbt27F2rVrlYw0\n7lVUVGgdwW6wFoNYi0GsxbNTtDGcP38eQUFBmDZtGnQ6HZYvX45Tp05J9omJicGLL74IAIiKisK1\na9eUjDTu8UM/iLUYxFoMYi2enaKN4fr16wgICBh47O/vj+vXrz91/wMHDmDBggVKRiIiomEo+iXy\nI1m0pLy8HAcPHkRVVZWCiYiIaFhCQTU1NSIhIWHg8a5du8Tu3bt/tV99fb0wGAyipaXlie9jMBgE\nAG7cuHHjNoLNYDCMauxW9NtV+/r6EBwcjLKyMkydOhWzZs1Cfn4+QkNDB/a5evUq5s2bhyNHjiA6\nOlqpKEREJJOip5KcnZ3x+eefIyEhATabDWvWrEFoaCj2798PAEhLS8OOHTvQ1dWFdevWAQB0Oh3O\nnz+vZCwiIvoN42I9BiIiUo9dzXwebjIcAGzYsAFGoxFmsxkXLlxQOaF6ODFwkJzPBQDU1tbC2dkZ\nx48fVzGdeuTUoaKiApGRkTCZTJg7d666AVU0XC06OzuRmJiIiIgImEwm5OTkqB9SJatXr8bkyZMR\nHh7+1H1GPG6O6sqEAvr6+oTBYBBtbW3i4cOHwmw2i6amJsk+RUVFIikpSQghxDfffCOioqK0iKo4\nObWorq4W3d3dQgghSkpKnutaPN4vPj5eLFy4UBQUFGiQVFly6tDV1SXCwsJEe3u7EEKIjo4OLaIq\nTk4ttm3bJjZv3iyEeFQHLy8vYbVatYiruMrKSlFXVydMJtMTnx/NuGk3RwxyJsOdPn0aK1asAPBo\nMlx3dzdu376tRVxFcWLgIDm1AIDs7GwsXboUvr6+GqRUnpw6HD16FEuWLIG/vz8AwMfHR4uoipNT\niylTpuD+/fsAgPv378Pb2xvOzopeUtVMbGwsPD09n/r8aMZNu2kMcibDPWkfRxwQOTFwkNzPxalT\npwZuYBjJ/JnxQk4dWlpacPfuXcTHx2PmzJk4fPiw2jFVIacWqampaGxsxNSpU2E2m7F37161Y9qN\n0YybdtNC5f5nFkOulTviIMCJgYPk1GLjxo3YvXv3wMLnQz8jjkBOHaxWK+rq6lBWVobe3l7ExMQg\nOjoaRqNRhYTqkVOLXbt2ISIiAhUVFWhtbcUrr7yC+vp6uLu7q5DQ/ox03LSbxuDn54f29vaBx+3t\n7QOHxE/b59q1a/Dz81Mto1rk1AIALBYLUlNTUVpa+puHkuOZnFp89913WL58OYBHFx1LSkqg0+mw\naNEiVbMqSU4dAgIC4OPjA1dXV7i6uiIuLg719fUO1xjk1KK6uhpbtmwBABgMBgQGBuLSpUuYOXOm\nqlntwajGzTG7AvKMrFarmD59umhraxM///zzsBefa2pqHPaCq5xaXLlyRRgMBlFTU6NRSnXIqcUv\nrVy5UhQWFqqYUB1y6tDc3Czmz58v+vr6RE9PjzCZTKKxsVGjxMqRU4uMjAyRmZkphBDi1q1bws/P\nT9y5c0eLuKpoa2uTdfFZ7rhpN0cMcibDLViwAMXFxQgKCoJer8ehQ4c0Tq0MTgwcJKcWzwM5dQgJ\nCUFiYiJmzJgBJycnpKamIiwsTOPkY09OLT744AOsWrUKZrMZ/f39+OSTT+Dl5aVxcmWkpKTg7Nmz\n6OzsREBAALZv3w6r1Qpg9OMmJ7gREZGE3dyVRERE9oGNgYiIJNgYiIhIgo2BiIgk2BiIiEiCjYGI\niCTYGIiGuHfvHvbt2wcAuHnzJpYtW6ZxIiJ1cR4D0RCXL19GcnIyGhoatI5CpAm7mflMZC82b96M\n1tZWREZGwmg0orm5GQ0NDcjJycHJkyfR29uLlpYWvPPOO/jpp59w9OhRuLi4oLi4GJ6enmhtbcX6\n9evR0dEBNzc3fPnllwgODtb6zyKSjaeSiIbYs2cPDAYDLly4gKysLMlzjY2NOHHiBGpra7FlyxZM\nmjQJdXV1iImJQW5uLgBg7dq1yM7OxrfffousrCykp6dr8WcQjRqPGIiG+OXZ1aFnWuPj46HX66HX\n6+Hh4YHk5GQAQHh4OCwWC3p6elBdXS25LvHw4UN1ghONETYGohFwcXEZ+NnJyWngsZOTE/r6+tDf\n3w9PT0+HXo+cHB9PJREN4e7ujgcPHozoNY+PLNzd3REYGIiCgoKBf7dYLGOekUhJbAxEQ3h7e2PO\nnDkIDw/He++9N7Da1YQJEyQrXw39+fHjvLw8HDhwABERETCZTDh9+rS6fwDRM+LtqkREJMEjBiIi\nkmBjICIiCTYGIiKSYGMgIiIJNgYiIpJgYyAiIgk2BiIikmBjICIiif8D2fvWReNlnJ4AAAAASUVO\nRK5CYII=\n", "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# A6." ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "DTFT:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this part of the lab, we will look at the DTFT of rectangular windows and triangular windows and compare their performances as low-pass filters" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Part (a):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Import functions and libraries for the lab\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from numpy import pi\n", "from numpy import meshgrid\n", "from numpy import exp\n", "from numpy import ones\n", "from numpy import sinc\n", "from numpy import r_\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the DTFT (at least 512 points) of the rectangular window:\n", "\n", "
$$ w[n] = \\left \\{ \\begin{array}{cc} 1 & -N \\leq n \\leq N \\\\ 0 & \\mathrm{otherwise} \\end{array} \\right. $$
\n", "\t\t\t\t\n", "for $ N=5,~20,~100$. Scale the DTFT so that $W(e^{j0})=1$ in your plots. Label your plots! \n", "\n", "Describe the effect of increasing $N$ on the DTFT.\n", "\n", "A code template for part a is provided." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Solution for (a):" ] }, { "cell_type": "code", "collapsed": false, "input": [ " #repeat for N = 5, 20, 100\n", " for N in [5, 20, 100]: \n", " \n", " # create 2N+1-point temporal indices (NN) from -N to N\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # create window function (w) using ones(), look at the help menu if needed\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # create 512-point frequency indices (Omega) from -pi to pi using r_\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # create matrix of appropriate temporal indices (n) and frequency indices (omega) using meshgrid\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # create the DTFT matrix\n", " DTFT = exp( -1j * n * omega )\n", " \n", " # evaluate DTFT by doing matrix multiplication\n", " W = DTFT.dot(w)\n", " \n", " # normalize amplitude at omega=0 to 1\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # create plots\n", " # plot both real and imag on the same figure, you can use W.real and W.imag\n", " ### ADD YOUR COMMANDS ###\n", " \n", " # label plots and put title and legends ( use plt.xlabel, plt.title, plt.legend )\n", " ### ADD YOUR COMMANDS ###\n", " " ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scatchpad for (a), you can use it to test your commands:" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to question:" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Part (b):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Repeat part (a) for the triangular window:\n", "$$w_\\triangle [n] = \\left ( 1- \\frac{|n|}{N} \\right ) w[n].$$" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Solution for (b):" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to question:" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Part (c):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the ideal low-pass filter with cut-off frequency $\\omega_c = 0.3 \\pi$. Truncate the impulse response of this filter using the windows in parts (a) and (b), and plot the frequency response of the resulting filters. Explain the differences.\n" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Solution for (c):" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to question:" ] } ], "metadata": {} } ] }