libfir/python/filter_analysis.ipynb

299 lines
149 KiB
Plaintext
Raw Normal View History

2014-07-10 17:46:22 +01:00
{
"metadata": {
"name": "",
"signature": "sha256:059af54bd0e19f56f028eec31f2ad301153d3f7d6d47b7b235667783d0bcff25"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import fir\n",
"\n",
"sample_rate = 1000 # Hz\n",
"corner = 100 # Hz\n",
"gain = 1.0\n",
"npoints = 501\n",
"\n",
"nyquist_freq = sample_rate / 2\n",
"\n",
"fi = fir.LanczosLowpass(npoints, corner / sample_rate, gain, 3)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 44
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pylab\n",
"\n",
"bode_points = 997 # non-multiple number avoids numeric effects/beating\n",
"respfunc = pylab.vectorize(lambda f: fi.response(f/sample_rate))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 45
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Linear Bode plot"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"freq = pylab.linspace(0, nyquist_freq, bode_points)\n",
"resp = respfunc(freq)\n",
"\n",
"fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10,10), dpi=100)\n",
"\n",
"axes[0].plot(freq, abs(resp), 'r')\n",
"axes[0].set_xlabel('Frequency (Hz)')\n",
"axes[0].set_ylabel('Magnitude')\n",
"\n",
"axes[1].plot(freq, pylab.angle(resp), 'r')\n",
"axes[1].set_xlabel('Frequency (Hz)')\n",
"axes[1].set_ylabel('Phase (radians)')\n",
"axes[1].set_ylim([-pylab.pi,pylab.pi])\n",
"axes[1].set_yticks(pylab.linspace(-pylab.pi, pylab.pi, 9))\n",
"axes[1].set_yticklabels(['-\u03c0', '-\u00be\u03c0', '-\u00bd\u03c0', '-\u00bc\u03c0', '0', '\u00bc\u03c0', '\u00bd\u03c0', '\u00be\u03c0', '\u03c0'])\n",
"\n",
"None"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAmoAAAJeCAYAAAAEOSnEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmYJEWd//F3T88JAwOKBwzgKIiCIqCIoOvSCCrKCq7X\nKIOu16qLeOG6igeOP1dd75VFUfFicRzGRUCQS1AbFOUebgaY4ZqDG2ZgmHu6f39EpRUdHZEZeVRl\nHZ/X8/TTXVVRmVEZ1Znf/EZEJoiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiEiH+Bnw\nAHBj4PU5wPXADcBlwIvaVC8RERGRvvdKYB/CgdoBwIzG34cCl7ejUiIiIiJizCIcqNm2BZa1tioi\nIiIinWtC3RVI8T7gvLorISIiItJPZpGdUTsIuAWTVRMRERHpSxPrroDHi4CTMWPUHvMV2GWXXUaX\nLFnS1kqJiIiIFLQE2LXIGzstUNsZOAM4ClgcKrRkyRJGR0fbVimp1ty5c5k7d27d1ZAC1HbdTe3X\nvdR23W1gYGCXou9td6A2HzgQ2A5YCnwRmNR47UfA8ZjuzpMaz20E9mtzHUVEREQ6QrsDtXdkvP7+\nxo+IiIhI3+vkWZ/So4aGhuqughSktutuar/upbbrXwN1V6CgUY1RExERkW4wMDAABWMuZdRERERE\nOpQCNREREZEOpUBNREREpEMpUBMRERHpUArURERERDqUAjURERGRDqVATURERKRDKVATERER6VAK\n1EREREQ6lAI1ERERkQ6lQE1ERESkQylQExEREelQCtREREREOpQCNREREZEOpUBNREREpEMpUBMR\nERHpUArURERERDqUAjURERGRDqVATURERKRDKVATERER6VAK1EREREQ6lAI1ERERkQ6lQE1ERESk\nQylQExEREelQCtREREREOpQCNREREZEOpUBNREREpEMpUBMRERHpUArURERERDqUAjURERGRDqVA\nTURERKRDtTtQ+xnwAHBjSpkTgDuA64F92lEpERERkU7U7kDt58ChKa+/HtgVeC7wAeCkdlRKRERE\npBO1O1D7M/BYyuuHA6c0/r4C2AZ4RqsrJSIiItKJOm2M2kxgqfV4GbBjTXURERERqdXEuivgMeA8\nHvWWOuEEGG285P72PTfqLGZgwP8TWs64Wlrlk3LuT1o9QssdHIRJk8zfGzfC5s0webJ5bvNm89zG\n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\n/nDMMXXXREREpOO0+/IcT7F+
"text": [
"<matplotlib.figure.Figure at 0x7f77ae68c0b8>"
]
}
],
"prompt_number": 50
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Group delay"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ph = pylab.angle(resp)\n",
"\n",
"# heuristic \"de-modulo\" operation\n",
"for i in range(1,ph.size):\n",
" phdiff = ph[i - 1] - ph[i]\n",
" if(phdiff > pylab.pi):\n",
" ph[i:ph.size] += pylab.pi\n",
" elif(phdiff < pylab.pi):\n",
" ph[i:ph.size] -= pylab.pi\n",
"\n",
"ph /= -freq * 2 * pylab.pi\n",
"\n",
"plt.plot(freq, ph)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 52,
"text": [
"[<matplotlib.lines.Line2D at 0x7f77ae6743c8>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nKXzjG1BZCW++Gevlt2uXdGRS
"text": [
"<matplotlib.figure.Figure at 0x7f77aea80400>"
]
}
],
"prompt_number": 52
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Logarithmic Bode plot"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"freq = pylab.logspace(-1, pylab.log10(nyquist_freq), bode_points)\n",
"resp = respfunc(freq)\n",
"\n",
"fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10,10), dpi=100)\n",
"\n",
"axes[0].plot(freq, 10 * pylab.log10(abs(resp)), 'r')\n",
"axes[0].set_xlabel('Frequency (Hz)')\n",
"axes[0].set_xscale('log')\n",
"axes[0].set_ylabel('Magnitude (dB)')\n",
"\n",
"axes[1].plot(freq, pylab.angle(resp), 'r')\n",
"axes[1].set_xlabel('Frequency (Hz)')\n",
"axes[1].set_xscale('log')\n",
"axes[1].set_ylabel('Phase (radians)')\n",
"axes[1].set_ylim([-pylab.pi,pylab.pi])\n",
"axes[1].set_yticks(pylab.linspace(-pylab.pi, pylab.pi, 9))\n",
"axes[1].set_yticklabels(['-\u03c0', '-\u00be\u03c0', '-\u00bd\u03c0', '-\u00bc\u03c0', '0', '\u00bc\u03c0', '\u00bd\u03c0', '\u00be\u03c0', '\u03c0'])\n",
"\n",
"None"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nPAc8ghm3digqPhAREamNukEl
"text": [
"<matplotlib.figure.Figure at 0x7f77ae66c4e0>"
]
}
],
"prompt_number": 40
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Impulse response"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fi2 = fir.Filter(fi)\n",
"acausal = int(npoints / 2)\n",
"steady = 10\n",
"x = pylab.hstack([pylab.zeros(npoints + steady), 1, pylab.zeros(npoints + steady)])\n",
"t = pylab.linspace(0, x.size/sample_rate, x.size)\n",
"\n",
"y = np.array(x.size, dtype=np.double)\n",
"y.resize(x.size)\n",
"for i in range(0, y.size):\n",
" y[i] = fi2.f(x[i])\n",
"\n",
"fig, axes = plt.subplots(figsize=(10,6), dpi=100)\n",
"axes.plot(t, x)\n",
"axes.plot(t - acausal/sample_rate, y, 'r')\n",
"axes.set_xlabel('Time (s)')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
"<matplotlib.text.Text at 0x7f77ae067588>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrtnYs2e8FQFKCV0AxaYWmrDV
"text": [
"<matplotlib.figure.Figure at 0x7f77ae5d6b00>"
]
}
],
"prompt_number": 34
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Step response"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fi2 = fir.Filter(fi)\n",
"acausal = int(npoints / 2)\n",
"steady = 10\n",
"x = pylab.hstack([pylab.zeros(npoints + steady), 1, pylab.ones(npoints + steady)])\n",
"t = pylab.linspace(0, x.size/sample_rate, x.size)\n",
"\n",
"y = np.array(x.size, dtype=np.double)\n",
"y.resize(x.size)\n",
"for i in range(0, y.size):\n",
" y[i] = fi2.f(x[i])\n",
"\n",
"fig, axes = plt.subplots(figsize=(10,6), dpi=100)\n",
"axes.plot(t, x)\n",
"axes.plot(t - acausal/sample_rate, y, 'r')\n",
"axes.set_xlabel('Time (s)')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 35,
"text": [
"<matplotlib.text.Text at 0x7f77ae5b4470>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n8ZQzVNVfte4nDB+uABYAv06Y
"text": [
"<matplotlib.figure.Figure at 0x7f77ae3af588>"
]
}
],
"prompt_number": 35
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 35
}
],
"metadata": {}
}
]
}