{ "metadata": { "name": "Filtering" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Introduction\n", "--------------\n", "\n", "Filtering means preserving certain favored signal frequencies while simultaneously suppressing others. At first, this may seem as easy as simply removing all the offending frequencies of interest in the Fourier transform and keeping the rest, but, as we will see, practical considerations prohibit this. There are many, many approaches to filtering and here we focus on the popular finite impulse response (FIR) filters. As the name suggests, these filters have no feedback loops, which means that they stop producing output when the input runs out. These are very popular in practice, with blazing-fast on-chip implementations and easy-to-understand, flexible design specifications. This section introduces the main concepts of FIR filter design." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finite Impulse Response Filters as Moving Averages\n", "\n", "Finite Impulse Response (FIR) filters have the following form: \n", "\n", "$$ y_n = \\sum_{k=0}^{M-1} h_k x_{n-k} $$\n", "\n", "with real input $ x_n $ and real output $ y_n $. These are called *finite* impulse response because they stop after running out of input (i.e. there is no feedback to keep this going indefinitely on its own). These are also sometimes called *moving average* filters or *all-zero* filters. The word *taps* is used for $ M $ so a *10-tap* filter has $ M=10 $ coefficients. For example, given the two-tap filter, $ h_0 = h_1 = 1/2 $, we have\n", "\n", "$$ y_n = x_{n}/2 + x_{n-1}/2 $$\n", "\n", "For example, for input $ x_n=1 \\hspace{.5em} \\forall n \\ge 0 $, $ y_n = 1 \\hspace{.5em} \\forall n \\ge 1 $. Note that we lose one sample in filling the filter for $ n=0 $ which means we have to wait one sample for a valid filter output. This is the filter's *transient* state. As another example, for input \n", " $ x_n= \\exp \\left( j\\pi n \\right) \\hspace{.5em} \\forall n\\ge 0 $, then $ y_n=0 \\forall n \\ge 1 $. These two cases show that this moving average has eliminated the highest frequency signal ($ \\omega=\\pi $) and preserved the lowest frequency signal ($ \\omega=0 $).\n", "\n", "Let's analyze this filter using the tools in the `scipy.signal` module.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from __future__ import division\n", "from scipy import signal \n", "\n", "fig, axs = subplots(2,1,sharex=True)\n", "subplots_adjust( hspace = .2 )\n", "fig.set_size_inches((5,5))\n", "\n", "ax=axs[0]\n", "w,h=signal.freqz([1/2., 1/2.],1) # Compute impulse response\n", "ax.plot(w,20*log10(abs(h)))\n", "ax.set_ylabel(r\"$20 \\log_{10} |H(\\omega)| $\",fontsize=18)\n", "ax.grid()\n", "\n", "ax=axs[1]\n", "ax.plot(w,angle(h)/pi*180)\n", "ax.set_xlabel(r'$\\omega$ (radians/s)',fontsize=18)\n", "ax.set_ylabel(r\"$\\phi $ (deg)\",fontsize=18)\n", "ax.set_xlim(xmax = pi)\n", "ax.grid()\n", "\n", "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAVcAAAFOCAYAAAAy6F5LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1czXf/B/DXSaWQIuamkG7cpFSYzG8sZN2YluZq7jY2\nNhdjiLlpNxczwphsLuzmIrFhQ2XXpoSOuTYtJEOoplDMJLlbnOp8fn98d46OU6dz2/l+Tu/n43Ee\n+d6c7/fV99r19vX5fr6fj4QxxkAIIcSorMwdgBBCLBEVV0IIMQEqroQQYgJUXAkhxASouBJCiAlQ\ncSWEEBOwiOKampqKHj16wMvLCytXrjR3HEIIgYT3fq7V1dXo3r07Dh48CBcXFzz99NPYsWMHevbs\nae5ohJBGjPs716ysLHh6esLNzQ02NjYYM2YMUlJSzB2LENLIWZs7gKFKSkrQqVMn5bKrqyt+/fVX\nlX0kEklDxyKENBJ1/eOf++KqbeFMSWFgDJDLYfBPuRyoqhI+lZXqf65tXV1/lsmEz8OHwKNHws+b\nNxejadPFynUyGWBrC9jZAU2bCh/Fn59c16wZ0Ly5YT+tdfyvYvHixVi8eLHu/+OZEW+ZecsL8JdZ\nn7ya6g/3xdXFxQVXr15VLl+9ehWurq5q+0VENGQqw0yaVISEhMfLcrlQYBXFt+bPmn+uqBA+Dx4A\nf/31+OetW8DVq+rrn/yp+HOTJoCDA9Cy5eOfik9ty1JpEVJT1bc7OOheqBtKUVGRuSPohLe8AH+Z\njZ1XpP/pa69fv37Iz89HUVEROnbsiF27dmHHjh3mjmVUVlbCXamdHeDoaNpzMSYU6vv3gXv3gLt3\nVT81112+LCwXFQFr16pvv3dPuBtu1Ur907p17esVHycn8RZmQrTB/X++1tbWWL9+PUJCQlBdXY3J\nkydz31Ng0qRJZju3RPK4kLdpo913pNJJCApSXy+XC0X29u26P1euPP5zWdnjP9+9KxRmZ2egbdvH\nnzZt6l52cBDya8Oc11gfvOUF+Mts7Lzcd8XShkQiqbPRmYiTojCXlgI3bz7+qfjUtiyTqRff9u2B\nDh0e/1T8uXVr7QsxIXXRVFuouIqQVCpFUG23giIllrwVFepF948/gOvXH/9U/Pn+fSk6dgxSK7qK\nP3foAHTqJBRoKxF0WBTLNdYFb5n1yauptnDfLECIgr29UBBr9MyrU1oa0K2batG9fh3IyhJ+Xrsm\nPAS8fx9wcXl83No+rVrRXTBRR3euhGjw119AcbFQaGv7FBcL3eoUhdbNDejaFXB3Fz5duwpNFVR8\nLRM1C1BxJSZ09+7jAlxUBFy6BBQWCj8vXRKKr6LQ1iy67u5CMba3N/dvQPRFxZWz4toY2qrMrSEz\nl5c/LrZP/rx8GWjXDujeXfh06/b4z506PW7vpWtsetTmSghnnJyAgADh86TqauFuNy8PuHgRyM0F\nkpOFP5eVAZ6eQqFt2lTotubtLXyaNWvwX4PoiO5cCRGp+/eFoqsovBcvAufOCcuuroCPD+Dr+/in\nlxe9eNHQqFmAiiuxIJWVQEEBcOYMcPbs45/FxUKzgq8v0Ls30KeP8Gnd2tyJLRcVV86Ka2NoqzI3\n3jJrk/evv4RmhbNngdOngexs4NQp4S23Pn2Avn0f/2zbVhyZxaRB21xHjx6NW7du6XSyJ9nY2GDv\n3r1o0aKFQcchhGjWrBnQr5/wUZDLhbvckyeFYrtqlfDTwUEosgMGAM88Azz9NLXjGhvduRLSyDAm\n9FQ4cQI4dkz4nD0L9OwpFFrFx82N+ufWh5oFqLgSotHDh8LdraLYHjsmFOHBg4GgIGDIEKHXAhVb\nVZpqiwjemq7fd999h169eqFJkybIzs5W2RYXFwcvLy/06NEDBw4cMFNC45JKpeaOoBPe8gL8ZTZ1\nXjs74P/+D5g3D9izBygpEQpseDjw669ASAjQsSMwdizwxRdCj4X67lca+zXWq+OGXC5HYWEhysrK\nIJFI0K5dO7Rr1w62trZGDafg6+uLpKQkTJ06VWV9bm4udu3ahdzcXJSUlCA4OBh5eXmwEsNIG4Rw\nTCIRmgXc3ICJE4V1hYWAVApkZABLlwrFNTQUCAsDgoNNP9Ywb7RuFigvL0dCQgL27t2L48ePo6qq\nCq1atUKTJk1QVlaG6upq9O7dG5GRkZg8eTJcXFyMHnbIkCFYs2YN+vTpA0C4a7WyssKCBQsAAKGh\noVi8eDEGDBig8j1qFiDEuBgD8vOB/fuFz88/Cz0RwsKET+/ejaMJwaA3tBhjWL16NRITE/HCCy8g\nNjYW/fv3R6tWrVTmj7lz5w5OnjyJI0eOIDw8HMHBwfjoo49gb8IXp69du6ZSSF1dXVFSUlLrvpMm\nTYKbmxsAwMnJCf7+/spuF4p/DtAyLdOybsvdugF+flI8fAjI5UHYvx8ID5dCJgPGjAlCVBQgl0vR\npIk48hq6LJVKkfD3HEyKelInpsFff/3FxowZw7766ismk8k07aqiurqa7dq1i0VERLBr165p9Z3g\n4GDm4+Oj9tm3b59yn6CgIHby5Enl8owZM9j27duVy5MnT2Z79uxRO3Y9v6boZGRkmDuCTnjLyxh/\nmXnLe/48Y5MnZ7C+fRlr25axyZMZ++EHxh4+NHeyuulzjTXVFo13rqtXr8by5cvRtWtXzRX6CVZW\nVoiOjsaQIUOwbNkyxMfH1/ud9PR0nc4BqE9OWFxcbJLmCEKIbnr0ACZMAL76Shg7ISkJiIsT1r30\nEvDKK8Czz4pjIHJT4aor1pAhQ7B69Wr07dsXgPBAa9y4ccjKylI+0CooKFCb7pbaXAkRh+JiYMcO\nYNs24M4dYPx4odDyOu2d0btiTZgwAd7e3ggPD8fy5ctx8eJFgwLWJykpCZ06dUJmZiZGjBiBsLAw\nAIC3tzeio6Ph7e2NsLAwbNiwQeM84oQQ83J1Bd55B/jtN+D774VxEoKDhZcWtm4VpuqxGPq0Tbz8\n8sts/vz57O7du+zWrVts2bJl7OWXX2ZXr17V53Amp+evaTa8ta/xlpcx/jLzlpcx7TNXVjK2bx9j\n4eGMOTszNnu20Gbb0Bq0zbUuO3fuVFmOjY3FkSNH8H//9384dOgQPD09jVD2CSGNgbU1MHKk8Ckq\nAr78UngjzM9PeKlh2DA+u3UZtc111qxZyMvLw/79+411SKOgNldC+PLoEfDNN8Dq1YCtrVBko6MB\nGxtzJ1Nlstdf5XI5qqqqlMvdunXD//73P0MOSQghaNoUeO01YUCZ5cuB//xHGNtgyxagRskRNYOK\n648//og2bdogMjIS8fHxWLVqFYYOHWqsbI2WotMyL3jLC/CXmbe8gHEySyTCG1+HDwOJicLH2xv4\n+mthihxjMvY1Nqi4vvDCC7h27Rpmz56N06dPo1WrVtixY4exshFCiNKzzwrjGmzaBGzYILTJinms\nJqO1uTLGMHLkSHh4eGDdunXGOKTRUJsrIZaFMWDfPmDuXKBXL+CTTwAPj4bPYfQ218TERMjlcrWT\nhIWFYevWrfockhBCtCaRAC++KEzYOHAgEBgIvPuuMC6tWOhVXAMDA/Hee+/h22+/RcXfvX7v3LmD\nvXv3onPnzkYN2Bjx1r7GW16Av8y85QUaJnPTpsCCBcIkjfn5gL8/8Msv+h3L2Hn16ufavXt3LF++\nHOfPn8f69etRXFyMwsJC9OrVCzExMUYNSAgh9enQAfj2W2Gg79GjgZdfFsYysLMzXyauxhbQF7W5\nEtJ43LoFTJsmzJbw7bfCdOOmoneb6/Lly3Hjxg29T1xaWorZs2fr/X1CCNGVszOwaxfwz38KU9d8\n8415cmgsrjNnzsScOXOQmJiIah06lTHGsHv3bkyZMgULFy40OGRjw1v7Gm95Af4y85YXMG9miUQo\nrunpwOLFwOzZ9feLbdB+rg4ODkhMTERZWRn69OmDDz74AAcOHMCdO3fU9n3w4AGOHDmCJUuWICAg\nAJmZmdixYwfat29vcMh33nkHPXv2hJ+fH6KiolTOb4kTFBJCjMPfX5hg8cwZIDISuHev4c6t0xxa\nW7ZswY8//oijR49CIpHA0dEREokEt2/fRnV1NQYMGIARI0ZgwoQJcHV1NVrI9PR0DBs2DFZWVso7\n4RUrVijHcz1+/LjGCQqpzZWQxq2yUmiHPXECSEsD2rUzznE11Ra9HmjJZDL88ccf+PPPPyGXy9G2\nbVu0b9/epPNlKSQlJWHPnj3Yvn07TVBICNEaY8CSJUJ77KFDwlThhjJogkIAWLRoEeLi4pTLtra2\n6Ny5s1n6tG7evBljx44FYLkTFMbHx4s6H+95pVIpcnJylA9bxZDH0vIqKCb1E0OeoKAgLF4MlJRI\n0b8/cOxYEDp10i2v1FgTFCqEhobqPIisrrSZoPCjjz5iUVFRymWaoFAceMvLGH+ZecvLmLgzr17N\nmKcnY3/++XidsQfL1qpZwNraGkOHDsWwYcMwdOhQ9OvXr8GnU0lISMCXX36JQ4cOwe7vnsErVqwA\nAGU7bGhoKJYsWYLAwECV71KzACHkSe+/Lwz8cvgw0Ly5fsfQWFu0qc4ODg7Mw8ODSSQSJpFImJOT\nE4uIiGBr165lp0+fVtl35syZOlf/+uzfv595e3uzmzdvqqw/d+4c8/PzY48ePWKXLl1i7u7uTC6X\nq31fy1+TENKIyOWMTZrE2AsvMFZVpd8xNNUWrcYWCA0NRUFBAfLy8rB+/Xo899xzOHDgAGJiYuDv\n74+nnnoK0dHR2LhxI44dO6bfXwEazJw5E/fv38fw4cMREBCA6dOnA7DcCQprtgHxgLe8AH+ZecsL\niD+zRAJ88YXQPeujj8w0toBivABPT094enpi+vTpmDhxIt5++21IpVIcOXIE6enp2L17t0mKW35+\nfp3bYmNjERsba/RzEkIsn40NsHMn0LcvYG8P/P0Myyj0Hlvgtddew5YtW5TLcrkcp0+fxpgxY0w+\n1bauqM2VEKLJTz8Jc3RlZ+vWRcvg8Vznz59f7z5WVlYICAhAQECA9skIIUQEBg8Gpk4VPsa6D9Oq\nuJ47d07rA77//vt6hyECsbdVPYm3vAB/mXnLC/CX+dlnpbhyBdi2zTjH06q4pqWlITw8HOvWrUNu\nbq7GfXv16mWUYIQQ0pBsbITZZd95B7h92/DjadXm6ujoiPbt2ysfLHXo0AHNmjXDwoUL8dxzz8HT\n01O571tvvYV///vfhiczImpzJYRoa+pUoFkzYO3a+vc1eGyB6OhofPvttyguLsbhw4dx+PBhZGRk\n4OrVqwCEYjto0CAMGjQIW7ZswYkTJ3T7bUyMiishRFs3bwrTdx89CvTooXlfg18iOH78eK3rCwoK\n2BdffMHGjBnD2rVrxyQSCbOystK+B24D0fLXFA0xvzZYG97yMsZfZt7yMsZf5pp54+IYGzu2/u9o\nqi1a9XPt169fres9PDzg4eGBN954A4Dw4CsqKkqbQxJCiGi99Rbg7i5MFaPvNDFGn0NrzJgx2Llz\npzEPaTBqFiCE6GrpUuD334G/B8GqldHHc9XkwoUL6FFfQ0UDo+JKCNFVeblw93rmDODiUvs+Br9E\noAuxFVYe8dY/kLe8AH+ZecsL8Jf5ybxOTsDYscCXX+p3PKMXV0IIsRTTpgmDu1RW6v5djc0Co0eP\nxq1btwzJBhsbG+zduxctWrTQ+xjvv/8+9u3bB4lEAmdnZyQkJKBTp04AhAkKN2/ejCZNmuDTTz/F\n888/r/Z9ahYghOhr4EDgvfeA8HD1bQ3a5moK9+7dg4ODAwDgs88+w+nTp/HVV1/RBIWEEJP797+B\nX34Bvv5afVuDtrmagqKwAsD9+/fRpk0bAEBKSgrGjh0LGxsbuLm5wdPTE1lZWeaKaTS8t1XxgLfM\nvOUF+MtcV97oaOCHH4D793U7nlb9XOuTnJyMlJQUnD9/Hvfu3YOzszNcXV0RFRWF0aNHG+MUePfd\nd7Ft2zbY29srC6ilTlCYk5MjqjyWllf694R/YspjaXlrEkseffOeOyeFpyeQnh6EVq20n6DQ4GaB\n9957D3fv3sXAgQPh6OgIW1tbVFRU4NatWzh69CjatGmjnOtKk+HDh+OPP/5QW798+XKMHDlSubxi\nxQpcvHgRW7ZswcyZMzFgwACMHz8eADBlyhSEh4ervchAzQKEEEN8+ilw+jTwn/+orjd4am1NOnfu\njDfffLPWbRMnTsSmTZu0Ok56erpW+40bNw7hf7csu7i4KMc3AIDi4mK41NUhjRBC9DRiBBAXB8jl\ngJWWjakGt7levXoVcrm81m2PHj3C5cuXDT2FyjQvKSkpygG5IyIisHPnTshkMhQWFiI/Px/9+/c3\n+Hzm9uQ/U8SOt7wAf5l5ywvwl1lTXg8Pod/rqVPaH8/gO9fnnnsOvr6+cHd3h5OTE+zs7MAYQ2lp\nKc6ePYtVq1YZegosWrQIFy9eRJMmTeDh4YGNGzcCUJ2g0Nra2mImKCSEiM/QocCRI8J8W9owSles\nv/76C0eOHMGVK1dQVlaGli1bwsvLC4MHD4adnZ2hhzcYtbkSQgy1Ywfw3XfA3r2P13Hfz9VQVFwJ\nIYYqLgb69AFu3BCm5QbM3M81Ly/P1KewOJbUViVWvGXmLS/AX+b68rq6CjMUaFvSTF5cExMTTX0K\nQghpEAMHAseOabevwc0Cr7/+OgoLC+vcfubMGZSWlhpyCoNRswAhxBhWrBCmgVmzRlg2aT/Xd999\nFx999BEmTZpU60lWr15t6CkIIUQUfH2Bdeu029fgZgEPDw/07dsXzz33HIKCgtQ+L774oqGnaHQs\nra1KjHjLzFtegL/M2uTt3VsYPFsbRmlznTFjRp3bFPNrEUII71xdgYcPhaaB+ujV5hoTE4MRI0Zg\n2LBhatvkcjm+/vpr2NnZ4R//+IeuhzYJanMlhBjLoEHAkiXCSwVGb3N98OABfH19a922cOFCpKen\no2vXrrCyssJLL72kzykIIUSUfHyAc+eE4qqJXs0CHTt2xKeffgo/Pz98+OGHKtu2bduGTZs2Yffu\n3UhLS9Pn8I2eJbZViQ1vmXnLC/CXWdu8np7ApUv176dXcb137x4uXbqEsLAwZGRk4JtvvgEAVFZW\n4saNG/Dx8YGVlRU6d+6sz+EJIUS03N2FKbfro1ezgJ2dnbKgyuVyvP/++wCA8vJyAEDz5s0BQG26\nFaIdxSC9vOAtL8BfZt7yAvxl1javu7sJ71xrjjxlZWWFpk2bAgCqq6tV9jP2Q6Q1a9bAysoKZWVl\nynVxcXHw8vJCjx49cODAAaOejxBCnuTuDhQWAvWVN72K6507d/DKK69g0aJFGDx4MBwdHVFRUYHE\nxEQ0adIEly9fBmNM45tburp69SrS09PRpUsX5brc3Fzs2rULubm5SE1NxfTp0+scW5YnltpWJSa8\nZeYtL8BfZm3zOjgA1tbAnTua99OruK5YsQL29vZITU1FREQEunbtigULFqCiogLnzp3D5MmT8Y9/\n/AND63ucpoOYmBi1sWEtdYJCQoi4dewI1DFdn5Jeba7NmjXDF198obIuIiJC+edly5ahoKAA48aN\n0+fwalJSUuDq6orevXurrLfUCQoV68SSx9Ly1jchnViXectrictSqTBB4Z07wMqVbtDEoIFbfv/9\nd6SlpaGyshJDhgxRK366qGuCwmXLlmH58uU4cOAAWrZsia5du+LEiRNwdnamCQoJIWbx6qtCP9fX\nXjPBeK6LFi1Ct27dMGPGDMyZMwf+/v5466239A6bnp6OM2fOqH3c3d1RWFgIPz8/dO3aFcXFxejb\nty9u3LhhsRMUPnmnIna85QX4y8xbXoC/zLrk1aZZQK/i+vnnn6O0tBQnTpzA9evX8fvvv+PAgQMo\nLS3Fv//9b30OWScfHx/cuHEDhYWFKCwshKurK7Kzs9GuXTuLnaCQECJuTz1V//gCerW5nj17Fl9+\n+aXKuq5duyI4ONjkA7XU7AZmqRMU1mzL5AFveQH+MvOWF+Avsy55nZ2BnBzN++hVXDX907t169b6\nHFJrl57ovRsbG4vY2FiTnpMQQmpydgZu3dK8j17NAnU9kQeEPrDEMJbcViUWvGXmLS/AX2Zd8rZu\nbaLi2r17d0yePBnZ2dm4efMmioqK8NNPP+HVV1+Fj4+PPockhBBuaHPnqndXrLlz5yI+Pl6lG8Kb\nb76JTZs26XM4k6KuWIQQYyotBbp3B8rK6q4tBvVzvXDhAtLS0lBdXY2goCD06dMHGzduxLRp0/QO\nbQpUXAkhxlRVBdjZAdXVBhTXsrIynD17VqsTyuVyzJw5E2e0nWSmgfBWXGu+7cQD3vIC/GXmLS/A\nX2Zd8zo5AXfuGDATQU5ODoKDg7U+oSV0hSKEkPo0b6558JZ671xzcnKwatUqbN++vd7xWRljGDp0\nKDIyMvQKayq83bkSQsSvWzcgP9+A1189PDwwd+5crQa+lkgk+OCDD3RPSQghnPl7ToA61VsxHRwc\n0LdvX+XyrVu3cOLECaSlpeGHH37Azz//jJs13gMbMmSI/mkJAMvuHygWvGXmLS/AX2Zd89ZXXLV+\nQ2vv3r1YunQpTp8+Xev2gIAAfPDBB3jxxRd1CkgIITyqr7hq1RVr27ZtiI2Nxbhx4+Dj44OWLVui\nRYsWkMlkuHfvHm7duoWTJ09i7969+PTTTzFhwgRj5TcKanMlhBhbVBSQlGRAbwEASEtLw4ULF5QT\nD9ZlxYoVeOutt0RXXAkhxNgMbnMFgF69etVbWAGgTZs28PPz0yqYLhYvXgxXV1cEBAQgICAA+/fv\nV26zxAkKLb2tSgx4y8xbXoC/zGZpcz1//jzKy8vh5OSkcb+7d+/W2SZrCIlEgpiYGMTExKisrzlB\nYUlJCYKDg5GXl0dTehNCTK5ZM83btSquY8aMgZeXF0aNGqVsc23evDmaNGkCuVyOGzduIDc3F999\n953aJILGUlu7Rl0TFNacV4tHPL3VAvCXF+AvM295Af4y65rXKHeu4eHhSElJwZIlS5CQkICqqiqV\n7c2aNcPw4cORmJiI0NBQnQJq67PPPkNiYiL69euHNWvWwMnJyWInKKRlWqZlcS5L/56gEACKi92g\nic4Dtzx69AiFhYUoKyuDtbU1nnrqKXTs2BG2tra6HEaNpgkKBwwYgLZt2wIA3n//fVy/fh3/+c9/\nLHaCQqmFv5MtBrxl5i0vwF9mXfN+9hnw9tsG9hao6e7du+jWrZtKu6ZMJkN1dTWaNGmi6+GU0tPT\ntdpvypQpGDlyJABY7ASFhBDxq3e6PqalTz/9lLVu3ZpJJBLm7OzM1q1bp9x2+fJltmjRIhYWFsZG\njRql7SG1du3aNeWfP/nkEzZ27FjGGGPnzp1jfn5+7NGjR+zSpUvM3d2dyeVyte/r8GsSQojWNNUW\nrZoFduzYgfHjx6Nfv35wd3dHQUEBTp06hdGjR2Pnzp3KkbDi4uLw7rvvQi6XG/7XQg2vvvoqcnJy\nIJFI0LVrV3z++edo164dAGD58uXYvHkzrK2tsW7dOoSEhKh9n7dmAUIIHzTWFm2q84ABA9j333+v\nsu706dNs8ODBbMqUKcp1cXFxTCKR6FH/TUvLX1M0MjIyzB1BJ7zlZYy/zLzlZYy/zPrk1VRbtOoQ\n2rFjR7zwwgsq63r37o2MjAy0atUKS5cuNbD+E0KIZdGqWSAmJgaffPJJndvj4+NhZWWFiooKLFq0\nyOjNAoaiZgFCiCloqi1a3bm6urri4sWL+Oc//6ns9lTT7Nmz0aZNG+zdu5dmIiCEEGhZXGfOnIlt\n27Zh69atOHbsWK37jBs3Dh9++CGa1fdOGKmXotMyL3jLC/CXmbe8AH+ZjZ1Xq+JqY2ODjz76CH/+\n+afGyQdDQkJQVFRkrGyEEMItg6bW5gW1uRJCTMHgNldCCCG6oeIqQo29raoh8JaZt7wAf5nN0uZK\nCCFEN9TmSggheqI2V0IIaWBUXEWosbdVNQTeMvOWF+AvM7W5NgI5OTnmjqAT3vIC/GXmLS/AX2Zj\n5+WmuH722Wfo2bMnfHx8sGDBAuV6S5z9tby83NwRdMJbXoC/zLzlBfjLbOy8Os9EYA4ZGRnYt28f\nfvvtN9jY2ODmzZsAaPZXQoh4cVGFNm7ciEWLFsHGxgYAlPNp1TX7K+94e4WYt7wAf5l5ywvwl9nY\nebnoihUQEIAXX3wRqampsLOzw+rVq9GvX79aJygMCwvDSy+9pPJ9GqmLEGIqdZVQ0TQLaJr9taqq\nCrdv30ZmZiaOHz+O6OhoXLp0qdbj1FZIOfj7gxBiYURTXDXN/rpx40bldNlPP/00rKysUFpaSrO/\nEkJEi4s218jISBw+fBgAkJeXB5lMhjZt2iAiIgI7d+6ETCZDYWEh8vPz0b/e+W4JIcT0RHPnqsnr\nr7+O119/Hb6+vrC1tUViYiIAwNvbG9HR0fD29oa1tTU2bNhA7auEEFHg4oEWIYTwhotmAUII4Q0V\nV0IIMQEqroQQYgJUXAkhxASouBJCiAlQcSWEEBOg4koIISZAxZUQQkyAiishhJgAFVdCCDEBKq6E\nEGICVFwJIcQEqLgSQogJUHElhBAToOJKCCEmQMWVEEJMwCKKa2pqKnr06AEvLy+sXLnS3HEIIYT/\nmQiqq6vRvXt3HDx4EC4uLnj66aexY8cO9OzZ09zRCCGNGPd3rllZWfD09ISbmxtsbGwwZswYpKSk\nmDsWIaSR42KCQk1KSkrQqVMn5bKrqyt+/fVXlX1o0kJCiKnU9Y9/7u9ctS2cHTsyDB/OkJbGIJcz\nMCbez7/+9S+zZ7DkvDxm5i0vj5n1yasJ98XVxcUFV69eVS5fvXoVrq6uavsVFgLjxwNz5wL+/sC2\nbYBM1pBJtVdUVGTuCDrhLS/AX2be8gL8ZTZ2Xu6La79+/ZCfn4+ioiLIZDLs2rULERERavvZ2gIT\nJwK//QasXAls3Qq4uwMffwzcuWOG4IQQi8Z9cbW2tsb69esREhICb29vvPzyyxp7CkgkQGgocPAg\n8P33QE6OUGTnzQNq3ACb1aRJk8wdQSe85QX4y8xbXoC/zMbOy31XLG1IJBKN7SNXrgDx8UBCAjBi\nhFBo/fz0cUF9AAAgAElEQVQaLh8hhE+aagv3d67G0Lkz8MknwKVLgK8vEB4OPP88cOAAYI6/eqRS\nacOf1AC85QX4y8xbXoC/zMbOS8W1BicnYP58vh5+EULEiZoFNGAMSEsDVq8GLlwAZs0C3nwTcHQ0\nQUhCCHeoWUBPPDz8IoSIExVXLQUEAF9/DZw6BcjlwgOvV14BTp82/rkae1tVQ+AtM295Af4yN8o2\n1++++w69evVCkyZNkJ2drbItLi4OXl5e6NGjBw4cOGDyLGJ7+EUIEScu2lwvXLgAKysrTJ06FWvW\nrEGfPn0AALm5uRg3bhyOHz+OkpISBAcHIy8vD1ZWqn9n6Nvmqg2ZDNixQ2iXtbISmgxefll4aYEQ\nYtm4b3Pt0aMHunXrprY+JSUFY8eOhY2NDdzc3ODp6YmsrKwGzUZvfhFCasP1qFjXrl3DgAEDlMuu\nrq4oKSmpdd9JkybBzc0NAODk5AR/f38EBQUBeNzWYuhyaGgQQkOBL7+UYtcuYMWKILz2GtC/vxRP\nPaX98eLj402Sz1TLvOWVSqXIycnB7NmzRZPH0vIqBAUFiSaPMfJKpVIkJCQAgLKe1ImJRHBwMPPx\n8VH77Nu3T7lPUFAQO3nypHJ5xowZbPv27crlyZMnsz179qgd21y/5uXLjM2Zw1irVoxNmMBYTo52\n38vIyDBpLmPjLS9j/GXmLS9j/GXWJ6+m2iKaO9f09HSdv/PkiFjFxcVwcXExZiyDKB5+ffAB8MUX\nwsOvXr2Edtnhw4WuXrVR/I3JC97yAvxl5i0vwF9mY+flos21Jlaj8TgiIgI7d+6ETCZDYWEh8vPz\n0b9/fzOmqx29+UVI48NFcU1KSkKnTp2QmZmJESNGICwsDADg7e2N6OhoeHt7IywsDBs2bBD1rAO2\nWj78qtkGxAPe8gL8ZeYtL8BfZmPnFU2zgCajRo3CqFGjat0WGxuL2NjYBk5kGMWbX6GhwksJq1cL\nRfa114RXbAkh/OOin6uhTNnP1Vho2ENC+MN9P9fGgN78IsSyUHEVGScnoV8sTw+/eGtbA/jLzFte\ngL/Mxs5LxVWktH34RQgRJ2pz5Yji4Vdq6uOHX506mTsVIY0X922u77zzDnr27Ak/Pz9ERUXhTo1b\nt4YeFcucGnLYQ0KIYbgors8//zzOnTuH06dPo1u3boiLiwMgjIq1a9cu5ObmIjU1FdOnT4dcLjdz\nWsPV1/YjtodfvLWtAfxl5i0vwF/mRtnmOnz4cOUwgoGBgSguLgYgjlGxzIne/CJEvLh4iaCmzZs3\nY+zYsQDENyqWsZYV67Td/5dfpOjSBfjttyCkpQHvvitFTAwwf34Q3nwTOHVKXHnFslwzuxjyWFpe\nS1yW6jAqlmgeaA0fPhx//PGH2vrly5dj5MiRAIBly5YhOzsbe/bsAQDMnDkTAwYMwPjx4wEAU6ZM\nQXh4OKKiolSOYSkPtHRBD78IMT0uHmilp6fjzJkzah9FYU1ISMCPP/6Ir7/+WvkdsY+Kpa8n71T0\nQXN+acZbZt7yAvxlNnZe0RRXTVJTU/Hxxx8jJSUFdnZ2yvW8jIplTmJ7+EVIYyGaZgFNvLy8IJPJ\n0Lp1awDAM888gw0bNgAQmg02b94Ma2trrFu3DiEhIWrfb4zNAnWhOb8IMR5NtYWL4mooKq7qGAPS\n0oQie/Gi0Cb7xhuAo6O5kxHCD6O3uV68eBFJSUn4/PPP8cUXXyApKQn5+fkGhSSPNURblWLYw4MH\ngX37hLZZd3fhTrZGM7ZWeGtbA/jLzFtegL/Mxs6rdVes3NxcbNq0Cbt37671qT4AtG/fHv/4xz8w\ndepUeHt7Gy0kMS3Fwy/FsId+fjTsISGGqrdZoKCgAAsWLEBSUhKaNWuGQYMGYcCAAfDw8ICzszMY\nYygrK0NBQQEyMzNx9OhRVFRUICoqCitXroSHh0dD/S51omYB3ZSXC3N+rVun3ZxfhDRWBrW5Nm3a\nFL6+vpg1axaioqLQvHlzjSe7f/8+9uzZg3Xr1iE3NxcPHz7UP7mRUHHVDz38IkQzjbWlvqljk5OT\ndZxs9rGkpCS9v2tMWvyaoiK2KYnlcsb272ds2DDGXF0Z+/hjxsrLH28XW15t8JaZt7yM8ZfZ2FNr\n1/tA68UXX9S7qkdGRur93Zref/99+Pn5wd/fH8OGDVN5caAxjYplLsZ8+EVIY8FFV6x79+7BwcEB\nAPDZZ5/h9OnT+Oqrr5Cbm4tx48bh+PHjKCkpQXBwMPLy8pSDvChQs4Dx0ZxfhHDy+qsmisIKCG26\nbdq0AUCjYpkTvflFiGY6j4o1ZMgQSDQ8NpZIJLC3t0fnzp0xfPhwREZGatxfW++++y62bdsGe3t7\nZQG11FGx4uPjRZ2v5rKTE2BrG4+EBH9cuxaEuXOBv/6S4uWXgcWLg2BrK668iuWcnBzMnj1bNHks\nLa+CYiQpMeQxRl6pDqNi6fykp0uXLqxt27ZMIpEwiUTCnJycmJOTk3K5bdu2zNnZWbn87LPPsvv3\n79d73ODgYObj46P22bdvn8p+cXFxbNKkSYwxxmbMmMG2b9+u3DZ58mS2Z88etWPr8WuaFc8PAup7\n+CUWPF9jXvCW2dgPtHSuOoWFhczNzY3Nnz+f/fnnn8r1N27cYO+88w7r0qUL+/3331lpaSmbN28e\nk0gk7J133tE5dF0uX77MevXqxRgTCm1cXJxyW0hICMvMzFT7Dm/F1VJkZzM2bhxjrVszNncuY1eu\nmDsRIcalqbbo/EArMjISzZs3Vxn6r6Zx48bhwYMHSElJAQCMHDkS58+fR0FBgS6nUZGfnw8vLy8A\nwgOtrKwsbNu2TflAKysrS/lAq6CgQK0Zgh5omRc9/CKWyqgPtDIyMjB48OA6tw8aNEilDePJrlP6\nWLRoEXx9feHv7w+pVIo1a9YAALy9vREdHQ1vb2+EhYVhw4YNRmnfNbea148H9eUV48MvS7vGYsRb\nZmPn1fmBFmMM58+fr3P7xYsXVSq5lZUV7O3t9Uv3t927d9e5LTY2FrGxsQYdnzQMxZxfs2cLb37N\nnUtvfhELpmsbQ1RUFGvatCn75ptvVNbL5XL29ddfM1tbWxYVFaVcP2nSJObn56fraYxKj1+TNABe\nHn4RUhdNtUXnNteioiIMGjQIJSUl6NixIzw9PQEI7aLXr19Hx44d8b///Q9ubm6oqKhAeHg4Ro4c\niZiYGBP81aAdanMVP5rzi/DIqG2ubm5uyMnJwbx58+Dg4IDMzExkZmbCwcEB8+bNw+nTp5X9v+zt\n7ZGRkWHWwsqjxthW1ZBzfgGN8xo3NN4yGzuvXm9oOTs7Y9WqVTh//jwePnyIhw8f4sKFC1i1ahWc\nnZ2NGpA0LmJ8+EWIPgwaW+DRo0coLS1FmzZt0LRpU2PmMipqFuAXDXtIxMzoYwucPHkSQ4YMQYsW\nLdC5c2f8/PPPAIAbN25g6NChOHjwoP5pNVizZg2srKxQVlamXEejYlk2W1tg4kTgt9+AlSuBrVsB\nDw+h2N65Y+50hNRN5+Kak5ODwYMH49KlS3j11VdVqna7du1QUVGBrVu3GjUkAFy9ehXp6eno0qWL\ncl1ubi527dqF3NxcpKamYvr06ZDL5UY/d0Nr7G1VtTH2sId0jU2Pt8xmb3P94IMP0KFDB5w9exYr\nV65U2z5s2DCTjEwVExODVatWqayjUbEap4Z++EWIPnR+ieDo0aNYuHAhHBwc8OjRI7XtnTt3rnNk\nKn2lpKTA1dUVvXv3VllvqaNiKdaJJY+Y837yCTB0qBTffw+EhwehVy9g+HAp+vUDhgzR/P2a2Rsq\nryHLvOW1xGWpKUfFsrOzY5s2bWKMMXbz5k0mkUjYoUOHlNs//vhj1rx5c10PW+eoWCkpKSwwMJDd\nuXOHMcaYm5sbKy0tZYxZ7qhYRD+PHjGWkMCYjw9jvXszlpgorCPEVDTVFp2bBdzd3XHy5Mk6t2dk\nZOg1rXZ6ejrOnDmj9nF3d0dhYSH8/PzQtWtXFBcXo2/fvrhx4wZcXFxUxi0oLi6Gi4uLzucWmyfv\nVMROLHltdXj4JZbM2uItL8BfZmPn1bm4jh8/HomJiUhPT1cZJIUxhjVr1mD//v145ZVXjBbQx8cH\nN27cQGFhIQoLC+Hq6ors7Gy0a9cOERER2LlzJ2QyGQoLC5Gfn4/+/fsb7dyETzTnFxEFXW+DHz58\nyIKCgphEImHe3t5MIpEwPz8/1qFDByaRSFhISAirqqoy5E5bo65du7Jbt24pl5ctW8Y8PDxY9+7d\nWWpqaq3f0ePXJBbm8mXG5sxhrFUrxiZMYCwnx9yJiCXQVFv0eomgsrIS69evx/bt23H+/HkwxtCt\nWze8+uqrmDVrFqytdX5OZlL0EgFRKC8HvvgCWLcO6NVLuJsdPly42yVEV5pqCxezvxqKt+Ja88k7\nD3jLCwDp6VJcuxbEzZtfPF5j3jLrk5f72V8JMTYbG3rzi5hWvXeu9c32+iTGGCQSCQ4fPmxwOGPh\n7c6VmEfNYQ9ffx14+20a9pBoZlCzgJubm9oB/vrrL5SWlgIAHB0dAQB3/v7rvk2bNmjevDkKCwuN\nEt4YqLgSXdCcX0RbBjULFBUVobCwEEVFRSgqKsKhQ4dgb2+PWbNm4dq1a7h9+zZu376NkpISvP32\n27C3t8ehQ4eM/ks0Jo29f2BD0JRZjMMeWto1FiOz93OdM2cOnnnmGaxduxbt27dXru/QoQPi4+Mx\nYMAAzJkzx6ghFy9eDFdXVwQEBCAgIAD79+9XbqNRsYipKOb8KiwExo8X5vzy9we2bROGQiREI137\ndbVs2ZJt3Lixzu0bNmxgLVu21PWwGi1evJitWbNGbf25c+eYn58fk8lkrLCwkHl4eLDq6mq1/fT4\nNQlRQ3N+kSdpqi169RbIzc3Va5shWC3/HqNRsUhDqvnmV0rK4ze/3nmH3vwi6nTu7R8SEoKNGzei\nb9++ePXVV5U9CeRyORITE7Fp0yZERkYaPehnn32GxMRE9OvXD2vWrIGTk5PFjooVHx8v6ny855VK\npcjJycHs2bMNOt7XXwfhyhVg7lwpvL2ByMggzJsH3L4tzrwNvaxYJ5Y8xsgrNeWoWFeuXGFubm5M\nIpGwDh06sMGDB7PBgwez9u3bM4lEwrp06cKuXLmi8+21plGxbty4weRyOZPL5ezdd99lr7/+OmPM\nckfFysjIMHcEnfCWlzHjZ759m7GVKxnr2JGx4cMZS0sTmhGMha6x6emTV1Nt0esNrfLycqxatQrJ\nycm4dOkSAGG0rMjISMyfPx9OTk66HlJrRUVFGDlyJM6cOYMVK1YAABYuXAgACA0NxZIlSxAYGKjy\nHeqKRRoKzfnVuHD/+uv169fRoUMHAMDatWtx/PhxfPPNN8jNzcW4ceOQlZWFkpISBAcHo6CgQO2l\nByqupKExBqSlCUX24kVg1izgjTeAv7uFEwvB/euvCxYsQO/eveHn54cjR45g7dq1AABvb29ER0fD\n29sbYWFh2LBhg05vk4lVzTYgHvCWFzB9ZmM//KJrbHrGzltvcTXkhQBjzQKbmJiI3377DadPn0Zy\ncjLatWun3BYbG4uCggJcuHABISEhRjkfIcbUp8/jOb+qq2nOr8ai3mYBa2trDBo0CDExMQgPD0eT\nJk00HlAmk+G///0v4uPjcezYMVRWVho1sD6oWYCICQ17aDkManM9e/YsYmJicPDgQbRt2xbBwcHo\n378/PDw80Lp1azDGUFZWhvz8fBw7dgyHDh1CeXk5QkJCsGbNGr2mfDE2Kq5EjOjhF/801hZtuxz8\n8ssvbMKECaxFixZMIpHU+nF0dGSvvfYay8rK0rlLgynp8GuKQmPowmJuYsqszZtfYsqrLd4yG7sr\nltYvETzzzDN45plnUFVVhZMnTyI3Nxc3b96ERCJB27Zt4evrC39//3qbDQghqhQPv0JDgexsYM0a\n4eEXDXvINy66YhmKmgUIb2jYQz5w3xULEF5/7dmzJ3x8fLBgwQLlehoVi1giMQ57SHSkZ/NEgzp8\n+DALDg5mMpmMMcbYn3/+yRiz3FGxGkNblbnxlvnAgQyWkMCYjw9jvXszlpjI2KNH5k6lGW/X2Nht\nrlzcuW7cuBGLFi2CjY0NAKBt27YAaFQs0njQnF/84aK45ufn46effsKAAQMQFBSEEydOAACuXbsG\nV1dX5X6aRsXiiWI0Hl7wlhfgL7MiL0/DHvJ6jY1F5yEHTWX48OH4448/1NYvW7YMVVVVuH37NjIz\nM3H8+HFER0crB4x5Ul2vv/I05CAt07K2y19/DezaJcXu3YCfXxBGjACCgqTw8BBHPktblppyyMGa\nqqur2cGDB9nevXvZH3/8YcihNAoNDWVSqVS57OHhwW7evMni4uJYXFyccn1ISAjLzMxU+76Bv2aD\nawxtVebGW2Zt8pp62ENdWeI1fpKm2qJ3s0B5eTmCgoIwduxYTJo0CZ06dcIHH3yg7+E0ioyMVE7V\nnZeXB5lMhjZt2iAiIgI7d+6ETCZDYWEh8vPz0b9/f5NkIETsaM4vkdG3ys+dO5ft379fufzrr7+y\n0NBQNmvWLH0PWSeZTMYmTJjAfHx8WJ8+fVT+hlm2bBnz8PBg3bt3Z6mpqbV+34BfkxBu0Zxfpqep\ntmj1EsG//vUvVFZWwtHREYGBgXj66aexdu1avPfee08WakyfPh1jx47F4MGDTfTXge7oJQLS2Cne\n/EpNpTe/jMnglwiWLFmC5cuXY/r06ZDL5Vi/fj0OHTqExYsXIzU1FQ8ePFCeKD4+Hnv37jVe+kZI\n0YDOC97yAvxlNjSvOYY9bGzX+Ek69RZwcHDA0KFDMXToUDx48ACxsbH45ZdfsHbtWty7dw8ODg4Y\nNGgQHGm4dUJESfHm1wcfCMMehofTsIemovfYAjExMViwYIHKwNX37t3DTz/9hPj4ePTr1w+2trbw\n9/dHYGAgOnbsaLTQuqJmAUJqR8MeGsYkc2jl5+dj6tSp2L17N1q3bq2ybc6cOVi7di1kMhlycnKQ\nk5ODN998U5/TGAUVV0I0ozm/9GOSgVu8vLzw2muvwc/PDytXrsTx48eRm5uLmJgYtGnTBgBga2uL\n/v37m7Ww8qixt1U1BN4ymzqvKd78auzX2KDXX1955RV89dVX2LZtGwIDAxEQEAC5XK6c6poQwh+a\n88s4jDaea2lpKZo3bw57e3tjHE7FmDFjcPHiRQDCywtOTk44deoUAGHIwc2bN6NJkyb49NNP8fzz\nz6t9n5oFCNEfzflVN5O0uZrLvHnz4OTkhPfeew+5ubkYN24cjh8/jpKSEgQHByMvLw9WVqo35FRc\nCTEcPfxSZxGDZQPCSwrffvstxo4dC8Byhxxs7G1VDYG3zGLIa2ur27CHYsisC7P2czW3o0ePol27\ndvDw8AAgDDk4YMAA5XZNQw7yNCpWTk6OqPJYWl6pVIqcnBxR5eEp75EjUtjZAQcPBiE7G5g/X4oP\nPwSmTg3C228Dv/8u7K9g7rzaLmuTV6rDqFiiaRaoa8jB5cuXY+TIkQCAadOmoVu3bpgzZw4AYObM\nmRgwYADGjx8PAJgyZQrCw8MRFRWlcgxqFiDEtBrrnF+aaoto7lzT09M1bq+qqkJSUhKys7OV61xc\nXHC1Rj+R4uJiuLi4mCwjIaR29OaXOm7aXA8ePIiePXuqvOllqUMOGrvtx9R4ywvwl5mXvDWHPezb\nV8rVsIfGvsbcFNddu3YpH2QpeHt7Izo6Gt7e3ggLC8OGDRvqnImAENJwbG2BkJDGPeeXaNpcTYna\nXAkxP0sc9tBiumIRQvjV2N78ouIqQry0rynwlhfgLzNveYG6Mysefl26BPj6Cg+/nn8eOHBAGEDG\nXBptmyshxLJY+pxf1OZKCBEFHoc9pDZXQojomWLYQ3PiorhmZWWhf//+CAgIwNNPP43jx48rt8XF\nxcHLyws9evTAgQMHzJjSeHhrX+MtL8BfZt7yAoZlVjz8ys7md84vLorr/PnzsXTpUpw6dQoffvgh\n5s+fDwDIzc3Frl27kJubi9TUVOUEioQQy9Cly+OHXz4+4nn4pQ0uimuHDh1w5++ex+Xl5cpXXC11\nVCzFgBG84C0vwF9m3vICxs3s5AQsWGDah1/GvsaiGVtAkxUrVuDZZ5/FvHnzIJfLcezYMQCWOyoW\nLdMyLde+bGsLdOkixaefAo8eBWH1amDuXCleeglYsSIIjo6mPb9Uh1GxwEQiODiY+fj4qH1SUlLY\nsGHD2N69exljjH377bcsODiYMcbYjBkz2Pbt25XHmDx5MtuzZ4/asUX0a2olIyPD3BF0wltexvjL\nzFtexhou88mTjI0bx1jr1ozNm8fYlSv6HUefvJpqi2juXDWNijVhwgQcPHgQADB69GhMmTIFAI2K\nRQh5/PDr8mVhKho/P5EMe6hfjW9YAQEBTCqVMsYYO3jwIOvXrx9jjLFz584xPz8/9ujRI3bp0iXm\n7u7O5HK52vc5+TUJIUZw+zZjK1Yw1rEjY8OHM5aWxlgtZcEoNNUWLl4iOHHiBN566y08evQI9vb2\n2LBhAwICAgAIg2lv3rwZ1tbWWLduHUJCQtS+Ty8RENL4NMScXxpri2nqubjw9mvy1r7GW17G+MvM\nW17GxJNZLmds/37Ghg1jzNWVsY8/Zqy8XH0/Y7e5ctEVixBC9GWuN7+4aBYwFDULEEJqUjz8MnTO\nLxpbgBBCamiIN7+ouIqQotMyL3jLC/CXmbe8AB+Za775Zew5v6i4ilBOTo65I+iEt7wAf5l5ywvw\nldnWFmjXLseoc35xUVxPnz6NZ555Br1790ZERATu3bun3GaJo2KVl5ebO4JOeMsL8JeZt7wAf5nL\ny8uN+vCLi+I6ZcoUrFq1Cr/99htGjRqFjz/+GACNikUIMR1Dhz3korjm5+dj0KBBAIDg4GDs2bMH\ngOWOilVUVGTuCDrhLS/AX2be8gL8Za4rr6aHXxrp3GvWDAYOHMiSk5MZY4ytWbOGOTg4MMZqH7hl\n9+7dat8HQB/60Ic+JvnURTQDtwwfPhx//PGH2nrF661vv/02li5dioiICNhqeH9NIpGorWPUx5UQ\n0sBEU1w1jYoFAGlpaQCAvLw8/PDDDwBoVCxCiHhx0eZ68+ZNAIBcLsdHH32EadOmAQAiIiKwc+dO\nyGQyFBYWIj8/H/379zdnVEIIAcBJcd2xYwe6d++Onj17wtXVFZMmTQIAeHt7Izo6Gt7e3ggLC8OG\nDRtqbRYghJAGZ9xHT+a1f/9+1r17d+bp6clWrFhR6z4zZ85knp6erHfv3iw7O7uBE6qqL29GRgZr\n2bIl8/f3Z/7+/mzp0qVmSPnYa6+9xp566inm4+NT5z5iur715RXb9WWMsStXrrCgoCDm7e3NevXq\nxdatW1frfmK5ztrkFdN1rqioYP3792d+fn6sZ8+ebOHChbXuZ4zrazHFtaqqinl4eLDCwkImk8mY\nn58fy83NVdnnhx9+YGFhYYwxxjIzM1lgYKA5ojLGtMubkZHBRo4caaaE6n766SeWnZ1dZ7ES0/Vl\nrP68Yru+jDF2/fp1durUKcYYY/fu3WPdunUT9X/H2uQV23V+8OABY4yxyspKFhgYyI4ePaqy3VjX\nl4tmAW1kZWXB09MTbm5usLGxwZgxY5CSkqKyz759+zBx4kQAQGBgIMrLy3Hjxg1zxNUqLyCung6D\nBg1Cq1at6twupusL1J8XENf1BYD27dvD398fANCiRQv07NkT165dU9lHTNdZm7yAuK5zs2bNAAAy\nmQzV1dVo3bq1ynZjXV+LKa4lJSXo1KmTcrm2mWBr26e4uLjBMtaX5cm8EokEv/zyC/z8/BAeHo7c\n3NyGjqkTMV1fbYj9+hYVFeHUqVMIDAxUWS/W61xXXrFdZ7lcDn9/f7Rr1w5DhgyBt7e3ynZjXV/R\ndMUylLYPsp78G9RcD8C0OW+fPn1w9epVNGvWDPv370dkZCTy8vIaIJ3+xHJ9tSHm63v//n2MHj0a\n69atQ4sWLdS2i+06a8ortutsZWWFnJwc3LlzByEhIZBKpcpptBWMcX0t5s71yT6vV69ehaurq8Z9\nzNkvVpu8Dg4Oyn/ChIWFobKyEmVlZQ2aUxdiur7aEOv1raysxEsvvYQJEyYgMjJSbbvYrnN9ecV6\nnR0dHTFixAicOHFCZb2xrq/FFNd+/fohPz8fRUVFkMlk2LVrFyIiIlT2iYiIQGJiIgAgMzMTTk5O\naNeunTniapX3xo0byr9Bs7KywBhTax8SEzFdX22I8foyxjB58mR4e3tj9uzZte4jpuusTV4xXefS\n0lLlaF0VFRVIT09XTnaqYKzrazHNAtbW1li/fj1CQkJQXV2NyZMno2fPnvj8888BAFOnTkV4eDh+\n/PFHeHp6onnz5tiyZYuo8+7evRsbN26EtbU1mjVrhp07d5otLwCMHTsWR44cQWlpKTp16oQlS5ag\nsrJSmVdM11ebvGK7vgDw888/Y/v27ejdu7fKDMdXrlwBIL7rrE1eMV3n69evY+LEiZDL5ZDL5Xjl\nlVcwbNgwk9SJRjGHFiGENDSLaRYghBAxoeJKCCEmQMWVEEJMgIorIYSYABVXQggxASquhBBiAlRc\niVmdPXsW1tbWOHToUIOf283NDUOGDFEuS6VSWFlZYevWrQ2exRRSUlLQtGlTFBQUmDtKo0TFlZhV\nTEwMBg0ahGHDhjX4uSUSido747WtE4sZM2aovSKtyYsvvghfX18sWLDAhKlIXSzmDS3Cn2PHjuHg\nwYO1DrXYEJ58f+a5555DRUUFrK3F938LxhiSk5NrfXdfk1mzZmHixInIzc1VG/2JmBbduRKz2bBh\nA9q2bYvw8PB6962urkZFRYVJ80gkEtja2sLKSnz/tzh+/DiuXbumc3GNiopCs2bNsGnTJhMlI3UR\n339FpFGoqqpCcnIygoOD0aRJE5VtCQkJsLKywqFDh7B06VJ4eHjA3t4e3377LQBheLv33nsPgYGB\naAS5RYwAAAa0SURBVNu2Lezs7ODl5YVFixbVWoCvXr2K6OhoODo6wtHREREREfj999/V9qutzVWX\ncylyZ2RkYPXq1fDw8ICdnR26d++uHAikpocPH2Lx4sXo3r07mjdvjlatWqF3796YP3++2r5JSUlo\n1aqVso1Y2+82b94cgwYNwu7du+v6n4KYiPj+/UMahZMnT+LBgwcaZ+udN28eqqqqMHXqVLRs2RI9\nevQAIAwB95///AejR4/GhAkTYG1tDalUilWrVuHUqVNITU1VHqO8vByDBw9GcXExpk2bBm9vb0il\nUgwdOrTOO+Gaba66nEshNjYWDx8+xLRp02Bra4uNGzdi0qRJ8PT0xMCBA5X7vfXWW9iyZQsmTpyI\ngQMHoqqqCnl5ecjIyFA7ZlJSEsLDw5V/Eeny3QEDBiAtLQ0XL15E9+7d67zexMj0mhyGNHoXLlxg\nW7durXP7yy+/zMaPH1/n9s2bNzOJRMK+//57tW1btmxhEomE9ejRg1VUVKhtl8lkrKqqSm39+++/\nzyQSCcvKylKuW7RoEZNIJCwhIUFl39mzZzOJRMKGDBmiXJeRkcEkEonK76XLuRS5+/TpwyorK5Xr\nS0pKWNOmTdnYsWNVjtGqVSs2YsQItWM/KTc3l0kkErZnzx6dv8sYY9u2bWMSiYTt3btXq/2JcVCz\nANHL1q1bMWHChDq3d+nSBdnZ2XVuv3nzJgBoHNdz2rRpsLOzU1tvY2OjvIOrqqrC7du3UVpaquxx\nkJWVpdw3OTkZ7du3x6uvvqpyDG2foOtyLoXp06erPBTr2LEjunXrptYlysnJCWfPnsW5c+c0ZkhO\nToa9vT1CQ0N1/i4AODs7AwD+/PPPevclxkPFlejs/Pnz8Pf3V3nw89///hdyuVy5/N5778HNza3O\nYyj+6c00jHjZrVu3Ordt2LABvXv3hp2dHZydnfHUU08p2yNv376t3O/SpUvw8vJS617Vvn17ODo6\n1nl8fc6l4O7urraudevWuHXrlsq6+Ph43L59G76+vvD09MQbb7yBffv2qV2TpKQkBAcHK0fz1+W7\nwONrLNYuZpaKiivR2X//+1+MHDlSufzXX39hwoQJKsW1srISzz77bJ3HaNu2LQBonO6jZjGp6ZNP\nPsGMGTPg4uKCL774Aj/++CMOHjyIhIQEAFDJYSh9zvXkAzqFJwtfREQEioqKsG3bNgwdOhSHDh1C\nZGQkgoKClIN6FxcX4+TJk2q9BLT5roLiGiuuOWkY9ECL6Ky4uBj29vbK5aysLAQFBan8U3jTpk14\n6aWX6jyGr68vACA/P1/n82/btg1du3bF/v37VdbX9nDJ3d0deXl5kMvlKnfa169fx507d4x6Ln20\natUK48ePx/jx4wEACxcuxKpVq5CSkoLRo0cjOTkZEolEbQogbb6roGiO8PHxMUpmoh26cyU6Kyws\nVBYmxhi2bt2qMnvmkSNH8Ntvv2l8Mu3v74+WLVvi2LFjOp9fUcRr3jVWVVVhxYoVavtGRkbixo0b\nal2hVq5cafRz6UIulyvncqrJ398fwOPmhqSkJAwaNEjZbqrLdxUyMzPRvn17eHl5GZSZ6IbuXInO\n3NzcEBUVhaioKOzfvx/FxcU4fPgwbGxskJeXh+TkZPz8888aj9GkSRNERUUhOTkZMpkMtra2Wp9/\n9OjRWLRoEcLCwjBq1CjcvXsX33zzTa3HmD9/Pr755hu88cYbOHnypLIrVmZmJtq0aaOxzVfXc9Wn\n5rnu3r2LDh064MUXX4S/vz+eeuopFBYWYuPGjWjdujVGjhyJsrIyHD16FB9//LHKcbT5rsL9+/dx\n9OhRTJkyRee8xEDm66hAeFVYWMh8fX2Zo6Mje/vtt9mDBw9YREQEa9GiBQsNDWX5+flaHScrK0ut\nixFjQpcmKysrduTIkVq/V11dzeLi4pinpydr2rQpc3NzYwsWLGDnz59nEomELVmyRGX/K1eusNGj\nR7OWLVuyli1bsoiICPb7778zNzc3ta5YVlZWKl2xdDmXptxBQUGsa9euymWZTMYWLVrE+vfvz5yd\nnVnTpk1Z165d2eTJk1lBQQFjjLGtW7cyiUTCLl++rHIsbb6rkJCQwCQSCTt37lyt15KYDk1QSMwq\nLCwMDx48wE8//WTuKKIzatQoXL58WWOXtvr06dMH7u7u9IaWGVCbKzGrNWvWKAdwIaoGDhyI5cuX\n6/395ORk5Obmat2+TIyL7lwJIcQE6M6VEEJMgIorIYSYABVXQggxASquhBBiAlRcCSHEBKi4EkKI\nCVBxJYQQE6DiSgghJvD/80WRcRJ+854AAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the figure above, the top plot shows the amplitude response of the filter (in dB) and the bottom plot shows the phase response in degrees. At $\\omega=0 $, we have $|H(\\omega=0)|=1 $ (i.e unity-gain) which says that our moving average filter does not change the amplitude of signals at $ \\omega=0 $. We observed this earlier with $x_n=1 $ that produced $y_n=1 $. When we consider the other extreme with $\\omega= \\pi $, we have $|H(\\omega=\\pi)|=0$ which we observed earlier for $ x_n= \\exp \\left( j\\pi n \\right) \\hspace{.5em} \\forall \\hspace{.5em} n \\ge 0 $. Thus, signals at $ \\omega=\\pi $ are completely zero-ed out by the filter.\n", "\n", "Now, let's consider a signal halfway between this two extremes:\n", "\n", "$$ x_n= \\exp \\left( j\\pi n/2 \\right) \\hspace{.5em} \\forall \\hspace{.5em} n \\ge 0 $$\n", "\n", "The following figure shows the filter's corresponding output." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Ns=30 # length of input sequence\n", "n= arange(Ns) # sample index\n", "x = cos(arange(Ns)*pi/2.)\n", "y= signal.lfilter([1/2.,1/2.],1,x)\n", "\n", "fig,ax = subplots(1,1)\n", "fig.set_size_inches(10,3)\n", "\n", "ax.stem(n,x,label='input',basefmt='b-')\n", "ax.plot(n,x,':')\n", "ax.stem(n[1:],y[:-1],markerfmt='ro',linefmt='r-',label='output')\n", "ax.plot(n[1:],y[:-1],'r:')\n", "ax.set_xlim(xmin=-1.1)\n", "ax.set_ylim(ymin=-1.1,ymax=1.1)\n", "ax.set_xlabel(\"n\",fontsize=18)\n", "ax.legend(loc=0)\n", "ax.set_xticks(n)\n", "ax.set_ylabel(\"amplitude\",fontsize=18);\n", "\n", "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 2, "text": [ "" ] }, { "output_type": "display_data", "png": "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\n46233pLKKCoqglarRVRUlHQd3QoKCmA2m5GSkqLqbWhHamtrUVlZiYkTJyI+Ph4//fSTWzVVVVVB\no9FAr9cLb5udnW2f6TVr1mD9+vVSNRiNRvs/gPfs2aPqreyeeu773Jlnd/ahanJE5/nBHNl57pnj\nzjx350ycOBGA/Dz3rOf8+fPS8+yozzLz3PN5uTPTPetxd6Zd4UWbCp58gd7W1lYsXLgQeXl5GDBg\ngPD2vr6+OHXqFC5duoTKykqpe6cdOHAAI0aMgMVicfso2ffff4+TJ0/i4MGD+Pjjj1FVVSWc0dnZ\nierqaqxcuRLV1dV44oknkJ2dLV2TzWbDt99+ixdeeEFq+4sXL+LDDz9EXV0dLl++jNbWVnz55ZfC\nOWFhYUhLS0NSUhJmzpwJi8Xi9iK5m4+Pj8fM+QcffICAgADpRXJ3Rn19PZYvX45Vq1YJb9/W1oas\nrCysW7fO/jPZ2U5NTYXVasWpU6cwcuRIrF69Wiqns7MTN2/exNGjR5Gbm4tFixZJ5XTbuXOndI9T\nUlKQn5+P+vp6bN682X5UW1RhYSE++eQTxMTEoLW1FQEBAaq3bW1txYIFC5CXl9fraBQgNs/u7kNd\n5YjOs6McmXnumePr6ys9zw/WIzvPPXMGDhwoPc9KfRad5wdzZGf6weflzkyr8lDfbH1M/fDDDzR9\n+nT7n7Oysig7O1s6z2q1uv2ZNiIim81GSUlJtHnzZreziIjeffddys3NFd4uPT2dtFot6XQ6CgoK\nov79+9OSJUvcriczM5M2btwovF1TUxPpdDr7n6uqqui5556TrmP//v29fv+idu3a1etzKDt27KCV\nK1dK53VLT0+nLVu2qH78g3M3fvx4ampqIiKiy5cv0/jx46Vyuol8pk0p54svvqBJkyZRe3u7Wznd\nfvvtNzIajcI5p0+fphEjRpBOpyOdTkf9+vWj//73v9Tc3OxWPSJ/9x987IwZM6iiosL+Z71eT9eu\nXZOq5+7du6TRaKixsVGqloEDB9q/v3fvHg0aNEgqp6eamhqKjY1VleNo3yczz872oSLzrJQjOs+u\n9ulq5/nBHNl5dlWP2nl2lCMzz0r1iM6zoxyZmXbVH5GZVouPtKkQExOD2tpa1NXVwWazYffu3Zgz\nZ06f1kRESElJQUREBN544w2pjGvXrtkPbbe3t+Pw4cMuz7xxJCsrCw0NDbBardi1axeeffZZ7Nix\nQzinra3NfqbNnTt3cOjQIamzbIOCgjB69GicP38ewP3PoxmNRuGcbjt37nT5OQlnwsLCcPToUbS3\nt4OIUFZWJv029NWrVwEA9fX12Ldvn1tHo+bMmYPt27cDALZv3465c+dKZ3UjN460lpaWIjc3F0VF\nRQgMDJTOqa2ttX9fVFQkNdORkZFobm6G1WqF1WqFVqtFdXU1RowYIZzV1NRk/37fvn3SZ47PnTsX\n5eXlAIDz58/DZrNh2LBhUlllZWUIDw9HcHCw1PahoaH47rvvAADl5eXCn2ns9vvvvwO4/zGN999/\nH6mpqS63Udr3ic6zmn2omnlWyhGdZ6Uc0Xl2lCMzz0r1iM6zUo7oPDv7fYnMs1KO6Ewr5cjMtJCH\nugR8jJWUlJDBYCC9Xk9ZWVnSOcnJyTRy5EgKCAggrVZLhYWFUjlVVVXk4+NDZrOZoqOjKTo6mg4e\nPCiUcfr0abJYLGQ2mykyMpI2bNggVUtPFRUV0meP/vrrr2Q2m8lsNpPRaHSrz6dOnaKYmBiKioqi\nefPmSZ892traSsOGDet1BpeMnJwcioiIIJPJREuXLrWfMSVq8uTJFBERQWazmcrLy1Vv1z13/v7+\n9rm7fv06TZs2jcaNG0eJiYl08+ZN4ZytW7fSvn37SKvVUmBgIGk0GpoxY4ZUTmhoKIWEhNjnOTU1\nVSpnwYIFZDKZyGw20/z581UdHXP193LMmDGqzh51VM+SJUsoMjKSoqKi6Pnnn6crV65I1WOz2ejl\nl18mk8lEEyZMoCNHjkg/r+XLl9Nnn33mcntHz6mwsJCOHz9OsbGxZDabaeLEiVRdXS2cs3XrVsrL\nyyODwUAGg4HS09NV1aO07xOdZ0c5JSUlwvOslCM6z0o5ovOslNOTmnlWyhGdZ6Xfl+g8O3vNE5ln\npeclOtNKOTIzLeKxv2E8Y4wxxtjjgN8eZYwxxhjzArxoY4wxxhjzArxoY4wxxhjzArxoY4wxxhjz\nArxoY4wxFbZt2wZfX18cOXIEGzduhF6vR2BgIMaPHy91iRvGGBPVr68LYIwxb7J27Vp0dHQgNTUV\nAQEB2LJlC5YvX47Q0FBMmjSpr8tjjD3GeNHGGGMCbDYbjh8/jn797u8+Fy5ciLFjx+Kjjz7iRRtj\n7JHit0cZY0zAypUr7Qs2AAgODobBYMCFCxf6sCrG2L8BL9oYY0zA2LFj//azoUOH4vr1631QDWPs\n34QXbYwxJsDPz8/hz/nmMoyxR40XbYwxxhhjXoAXbYwxxhhjXoAXbYwx9hDw26OMsUeNF22MMaaS\nj4+P4s+V/htjjD0sPsT/PGSMMcYY83h8pI0xxhhjzAvwoo0xxhhjzAvwoo0xxhhjzAvwoo0xxhhj\nzAvwoo0xxhhjzAvwoo0xxhhjzAv8P5grKS0SftZnAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The figure above shows the input/output time-domain response of the filter when $\\omega=\\pi/2 $. At this point, $ |H(\\omega)|^2 = 1/2 $ meaning the signal energy has been cut in half which is shown by the corresponding lower amplitude of the output signal. The signal phase has been shifted by 45 degrees. To see this, note that the input signal repeats every four samples (360 degrees). The graph above shows that the signal phase has shifted -45 degrees which is equivalent to a shift of one-half sample. Note that `signal.lfilter` automatically inserts a zero initial condition so we had to drop that one incomplete output point to line up the plots. By interpreting the magnitude/phase plots above, we can reconcile the filter's input/output behavior in the time domain. \n", "\n", "What happens when we lengthen our moving average filter to consider averaging over eight samples instead of two?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from matplotlib import gridspec\n", "\n", "fig=figure()\n", "fig.set_size_inches((10,5))\n", "\n", "gs = gridspec.GridSpec(2,2)\n", "gs.update( wspace=0.5, hspace=0.5)\n", "\n", "ax = fig.add_subplot(subplot(gs[0,0]))\n", "\n", "ma_length = 8 # moving average filter length\n", "w,h=signal.freqz(ones(ma_length)/ma_length,1)\n", "ax.plot(w,20*log10(abs(h)))\n", "ax.set_ylabel(r\"$ 20 \\log_{10}|H(\\omega)| $\",fontsize=18)\n", "ax.set_xlabel(r\"$\\omega$\",fontsize=18)\n", "ax.vlines(pi/3,-25,0,linestyles=':',color='r',lw=3.)\n", "ax.set_ylim(ymin=-25)\n", "ax.grid()\n", "\n", "ax = fig.add_subplot(subplot(gs[0,1]))\n", "ax.plot(w,angle(h)/pi*180)\n", "ax.set_xlabel(r'$\\omega$ (radians/s)',fontsize=18)\n", "ax.set_ylabel(r\"$\\phi $ (deg)\",fontsize=16)\n", "ax.set_xlim(xmax = pi)\n", "ax.set_ylim(ymin=-180,ymax=180)\n", "ax.vlines(pi/3,-180,180,linestyles=':',color='r',lw=3.)\n", "ax.grid()\n", "\n", "ax = fig.add_subplot(subplot(gs[1,:]))\n", "Ns=30\n", "n= arange(Ns)\n", "x = cos(arange(Ns)*pi/3.)\n", "y= signal.lfilter(ones(ma_length)/ma_length,1,x)\n", "\n", "ax.stem(n,x,label='input',basefmt='b-')\n", "ax.plot(n,x,':')\n", "ax.stem(n[ma_length-1:],y[:-ma_length+1],markerfmt='ro',linefmt='r-',label='output')\n", "ax.plot(n[ma_length-1:],y[:-ma_length+1],'r:')\n", "ax.set_xlim(xmin=-1.1)\n", "ax.set_ylim(ymin=-1.1,ymax=1.1)\n", "ax.set_xlabel(\"n\",fontsize=18)\n", "ax.set_xticks(n)\n", "ax.legend(loc=0)\n", "ax.set_ylabel(\"amplitude\",fontsize=18);\n", "\n", "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 3, "text": [ "" ] }, { "output_type": "display_data", "png": "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\nrc+GOnXr1pVcp82Vs9j6XFZHap0u+7nsqdM2IWvHawXm0KFDFB4ert9etGgRRUdHS9ZLTU21a4wb\nEVFBQQGFhYXRxx9/bJeOIe+88w69//77os+LjIwkT09P8vLyombNmlGtWrXo+eeft9ueqKgo+uCD\nD0Sfd+3aNfLy8tJvHzx4kCIiIiTbERMTY+R/sWzevNloXMqXX35Jr7/+umQ9HZGRkbR69Wqbjy9b\n7/z8/OjatWtERHT16lXy8/OTpKNDzBg3czpffPEFPfroo5Sbm2uXjo5Lly6Rv7+/aJ0//viDmjZt\nSl5eXuTl5UVVq1alNm3aUEZGhl322Hrvlz2uf//+lJiYqN/WarV08+ZNqzrmrllYWEgeHh6Unp4u\nSaNu3br6/0tKSqhevXqSbdFx+vRp6tatm006pp5/UuqzpeeomPpsTkdsfbb2XLe1PpfVkVqfrdlj\na302pSOlTpuzR2x9NqUjpU5bKx8xddpWuMXNRgwXtC8oKMCWLVswaNAgxewhIowbNw4dO3bElClT\nJOvcvHlT38ydm5uLvXv3Wp2RY4pFixYhLS0Nqamp2Lx5M5544gl8+eWXonVycnL0M3Cys7ORkJAg\nafZts2bN0KpVK5w5cwaAMD7N399ftI6OTZs2WR03YYn27dsjJSUFubm5ICLs27dPcpf0P//8AwC4\nfPkytm/fbler1KBBg7B+/XoAwPr16zFkyBDJWjrIjhbXPXv24P3330dsbCzc3d0l65w9e1b/f2xs\nrKQ6HRgYiIyMDKSmpiI1NRWenp44duwYmjZtKlrr2rVr+v+3b98uqU4PGTIE+/fvBwCcOXMGBQUF\naNy4sWgdHfv27UOHDh3QokULSee3a9cOSUlJAID9+/eLHuOo48aNGwCEIRvvvvsuJkyYYPUcc88/\nsfXZlueoLfXZnI7Y+mxOR2x9NqUjpT6bs0dsfTanI7ZOW/KXmPpsTkdsnTanI6VOi0LWMLCCs2vX\nLvL19SWtVkuLFi2SrDNy5Ehq3rw5Va9enTw9PWnt2rWiNQ4ePEgajYaCgoKoc+fO1LlzZ9q9e7do\nnT/++IOCg4MpKCiIAgMD6b333hOtUZbExETJs0ovXLhAQUFBFBQURP7+/naV82+//UZdu3alTp06\n0TPPPCN5VmlWVhY1btzYaGaXFJYsWUIdO3akgIAAeuGFF/QzqcTSu3dv6tixIwUFBdH+/fttPk9X\n76pVq6avd7du3aInn3ySfHx8qF+/fpSZmSlaZ82aNbR9+3by9PQkd3d38vDwoP79+0vSadeuHbVu\n3VpfpydMmCBJZ9iwYRQQEEBBQUE0dOhQm1rJrN2Xbdu2tWlWqSl7nn/+eQoMDKROnTrR4MGD6fr1\n66JtKSgooOeee44CAgKoS5cudODAAau2WPpcY8eOpc8++0yUhmHd+eWXX6hbt24UFBREPXr0oGPH\njonWWbNmDS1btox8fX3J19eXIiMjbbLH3PNPbH02pbNr1y7R9dmcjtj6bE5HbH02p2OILfXZnI7Y\n+mzOX2LrtKXvPTH12dznElunzelIqdNiqBSLzDMMwzAMw1QEuKuUYRiGYRjGReDAjWEYhmEYxkXg\nwI1hGIZhGMZF4MCNYRiGYRjGReDAjWEYxkbWrVsHNzc3HDhwAB988AG0Wi3c3d3h5+cnKf0NwzCM\nWKoqbQDDMIyrMXPmTOTl5WHChAmoXr06Vq9ejbFjx6Jdu3Z49NFHlTaPYZgKDAduDMMwIikoKMAv\nv/yCqlWFR+jw4cPh7e2NlStXcuDGMIxD4a5ShmEYkbz++uv6oA0AWrRoAV9fX5w7d05BqxiGqQxw\n4MYwDCMSb2/vcvsaNWqEW7duKWANwzCVCQ7cGIZhRFKlShWT+3khGoZhHA0HbgzDMAzDMC4CB24M\nwzAMwzAuAgduDMMwMsFdpQzDOBoO3BiGYUSg0WjM7jf3HsMwjFxoiH8iMgzDMAzDuATc4sYwDMMw\nDOMicODGMAzDMAzjInDgxjAMwzAM4yJw4MYwDMMwDOMicODGMAzDMAzjInDgxjAMwzAM4yL8P1on\nKf/huVsdAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The figure above shows the magnitude and phase responses of the longer moving average filter. The zig-zag lines of the phase plot are due to the wrap-around of the phase as it wraps around 180 degree mark. The bottom plot shows the input/output sequences. Note that the output is delayed by the length of the input filter. Because the frequency of the input signal is $ 2\\pi/6 $, its period is $T=6$ samples the input signal repeats every six samples. According to the phase plot above, the phase at this discrete frequency is approximately 30 degrees plus the 180 degree jump, the output sequence is shifted over by half a sample ($ 30/360 = 0.5/6 $) plus the 3 samples (half the six sample period, $ 180/360=1/2 $). Note that the magnitude plot shows multiple lobes and dips at discrete frequencies where the output is zero-ed out by the filter. Thus, even though we just lengthened our moving average filter by a few samples, we have encountered much more complicated amplitude and phase behavior. We need to assemble the right tools to understand this problem in general." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fourier Transform of the Discrete Sequence\n", "\n", "So far in these pages, we have considered samples of the Fourier transform at discrete frequences ($ \\omega = \\frac{2\\pi}{N} k $). Now we want to consider the Fourier Transform of the discrete input at *continuous* frequency defined as the following:\n", "\n", "$$ H(\\omega) = \\sum_{n\\in \\mathbb{Z}} h_n \\exp \\left( -j\\omega n \\right) $$ \n", "\n", "Note that this is periodic, $H(\\omega)=H(\\omega+2\\pi)$.\n", "\n", "### Filter output as discrete convolution\n", "\n", "The discrete convolution of infinite sequences $ x_n $ and $ h_n $ is defined as\n", "\n", "$$ y_n = \\sum_{k\\in \\mathbb{Z}} x_k^* h_{n-k} $$\n", "\n", "where the asterisk superscript denotes complex conjugation. If we have a finite filter length of $ M $ ($ h_n =0, \\forall n \\notin \\{0,1,...,M-1\\} $), then the filter output reduces to\n", "\n", "$$ y_n = \\sum_{k=0}^{M-1} h_k x_{n-k} $$ \n", "\n", "Note this is closely related to but not the same as the circular convolution we have already discussed because there is no wrap-around. However, because it is very efficient to compute this using a DFT, we need to relate these two versions of convolution. \n", "\n", "### Convolution using the DFT\n", "\n", "If $x_n$ is nonzero for $ P $ samples, then the output $ y_n $ is non-zero only for $ P+M-1 $ samples. Thus, if we zero-pad each sequence out to this length, take the DFT, multiply the DFTs, and then invert the DFTs, we obtain the results of this non-circular convolution. Let's code this up below using our last example." ] }, { "cell_type": "code", "collapsed": false, "input": [ "h=ones(ma_length)/ma_length # filter sequence\n", "yc=fft.ifft(fft.fft(h,len(x)+len(h)-1)*np.conj(fft.fft(x,len(x)+len(h)-1))).real\n", "\n", "fig,ax=subplots()\n", "fig.set_size_inches((10,2))\n", "ax.plot(n,yc[ma_length-1:],'o-',label='DFT method')\n", "ax.plot(n,y,label='lfilter')\n", "ax.set_title('DFT method vs. signal.lfilter',fontsize=18)\n", "ax.set_xlabel('n',fontsize=18)\n", "ax.set_ylabel('amplitude',fontsize=18)\n", "ax.legend(loc=0)\n", "ax.set_xticks(n);\n", "\n", "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 4, "text": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, { "output_type": "display_data", "png": "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\n4XBzc8OsWbM4t2cwGAwGg8GoLwh2y/V1FBQUIDQ0FFlZWdVsR7KzszFt2jQkJibi/Pnz6Nu3Lzp3\n7qy8fbpixQoEBwerbM9gMBgMBoNRL9G1EZ4YOXr0KDk7O5OjoyPFxMTw1pkyZQq1bduWPDw8NIon\nKyuLfH19yc3Njdzd3WnDhg28tYqLi6lHjx7k5eVFrq6uFBkZqVFsZWVl5O3tTe+8845GOh06dCBP\nT0/y9vam7t27a6T1+PFjGjVqFLm4uJCrqytduHCBs8atW7fI29tb+WrevLlG+z06Oprc3NzIw8OD\nxo0bRyUlJbx01q9fTx4eHuTu7k7r16/n1La2fMzPzyd/f3/q1KkTBQQE0OPHj3lrxcfHk5ubGxkZ\nGdGVK1d463z88cfk4uJCnTt3phEjRtCTJ094ay1atIg6d+5MXl5e5OfnR1lZWbx0KlmzZg1JJBLK\nz8/nHdPSpUvpzTffVObW0aNHeWsREW3cuJFcXFzI3d2d5s2bx0tnzJgxynjs7e3J29ubd0w//fQT\nde/enby9vcnHx4cuXbrEWys1NZV69epFnp6eNGTIEHr27FmdOqrOl3xyXZUW11xXpcMn11Vpcc31\nur5XuOS6Ki0+uf66uLjkuiqd0NBQzrmuSotrrqvS4ZPnfGhwBV1ZWRlJpVLKyMgguVxOXl5edOPG\nDV5a586do5SUFI0LupycHLp69SoRET1//pycnJx4x0RE9OLFCyIiKi0tpZ49e1JycjJvrbVr19L4\n8eNpyJAhvDWIiOzt7dX+kqyLiRMn0ldffUVEis+obkGgivLycrK2tlarGKiNjIwM6tixo7KICw0N\npZ07d3LWuX79Onl4eFBxcTGVlZWRv78/3blzR+32teXj3LlzaeXKlUREFBMTQ/Pnz+etdfPmTfrt\nt9/I19dX7YKuNp0TJ05QeXk5ERHNnz9fo5iqnhg3btxI4eHhvHSIFCfjoKAgTrlam5ZMJqO1a9eq\n1b4urdOnT5O/vz/J5XIiInr48CEvnarMmTOH/vnPf/KOqV+/fnTs2DEiIvr+++/J19eXt5aPjw+d\nO3eOiIi2b99OixcvrlNH1fmST66r0uKa66p0+OS6Ki2uuf667xWuua5Ki0+uq9LimuvqfG+qm+uq\ntLjmuiodPnnOB1HOodMlly5dgqOjI+zt7WFqaoqxY8fi8OHDvLT69OmDVq1aaRyTtbU1vL29Afzl\n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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The figure above compares the filter output sequence computed using the DFT and `signal.lfilter`. The only difference is the transient startup section $ M-1 $ where the taps of the filter have not filled out. This technique is fine for processing blocks of convenient size and there are many other methods (e.g. overlap-add) to compute this using different blocks that patch together the output while dealing with these transient effects. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Filter Transfer Functions\n", "\n", "By keeping track of summation indicies, but it is not hard to show that\n", "\n", "$$ Y(\\omega) = H(\\omega) X(\\omega) $$\n", "\n", "where $H(\\omega)$ is called the *transfer function* or the *frequency response* of the filter $ h_n $. This product of transforms is much easier to work with than convolution and allows us to understand filter performance through the properties of $ H(\\omega) $.\n", "\n", "In our last example, by simply increasing the length of the moving average filter, we obtained many more zeros in $ H(\\omega) $. Because our filters produce real outputs $ y_n $ given real inputs, $ x_n $, the zeros of the $ H(\\omega) $ must be in complex conjugate pairs. To analyze this, we need to generalize the Fourier Transfrom to the *z-transform*. \n", "\n", "### Z-Transform\n", "\n", "The filter's z-transform is defined as the following:\n", "\n", "$$ H(z) = \\sum_n h_n z^{-n} $$ \n", "\n", "The Fourier transform is a special case of the z-transform evaluated on the unit circle ($ z=\\exp(j\\omega) $), but $z$ more generally spans the entire complex plane. Thus, to understand how our moving average filter removes frequencies, we need to compute the complex roots of the z-transform of $ h_n $ as\n", "\n", "$$ H(z) = \\sum_n h_n z^{-n} $$ \n", "\n", "This notation emphasizes the transfer function as a polynomial of the complex variable $z$. Thus, for our eight-tap moving average filter, we have\n", "\n", "$$ H(z) = \\sum_{n=0}^{M-1} h_n z^{-n} = \\frac{1}{8} \\sum_{n=0}^7 z^{-n} =\\frac{1}{8} (1+z)(1+z^2)(1+z^4)/z^7 $$\n", "\n", "Thus, the first zero occurs when $z=-1$ or when $ \\exp(j\\omega) = -1 \\Rightarrow \\omega=\\pi$. The next pair of zeros occurs when $z= \\pm j$ which corresponds to $ \\omega = \\pm \\pi/2 $. Finally, the last four zeros are for $\\omega=\\pm \\pi/4$ and $\\omega=\\pm 3\\pi/4 $. Notice that any filter with this $ z+1 $ term will eliminate the $ \\omega=\\pi $ (highest) frequency. Likewise, the term $ z-1 $ means that the filter zeros out $ \\omega=0 $. In general, the roots of the z-transform *do not* lie on the unit circle. One way to understand FIR filter design is as the judicious placement of these zeros in the complex plane so the shape of the resulting transfer function $ H(z) $ evaluated on the unit circle satisfies our design specifications.\n", "\n", "We need a special case of the Fourier transform as a tool for our analysis. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symmetry\n", "\n", "There is a special case when the input sequence is symmetric,\n", "\n", "$$ x_n = x_{-n} $$\n", "\n", "which leads to a real-valued (i.e. zero-phase) Fourier transform property,\n", "\n", "$$ H(\\omega)= x_0+\\sum_{n \\gt 0} 2 x_n \\cos\\left(\\omega n \\right) $$\n", "\n", "When the input is anti-symmetric,\n", "\n", "$$ x_n = -x_{-n} $$\n", "\n", "$$ H(\\omega)= j\\sum_{n \\gt 0} 2 x_n \\sin\\left(\\omega n \\right) $$\n", "\n", "The Fourier transform is purely imaginary (phase = $ \\pi/2 $). Note that $ x_n = -x_{-n} $ for $ n=0 $ means that $ x_0=0 $ for this case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Causality\n", "\n", "By changing the indexing in our first moving average filter example from $ h_0 = h_1 = 1/2$ to $ h_{-1} = h_1 =1/2$, then we have symmetry around zero with the resulting Fourier transform,\n", "\n", "$$ H(\\omega) = \\frac{1}{2} \\exp \\left( j\\omega \\right) + \\frac{1}{2} \\exp\\left( -j\\omega \\right) = \\cos(\\omega) $$\n", "\n", "which is a *real* function of frequency (with zero-phase). While this is nice theoretically, it is not possible practically because it requires future-knowledge of input sequence as shown below\n", "\n", "$$ y_n = \\sum_{k=0}^{M-1} h_n x_{n-k} = y_n = h_{-1} x_{n+1}+h_{1} x_{n-1} = \\left( x_{n+1}+x_{n-1} \\right)/2 $$\n", "\n", "which shows that $ y_n $ depends on th future value of $ x_{n+1} $. This is what non-causal means and we must omit this kind of symmetry about zero from our class of admissible filter coefficents. However, we can scoot the symmetric point to the center of the sequence at the cost of introducing a linear phase factor, $ \\exp\\left(-j\\omega (M-1)/2 \\right) $. Filters with linear phase do not distort the input phase across frequency. This means that all frequency components of the signal emerge at the other end of the filter in the same order they entered it. This is the concept of *group delay*. Otherwise, it would be very hard to retrieve any information embedded in the signal's phase in later processing. Thus, we can build linear phase causal filters with symmetric coefficients,\n", "\n", "$$ h_n = h_{M-1-n} $$\n", "\n", "or anti-symmetric coefficients,\n", "\n", "$$ h_n = -h_{M-1-n} $$\n", "\n", "by putting the point of symmetry at $ (M-1)/2 $. Note that this symmetry means that efficient hardware implementations can re-use stored filter coefficients." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symmetry and Anti-symmetry\n", "\n", "Now we know how to build linear phase filters with symmetric or anti-symmetric coefficients and enforce causality by centering the point of symmetry, we can collect these facts and examine the resulting consequences. Given\n", "\n", "$$ h_n = \\pm h_{M-1-n} $$\n", "\n", "with $ h_n =0 \\hspace{0.5em} \\forall n \\ge M \\wedge \\forall n \\lt 0 $ \n", "\n", "For even $ M $, the z-transform then becomes,\n", "\n", "$$ H(z) = \\sum_{n=0}^{M-1} z^{-n} h_n = h_0 + h_1 z^{-1} +\\ldots + h_{M-1}z^{-M+1}= z^{-(M-1)/2} \\sum_{n=0}^{M/2-1} h_n \\left( z^{(M-1-2 n)/2} \\pm z^{-(M-1-2 n)/2}\\right) $$\n", "\n", "Likewise, for odd $ M $,\n", "\n", "$$ H(z) = z^{-(M-1)/2} \\left\\lbrace h_{(M-1)/2}+ \\sum_{n=0}^{(M-3)/2} h_n \\left( z^{(M-1-2 n)/2} \\pm z^{-(M-1-2 n)/2}\\right) \\right\\rbrace$$\n", "\n", "By substituting $ 1/z $ and multiplying both sides by $ z^{-(M-1)} $, we obtain\n", "\n", "$$ z^{-(M-1)}H(z^{-1}) = \\pm H(z) $$\n", "\n", "This equation shows that if $z$ is a root, then so is $1/z$, and since we want a real-valued impulse response, complex roots must appear in conjugate pairs. Thus if $z_1$ is complex valued, then $ z_1^* $ is also a root and so is $1/z_1$ and $ 1/z_1^* $. Thus, one complex root generates *four* roots. This means that having $ M $ taps on the filter does not imply $M$ independent choices of the filter's roots or of the filter's coefficents. The symmetry conditions reduce the number of degrees of freedom available in the design.\n", "\n", "### Extracting the Real Part of the Filter Transfer Function\n", "\n", "We can evaluate these results on the unit circle when $ h_n = +h_{M-n-1}$to obtain the following,\n", "\n", "$$ H(\\omega) = H_{re}(\\omega)\\exp \\left( -j\\omega(M-1)/2 \\right) $$\n", "\n", "where $ H_{re}(\\omega)$ is a real-valued function that can be written as\n", "\n", "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{(M/2)-1} h_n \\cos \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n", "\n", "for even $ M $ and as \n", "\n", "$$ H_{re}(\\omega) = h_{(M-1)/2}+ 2\\sum_{n=0}^{(M-3)/2} h_n \\cos \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n", "\n", "for odd $ M $. Similar results follow when $ h_n = -h_{M-1-n} $. For $ M $ even, we have\n", "\n", "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{M/2-1} h_n \\sin \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n", "\n", "and for odd $M$.\n", "\n", "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{(M-3)/2} h_n \\sin \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n", "\n", "By narrowing our focus to $ H_{re}(\\omega)$ and separating out the linear-phase part, we can formulate design techniques that focus solely on this real-valued function, as we will see later with Parks-McClellen FIR design. \n", "\n", "The table below shows the number of *independent* filter coefficients that must be specified for a FIR filter in each case.\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
even M odd M
symmetricM/2(M+1)/2
anti-symmetricM/2 (M-1)/2
\n", "\n", "The design problem is finding the coefficents that satisfy a filter's specifications. Picking any of the cases shown in the table depends on the application. For example, for odd $ M $ and the anti-symmetric case, $ H_{re}(\\omega=0)= H_{re}(\\omega=\\pi)= 0 $ so this would be a bad choice for high or low pass filters. \n", "\n", "Because many books refer to the items in this table as type-I through type-IV filters, I'm including this terminology in the table below. \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
even M odd M
symmetrictype-Itype-II
anti-symmetrictype-III type-VI
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example\n", "\n", "We can use these results to reconsider our earlier result for the two-tap moving average filter for which $ M=2 $ and $ h_0 = 1/2 $. Then,\n", "\n", "$$ H_{re}(\\omega) = \\cos \\left( \\omega/2 \\right) $$\n", "\n", "with phase,\n", "\n", "$$ \\exp \\left( -j\\omega(M-1)/2 \\right) = \\exp \\left( -j\\omega/2 \\right)$$\n", "\n", "which equals $ \\exp (-j\\pi/4) $ when $ \\omega = \\pi/2 $ as we observed numerically earlier." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section, we began our work with FIR filters by considering the concepts of linear phase, symmetry, and causality. By defining FIR filter coefficients symmetrically, we were able to enforce both causality and linear phase. We introduced the continuous-frequency version of the Fourier Transform and its relationship to the Discrete Fourier Transfrom (DFT). We demonstrated how the circular convolution of the DFT can be used to compute the continuous-frequency Fourier Transform version of the convolution. Then, we introduced the z-transform as a more general tool than the Fourier transform for understanding the role of zeros in filter design. All this led us to conditions on the filter coeffients that satisfy our practical requirements of linear phase (no phase-distortions across frequency) and causality (no future knowledge of inputs). Finally, we considered the mathematical properties of FIR filters that apply to *any* design.\n", "\n", "Sadly, all this work is exactly backwards because all our examples so far started with a set of filter coefficients ($ h_n $) and then drew conclusions, numerically and analytically, about their consequences. In a real, situation, we start with a desired filter specification, and *then* (by various means) come up with the corresponding filter coefficients. Our next section explores this topic.\n", "\n", "\n", "As usual, the corresponding IPython notebook for this post is available for download [here](https://github.com/unpingco/Python-for-Signal-Processing/blob/master/Filtering.ipynb). \n", "\n", "Comments and corrections welcome!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "References\n", "---------------\n", "\n", "* Proakis, John G. ,*Digital signal processing: principles algorithms and applications*. Pearson Education India, 2001." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%qtconsole" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 } ], "metadata": {} } ] }