pico-tracker/sim/si_fir_filter/si_fir_filter_rsid.ipynb

534 wiersze
111 KiB
Plaintext
Czysty Zwykły widok Historia

{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Reflects an array of coefficients about the last element \n",
"def sym_fir_coeff(coeff):\n",
" for i in range(len(coeff)-2, -1, -1):\n",
" coeff.append(coeff[i])\n",
"\n",
" return coeff\n",
"\n",
"# Normalises the si's 8-bit coefficients to 0 - 1 \n",
"def si_normalise_coeff(coeff):\n",
" coeff = [x-0x100 if x > 0x7f else x for x in coeff]\n",
" return [x/0x300 for x in coeff] # 0x300 seems to be the value required to get 0 gain at dc.. Not sure about this: Test!\n",
"\n",
"def si_coeff(coeff):\n",
" norm = [int(x*0x300) for x in coeff]\n",
" return [x+0x100 if x < 0 else x for x in norm]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These are the default si coefficients"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Default si coefficients \n",
"si_default_fir_coeff = [0x1, 0x3, 0x8, 0x11, 0x21, 0x36, 0x4d, 0x60, 0x67]\n",
"si_fir_coeff = si_normalise_coeff(sym_fir_coeff(si_default_fir_coeff))\n",
"print si_fir_coeff"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0.0013020833333333333, 0.00390625, 0.010416666666666666, 0.022135416666666668, 0.04296875, 0.0703125, 0.10026041666666667, 0.125, 0.13411458333333334, 0.125, 0.10026041666666667, 0.0703125, 0.04296875, 0.022135416666666668, 0.010416666666666666, 0.00390625, 0.0013020833333333333]\n"
]
}
],
"prompt_number": 26
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Setup graphs"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"from scipy import signal\n",
"from pylab import *\n",
"from __future__ import division\n",
"import matplotlib.pyplot as plt"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"w,h=signal.freqz(si_fir_coeff,1) # Compute impulse response \n",
"\n",
"plt.plot(w/pi,20*log10(abs(h)))\n",
"plt.grid()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nmUxqhEA6NmsW0KED8Ne/AhUV
"text": [
"<matplotlib.figure.Figure at 0x7f62308f7cd0>"
]
}
],
"prompt_number": 28
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Passband filter"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"\"\"\"\n",
"sampling frequency: 16000 Hz\n",
"\n",
"* 0 Hz - 500 Hz\n",
" gain = 0\n",
" desired attenuation = -40 dB\n",
" actual attenuation = -33.20090552393641 dB\n",
"\n",
"* 1200 Hz - 2500 Hz\n",
" gain = 1\n",
" desired ripple = 5 dB\n",
" actual ripple = 7.628523622719886 dB\n",
"\n",
"* 3500 Hz - 8000 Hz\n",
" gain = 0\n",
" desired attenuation = -40 dB\n",
" actual attenuation = -33.20090552393641 dB\n",
"\"\"\"\n",
"\n",
"p_fir_coeff = [\n",
"0.03315273058205705,\n",
"0.04369271452900486,\n",
"0.010060937885865288,\n",
"-0.07363298137328711,\n",
"-0.14853046126761885,\n",
"-0.13375882936132458,\n",
"-0.007516054328839414,\n",
"0.15276142842227725,\n",
"0.2256656942570718,\n",
"0.15276142842227725,\n",
"-0.007516054328839414,\n",
"-0.13375882936132458,\n",
"-0.14853046126761885,\n",
"-0.07363298137328711,\n",
"0.010060937885865288,\n",
"0.04369271452900486,\n",
"0.03315273058205705,\n",
"]\n",
"\n",
"w,h=signal.freqz([x/2 for x in p_fir_coeff],1) # Compute impulse response \n",
"\n",
"plt.plot(w/pi,20*log10(abs(h)))\n",
"plt.grid()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nFSoXIuQL+QR0sN++Hdi/H/DQ
"text": [
"<matplotlib.figure.Figure at 0x7f62308ab190>"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Another filter design, low pass\n",
"rsid_fir_coeff = [x*5.2 for x in [\n",
"0.000306, \n",
"0.001117, \n",
"0.002461, \n",
"0.004306, \n",
"0.006491, \n",
"0.008734, \n",
"0.010690, \n",
"0.012026, \n",
"0.012500, \n",
"0.012026, \n",
"0.010690, \n",
"0.008734, \n",
"0.006491, \n",
"0.004306, \n",
"0.002461, \n",
"0.001117, \n",
"0.000306]]\n",
"\n",
"w,h=signal.freqz(rsid_fir_coeff,1) # Compute impulse response \n",
"\n",
"plt.plot(w/pi,20*log10(abs(h)))\n",
"plt.grid()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nzka7du2Qm5uL++67D1lZWTWJ
"text": [
"<matplotlib.figure.Figure at 0x7f623070ea50>"
]
}
],
"prompt_number": 70
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convert to si hex"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"rsid_si_coeff_values = si_coeff(rsid_fir_coeff)[0:9]\n",
"\n",
"print rsid_si_coeff_values\n",
"print \", \".join(hex(n) for n in rsid_si_coeff_values)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1, 4, 9, 17, 25, 34, 42, 48, 49]\n",
"0x1, 0x4, 0x9, 0x11, 0x19, 0x22, 0x2a, 0x30, 0x31\n"
]
}
],
"prompt_number": 71
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and back again (to simulate precision loss)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"rsid_si_fir_coeff = si_normalise_coeff(sym_fir_coeff(rsid_si_coeff_values))\n",
"print rsid_si_fir_coeff"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0.0013020833333333333, 0.005208333333333333, 0.01171875, 0.022135416666666668, 0.032552083333333336, 0.044270833333333336, 0.0546875, 0.0625, 0.06380208333333333, 0.0625, 0.0546875, 0.044270833333333336, 0.032552083333333336, 0.022135416666666668, 0.01171875, 0.005208333333333333, 0.0013020833333333333]\n"
]
}
],
"prompt_number": 72
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"w,h=signal.freqz(rsid_si_fir_coeff,1) # Compute impulse response \n",
"\n",
"plt.plot(w/pi,20*log10(abs(h)))\n",
"plt.grid()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEACAYAAABVtcpZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVXX+P/AXm1suuGUGJAko4gKWS2oZjqGQ6dgyJs7U\naMs0ZaPVr2nMZsa0UbTGFmuonNEsv1qOuVCajGZerVxIXCpIxTXEXAM0NUH5/P54dzmgiHc5555z\n73k9H4/70HOXcz6+wfO+nz1IKaVARES2FGx2AYiIyDxMAkRENsYkQERkY0wCREQ2xiRARGRjTAJE\nRDZmShLIzs5GfHw84uLiMG3aNDOKQEREAIJ8PU/gwoULaN++PT799FNERESge/fueP/999GhQwdf\nFoOIiGBCTSAnJwexsbGIjo5GWFgYhg8fjqysLF8Xg4iIYEISKCoqQlRUVOVxZGQkioqKfF0MIiKC\nCUkgKCjI15ckIqLLCPX1BSMiIlBYWFh5XFhYiMjIyGrvYaIgIvKMu928Pq8JdOvWDQUFBdi/fz/K\nysqwYMECDBky5JL3KaX4UAoTJkwwvQxWeTAWjAVjUfvDEz6vCYSGhuKNN97AwIEDceHCBTz44IMc\nGVSL/fv3m10Ey2AsNIyFhrHwjs+TAACkpaUhLS3NjEsTEVEVnDFscSNHjjS7CJbBWGgYCw1j4R2f\nTxZzRVBQkMftW0REduXJvZM1AYtzOBxmF8EyGAsNY6FhLLzDJEBEZGNsDiIiChCe3DtNGR3kirvu\nAurWlUd4ONCihTxatgSuuw5o2xZo1gzgvDIiIs9Ztibw4YcK584B584BJSXA8ePAsWPA0aPA998D\ne/bIe9u2BTp3BpKStEezZuaWX08OhwPJyclmF8MSGAsNY6FhLDQBVRO4++7aX1cKKC4Gdu8GvvkG\n2LYNWLIE2L4diIwE+vbVHhetSkFERL+wbE3A02KdPw98/TWwbp081q6VJDB4sDy6dweC2R1ORAHI\nk3tnwCWBi124AGzcCHz8MbBsGXDiBDB8OPC73wE33MA+BSIKHJwnUIOQEKBPH2DqVODbb6Vm0Lgx\ncO+9QEICkJEh/QxWxTHQGsZCw1hoGAvvBHwSuFi7dsDEiUBBAfDOO8DevUD79sB990mNwXr1IiIi\n4wR8c5ArioslIfzrX0Dz5sBzzwFDhrCpiIj8C/sEvFRRASxdCvzjH9KX8Ne/ynyFkBCfF4WIyG3s\nE/BScLDc9HNzgSlTgOnTgcREYMUK85qJ2N6pYSw0jIWGsfAOk0ANgoKAQYOADRskGTzxBDBwoMxB\nICIKJGwOckF5OTBzJjBpEjB0qIw0atrU7FIREVXH5iCDhIUBo0cDO3cCoaFAx47AggUcSURE/o9J\nwA3h4TKCaNEi6TweNAg4cMDYa7K9U8NYaBgLDWPhHSYBD/TqJZ3HN98MdOsGzJtndomIiDzDPgEv\nbd0K/Pa3snppZqbUFoiIzMA+ARN07Qps3izLV3ftKjUEIiJ/wSSggwYNgDfeAF56CUhNBWbN0u/c\nbO/UMBYaxkLDWHiHSUBH99wjy1f/85/AH/4AlJWZXSIiotqxT8AAp07JgnSlpcDixZxTQES+wT4B\ni2jUSIaRdu0K9O4tK5USEVkRk4BBQkKAl18GHn9chpJu3uzZedjeqWEsNIyFhrHwDpOAwUaPBt58\nE7j9duDLL80uDRFRdYb0Cfz5z3/GsmXLUKdOHcTExOCdd95BkyZNAAAZGRmYPXs2QkJCMGPGDAwY\nMODSQvl5n0BNVq6ULS3ffx/o39/s0hBRILJMn8CAAQOQl5eH7du3o127dsjIyAAA5OfnY8GCBcjP\nz0d2djYee+wxVFRUGFEEyxkwQPoJ0tOB5cvNLg0RkTAkCaSkpCA4WE7ds2dPHDx4EACQlZWF9PR0\nhIWFITo6GrGxscjJyTGiCJZ0yy2y2f2oUcBnn7n2GbZ3ahgLDWOhYSy8Y3ifwOzZs3H77bcDAA4d\nOoTIyMjK1yIjI1FUVGR0ESylRw9g4UJg+HBg0yazS0NEdhfq6QdTUlJw+PDhS56fMmUKBg8eDACY\nPHky6tSpgxEjRlz2PEE23Mj31luBOXNkH+NVq4AuXS7/3uTkZF8Vy/IYCw1joWEsvONxEli1alWt\nr8+ZMweffPIJVq9eXflcREQECgsLK48PHjyIiIiIGj8/cuRIREdHAwDCw8ORlJRU+cN2Vv/8+bhB\nA2DGjGSkpQEvv+xAq1bWKh+Pecxj6x87HA7MmTMHACrvl25TBlixYoVKSEhQx44dq/Z8Xl6eSkxM\nVOfOnVN79+5Vbdu2VRUVFZd83qBiWdL06Up17qxUaWnNr69Zs8an5bEyxkLDWGgYC40n906PawK1\n+dOf/oSysjKkpKQAAHr16oXMzEwkJCRg2LBhSEhIQGhoKDIzM23ZHFTVk08Cu3ZJH8FHH8nOZURE\nvsK1gyygvBy44w7ZtvLll80uDRH5K8vMEyD3hIUBH3wALF0K/Pe/ZpeGiOyEScAimjaVyWSjRwP5\n+drzzk4gYiyqYiw0jIV3mAQspGtX4MUXgbvuAn76yezSEJEdsE/AgkaOlCaif//b7JIQkT9hn0CA\nmDFDlpVYutTskhBRoGMSsKDGjYG5c4E//hFYtMhhdnEsg22/GsZCw1h4h0nAonr3ln2K//lPwMYt\nY0RkMPYJWFhZGXDDDcDf/w4MG2Z2aYjI6jy5dzIJWNz69cA99wB5edywnohqx47hAFRW5sDQocC4\ncWaXxHxs+9UwFhrGwjtMAn4gI0M2o+EexUSkNzYH+Yl584BXX5WNaIKZuomoBmwOCmDp6XLznzfP\n7JIQUSBhErA4Z3tncDDwyivAs88Cp0+bWyazsO1Xw1hoGAvvMAn4kd695fH662aXhIgCBfsE/Mx3\n38kexbt3y8xiIiIn9gnYQIcOwMCB0klMROQtJgGLq6m9c8IEWWSuuNj35TET2341jIWGsfAOk4Af\nio2V7SjffNPskhCRv2OfgJ/69lsgJQXYvx+oW9fs0hCRFbBPwEY6dQKSkjhvgIi8wyRgcbW1dz79\ntCw1XVHhu/KYiW2/GsZCw1h4h0nAj/3qV0CdOsCnn5pdEiLyV+wT8HNvvilbUS5caHZJiMhs3E/A\nhkpLgehoYOdO4OqrzS4NEZmJHcMB6ErtnU2aAEOHAu+955vymIltvxrGQsNYeIdJIAA8/DDwn/9w\nL2Iich+bgwKAUkBCAjBrliwwR0T2xOYgmwoKkv0GFiwwuyRE5G8MTQLTp09HcHAwfvzxx8rnMjIy\nEBcXh/j4eKxcudLIywcEV9s7770X+O9/gQsXjC2Pmdj2q2EsNIyFd0KNOnFhYSFWrVqFNm3aVD6X\nn5+PBQsWID8/H0VFRbjtttuwa9cuBHO/RK+1bw9ccw3w+edAcrLZpSEif2HY3fepp57Ciy++WO25\nrKwspKenIywsDNHR0YiNjUVOTo5RRQgIyW7c0X/zG2DRIuPKYjZ3YhHoGAsNY+EdQ5JAVlYWIiMj\n0aVLl2rPHzp0CJGRkZXHkZGRKCoqMqIItjR4MLB8OUcJEZHrPG4OSklJweHDhy95fvLkycjIyKjW\n3l9bb3VQUFCNz48cORLR0dEAgPDwcCQlJVVmfGcboB2Oq7Z3Xun9t96ajAsXgHffdSA62hrl1/PY\n+ZxVymPm8bZt2/DEE09YpjxmHr/66qu2vj/MmTMHACrvl+7SfYjot99+i/79+6NBgwYAgIMHDyIi\nIgKbNm3CO++8AwAYN24cACA1NRUTJ05Ez549qxeKQ0QrORyOyh++K0aPBtq0AZ55xrgymcXdWAQy\nxkLDWGgsuWzE9ddfj9zcXDRr1gz5+fkYMWIEcnJyKjuGd+/efUltgEnAc598AkybBqxda3ZJiMjX\nPLl3GjY6yKnqDT4hIQHDhg1DQkICQkNDkZmZednmIPJM377AsGHA2bNA/fpml4aIrM7wsZl79+5F\ns2bNKo/Hjx+P3bt3Y8eOHRg4
"text": [
"<matplotlib.figure.Figure at 0x7f6230b704d0>"
]
}
],
"prompt_number": 73
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test RSID data"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"rsid_symbol_rate = 11025.0/1024\n",
"sqw_frequency = 2000 # approx 2kHz\n",
"\n",
"# The ratio between the rsid frequency step and the channel frequency step\n",
"# In our case the channel frequency step is bigger than the rsid frequency step so we try to \"interpolate\"\n",
"ratio = rsid_symbol_rate/7.805\n",
"\n",
"rsid_data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 2, 12, 0, 11, 4, 6, 2, 10, 11,1 ,8, 12, 13, 7, 4, 15, 12]\n",
"\n",
"# The number of sqw periods per symbol period\n",
"sqw_periods = int(round(sqw_frequency/rsid_symbol_rate))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 74
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tones = [(round(t), t-round(t)) for t in [x*ratio for x in rsid_data]]\n",
"print tones"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[(0.0, 0.0), (1.0, 0.3794492713004485), (3.0, -0.24110145739910305), (4.0, 0.13834781390134587), (6.0, -0.4822029147982061), (7.0, -0.10275364349775806), (8.0, 0.27669562780269175), (10.0, -0.3438551008968602), (11.0, 0.03559417040358781), (12.0, 0.41504344170403584), (14.0, -0.20550728699551613), (15.0, 0.17394198430493368), (17.0, -0.4466087443946165), (18.0, -0.06715947309416848), (19.0, 0.31228979820627956), (21.0, -0.3082609304932724), (7.0, -0.10275364349775806), (3.0, -0.24110145739910305), (17.0, -0.4466087443946165), (0.0, 0.0), (15.0, 0.17394198430493368), (6.0, -0.4822029147982061), (8.0, 0.27669562780269175), (3.0, -0.24110145739910305), (14.0, -0.20550728699551613), (15.0, 0.17394198430493368), (1.0, 0.3794492713004485), (11.0, 0.03559417040358781), (17.0, -0.4466087443946165), (18.0, -0.06715947309416848), (10.0, -0.3438551008968602), (6.0, -0.4822029147982061), (21.0, -0.3082609304932724), (17.0, -0.4466087443946165)]\n"
]
}
],
"prompt_number": 75
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def get_frac_signal(sr=16000):\n",
" signal = []\n",
" sqw_width=int(round(sr/sqw_frequency))\n",
" \n",
" #print \"Width: \"+str(sqw_width)\n",
" \n",
" for t in tones:\n",
" (inte, frac) = t\n",
" for i in range(sqw_periods):\n",
" high = int(round(sqw_width*(0.5+frac))) #(1+frac)/2)\n",
" #print \"High: \"+str(high)\n",
" for j in range(high):\n",
" signal.append(1)\n",
" for j in range(sqw_width-high):\n",
" signal.append(-1)\n",
" return signal\n",
"\n",
"def get_inte_signal(sr=16000):\n",
" signal = []\n",
" \n",
" for t in tones:\n",
" (inte, frac) = t\n",
" for i in range(int(round(sr/rsid_symbol_rate))):\n",
" signal.append(inte)\n",
" \n",
" return signal\n",
"\n",
"def get_perfect_signal(sr=16000):\n",
" signal = []\n",
" \n",
" for t in rsid_data:\n",
" for i in range(int(round(sr/rsid_symbol_rate))):\n",
" signal.append(t*ratio)\n",
" \n",
" return signal"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 76
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Returns rsid-like signal as a list of modem output channels over time\n",
"def get_rsid_channel_series(sr=16000):\n",
" inte = get_inte_signal(sr)\n",
" frac = get_frac_signal(sr)\n",
" return [x + y for x, y in zip(inte,frac)]\n",
" \n",
"\n",
"channel_data = get_rsid_channel_series(16000)\n",
"plt.plot(channel_data)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 77,
"text": [
"[<matplotlib.lines.Line2D at 0x7f6230755150>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHdxJREFUeJzt3X1wVNX9BvDnBlK15U1esknZTBNDQiAJyba8+Ia/YAzI\n1CAUWqAOMBAZB0dHhbHgWNvgtBDotArItIxFB3UMtVYoY0vkdZUBgQpJtUCFSlJDSIJAUyGI5OX8\n/tiyEJLdvck99/U8n5kMsHtz7/fs3vvs2XPPvWhCCAEiIlJCnN0FEBGRdRj6REQKYegTESmEoU9E\npBCGPhGRQhj6REQK0RX6NTU1GDduHLKyspCdnY3Vq1cDAEpKSuD3+xEIBBAIBFBeXm5qsUREZIym\nZ55+fX096uvrkZeXh4sXL+J73/seNm/ejLfeegu9e/fGwoULraiViIgM6qlnocTERCQmJgIAevXq\nhWHDhqG2thYAwGu7iIjco8tj+tXV1aioqMDtt98OAFizZg1yc3NRXFyMxsZG6QUSEZE8XQr9ixcv\nYtq0aVi1ahV69eqFBQsWoKqqCpWVlUhKSsKiRYvMqpOIiCTQNaYPAM3NzXjggQcwceJEPPnkkx2e\nr66uRlFRET755JP2G9A0OZUSESnGjOFzXT19IQSKi4sxfPjwdoFfV1cX/vumTZuQk5MT8fe9+vPz\nn//c9hrYPraN7fPej1l0ncjdu3cv3njjDYwYMQKBQAAAsGzZMpSVlaGyshKapiE1NRXr1q0zrVAi\nIjJOV+jffffdaGtr6/D4xIkTpRdERETm4RW5BuXn59tdgqm83D4vtw1g+6hzuk/kdnsDmmbq+BQR\nkReZlZ3s6RMRKYShT0SkEIY+EZFCGPpERAph6BMRKYShT0SkEIY+EZFCGPpERAph6BMRKYShT0Sk\nEIY+EZFCGPpERAph6BMRKYShT0SkEIY+EZFCGPokTWsroGmxf776yu5KyUn07DPNzXZX6R0MfZKm\nrk7fcrt3m1sHec+xY3ZX4B0MfbKcptldAblNHJNKGr6UJI3eMOcBTF3FjoI8PPzIcjyAqau4z8jD\n0Cdp9P4fzjyAiezD0CfLcXiHyD48/Mhy7OkT2YehT9LoHd4h6iruW/Iw9EkaHphkFu5b8jD0SZq2\nNrsrIKJYdIV+TU0Nxo0bh6ysLGRnZ2P16tUAgPPnz6OwsBAZGRkYP348GhsbTS2WnI29MSLn0xX6\n8fHxeOGFF3DkyBHs378fa9euxbFjx1BaWorCwkIcP34cBQUFKC0tNbtecjC9PX1+OBDZR1foJyYm\nIi8vDwDQq1cvDBs2DLW1tdiyZQvmzJkDAJgzZw42b95sXqXkeAx9Mgv3GXm6PKZfXV2NiooKjBkz\nBg0NDfD5fAAAn8+HhoYG6QWSe3BMn8j5uhT6Fy9exNSpU7Fq1Sr07t273XOapkHjBGxP27kz+u1v\nMzP1radnT3PrJPe4fFnfcrygTx7dh19zczOmTp2KWbNmYfLkyQBCvfv6+nokJiairq4OCQkJnf5u\nSUlJ+O/5+fnIz883VDTZ47HH5KznO9+Rsx5yP71zP/r3N7cOJwgGgwgGg6ZvRxMi9miZEAJz5szB\ngAED8MILL4Qf/8lPfoIBAwZg8eLFKC0tRWNjY4eTuZqmQccmyAWGDQP++c/Yy0V7u1NTgV27Qn8S\n1dcDeXmhPyNJSgIOHw79qRKzslNXT3/v3r144403MGLECAQCAQDA8uXLsWTJEvzoRz/C+vXrkZKS\ngrfeekt6gURE7DfKoyv07777brRFOEu3Y8cOqQWR9/EApqv07Auaxn1GJp4eIUvxXD/dKNY+wdCX\ni6FPuvHAIzsw9OXi5DkKO3cO+M1vgJaW0EF29WC7+uenn8rZDg9g9/jsM+B3vwtNmexsn/jOd4BH\nHzX3GxxDXy6GPoUNHGj+Nji84y5DhuhbZsKE7q1f75g+ycPhHSIy5OJFY7+vJ9TZ05eHoU9Ehpjd\nE+fwjlwMfbIcD2BvMfsWCQx9uRj6ZCmOz3qPkfeU8/Stx9AnIkOMfpBznr61GPpkOR7A3mLF8A7J\nw9BXyPjxwJdf2luD0QO4qip04zcy7r335ASq2aF88iTw+OPmbkMlnKevkO3bgbo6oE8fY+v5xS8i\nP/d//2ds3bEcOqTvTp8U28svy1mP2WP6ALB1a/e3Qe0x9BUjY2jl2WeNr6O7+J9pyOOUYROn1KEK\nHkKKccJ4upEaGBDy8ANUTXzbFWN36BsNbQaVPPwAVRMPIcXYHfpGMfSdx8g+5fb90Y14CCnGCQeZ\nkRoY+vLI6ukb3af4jcNaPIQUY3fom30hDxFFx9BXTLTQT06O/fvz58urpTvY05dH1geozydnPWQN\nTtlUTLTQv/NOYPJkYMYM6+rpKoa+PHpey7g44MoVoEePzp8PBICeBlLE7m+eKuIhpJhoB1lLi7ED\nWEYNsXB4R55Yr6UQQFtb7A8Hjum7C0NfMXaHPqdsOkes96K1NdTDj7YcA9t9eAhRWEtL5K/xTsHQ\nlydWYFv1zY+sxUNIMdF6+q2tHN6ha/SGPufpuwtDXzFtbZGfc8PwDkNfHj09/Vjf/Nxwl05qj1/e\nPOLNN4GHHoq93F13ATff3PlzTU3R76DpBDfdFPqzb9/Iy/TvH7odb6Qw0RsydvZC9+0LvVexXLgA\n9OrVvW3cdlvoz0ivpRBAv36x12PV6xTtPX/pJWDWLGvqcDuGvke8846+5U6fjtybj4sDeveWV5MZ\nbr4ZSE8H/va3yMvoCSqn27dP33JGQn/UKOCee4AtWyIvc/VDNhIreulXrgCXLkVf5pZbzK/DKxj6\nHqG3t9Wvn/0na432DL/5zei9Pi8MF7S2mr8NIWK/llbUEEt8vL01eg3H9D1Cb5DaHYh2b98trAh9\nQM77wXn67qIr9OfNmwefz4ecnJzwYyUlJfD7/QgEAggEAigvLzetSIot2gna67n9ANMbMG6fFWJV\nT98ot+9PKtIV+nPnzu0Q6pqmYeHChaioqEBFRQXuv/9+UwokfdzS0wfYM9RD74e4UU7o6ZO1dIX+\n2LFjceutt3Z4XPDddgyrQsIoKwLbCx8KVnxzc0JPnxFiPUNj+mvWrEFubi6Ki4vR2NgoqybqxO7d\noQMs0s+779pdIXXFxx9Hfz+ff96aOpzQ0/fCh7SbdHv2zoIFC/Czn/0MAPDcc89h0aJFWL9+fafL\nlpSUhP+en5+P/Pz87m5WWffea3cF8vAKTiA31+4KvPNaekUwGEQwGDR9O90O/YSEhPDfH374YRQV\nFUVc9vrQJ7VZdQUnA00fXiHtHDd2iJcuXWrKdro9vFNXVxf++6ZNm9rN7CEi55P1wchvbu6iq6c/\nc+ZMvP/++zh79iySk5OxdOlSBINBVFZWQtM0pKamYt26dWbXSqQrJFTqfdrdU+e9d9xHV+iXlZV1\neGzevHnSiyE18MSfPE7oZbO37i68IpcsZVVgqxJERqfqOqGnT9Zi6JOrqBLmehkJfSe8lk6oQTUM\nfbKc2cM7KvU+4+ON/T7n6auHd9n0GKf3nJxwgM+bB9xxB/Dww50//9vfhi6ecoJo72e/frFvfdzd\ndevlhPeTuoY9fXIVWR9qXgkrJ/Synd7RoPYY+uQ6Vlyc5YYgc8J9b5xQA3UNQ58sZ/eBHmv7XvkW\noIcT2uqEGlTC0CdLOeUum7GWsfuDyQqcp68mhj65ihUB46aep91j+m56rSiEs3ccQqWDx4qgirYN\nr/RMnTKe7oSrgkk/9vQ95MUX7a4gNqd8uNk9vLNoUexlFi82twbAGT19p+wTqmBP32VU7xlZccM1\nK0IoIQF4+mlg5UrztxWJ6vuSqtjTJ9exYlhDlUDkPH31MPTJclaEhJFpmVb09L0ynu6U8wqkH0Of\nLMWQuMYJw1BO6OlzTN9aDH1yHTf1xO1av1U1MLDdhydyLfLRR0BDAxAXF7odblxc6KDTNGcEgJXM\nbq/RmTlWBZnZ2zlzBti5E+jb
"text": [
"<matplotlib.figure.Figure at 0x7f6230a39390>"
]
}
],
"prompt_number": 77
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What happens when we add a filter"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Which fir filter to use\n",
"fir = rsid_si_fir_coeff"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 78
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Returns rsid-like signal as a list of modem output channels over time\n",
"def get_rsid_channel_series_filtered_frac(sr=16000):\n",
" inte = get_inte_signal(sr)\n",
" frac = get_frac_signal(sr)\n",
" filtered_frac = convolve(frac, fir, mode='valid')\n",
" return [x+y for x, y in zip(inte,filtered_frac)]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 79
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sr = 16000\n",
"\n",
"filtered_channel_data = get_rsid_channel_series_filtered_frac(sr)\n",
"plt.plot(filtered_channel_data)\n",
"\n",
"perfect = get_perfect_signal(sr)\n",
"plt.plot(perfect)\n",
"\n",
"inte = get_inte_signal(sr)\n",
"#plt.plot(inte)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nqlYs8Dip16G/dOlS3HPPPQCA
"text": [
"<matplotlib.figure.Figure at 0x7f6230509090>"
]
}
],
"prompt_number": 80
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
}
],
"metadata": {}
}
]
}