{ "cells": [ { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "from numpy import *\n", "from pylab import *\n", "%matplotlib inline\n", "from audio.bitstream import BitStream\n", "from audio.coders import rice\n", "import audio.wave" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Preamble: Rice Coder\n", "============" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0000000000101010" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(42, uint16)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n" ] } ], "source": [ "frame = [0,0,1,1,7,255,301,16,78, 100, 0,0,0, 6]\n", "r = rice.from_frame(frame, signed=False)\n", "print r.b" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "000000" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(0,r)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "000010" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(1,r)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1111111111110" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(255, r)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "000000000000000010000010001110111111111111001101111111111010000001110110001001110000000000000000000001100" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(frame, r)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0000010" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BitStream(1,rice(b=5,signed=True))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 779\n", "1 408\n", "2 230\n", "3 147\n", "4 114\n", "5 105\n", "6 107\n", "7 115\n", "8 127\n" ] } ], "source": [ "for b in range(0,9):\n", " print b, len(BitStream(frame, rice(signed=False, b=b)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rice Amplitude Coder (Audio)\n", "================" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = 44100.0; dt = 1.0 / df\n", "f = 440.0\n", "t = r_[0:0.1:dt] # 0.1 sec of data\n", "data = cos(2*pi*f*t)\n", "#data = audio.io.record(1.0, df=df)[0]\n", "plot(data)\n", "data2 = wave.read(wave.write(data))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "int16\n", "4410\n" ] } ], "source": [ "data3 = wave.read(wave.write(data), scale=False)\n", "print data3.dtype\n", "data = data3[0]\n", "print len(data)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14\n" ] } ], "source": [ "r = rice.from_frame(data, signed=True) # near 15 ?\n", "print r.b" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "70560\n", "73510\n" ] } ], "source": [ "stream = BitStream(data, r)\n", "print len(data) * 16\n", "print len(stream) \n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-32768\n" ] }, { "data": { "image/png": "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\nQJI69v/kYJR8BkhEaAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "close()\n", "hist(abs(data.astype(int32)))\n", "# negative values of abs(data) ? WTF!!!\n", "print abs(int16(-2**15)) # overflow: abs output is a int16!" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "59956\n" ] }, { "data": { "text/plain": [ "(array([ 282., 284., 288., 300., 316., 336., 372., 424.,\n", " 544., 1264.]),\n", " array([ 0. , 327.7, 655.4, 983.1, 1310.8, 1638.5, 1966.2,\n", " 2293.9, 2621.6, 2949.3, 3277. ]),\n", " )" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAD8CAYAAACRkhiPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEN5JREFUeJzt3WusXFd5xvH/UyeYS6AkzZHl2lZtJKuVE1EuVpQWhJDS\nNuYinH6JjERx24ioIqVQtUJ2kQr9YAl6QS1qE8klKaZFRBYXxSrQYlwQ6ockPSGBxAkmhhBi14kP\nRTTQSoGEtx9mpRkcX+LZJ2fOeP1/0mjWvHvt2e9s6fiZvWfPOFWFJKlPPzPtBiRJ02MISFLHDAFJ\n6pghIEkdMwQkqWOGgCR1zBCQpI4ZApLUMUNAkjp23rQbOJOLL7641q9fP+02JGmm3HHHHd+tqrkz\nzVv2IbB+/Xrm5+en3YYkzZQkDz6TeZ4OkqSOGQKS1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aA\nJHXMEJCkji37bwxL0jSt3/GZqWz32+9/w5JsxyMBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1LEz\nhkCSm5IcT3LPWO0vknw9ydeSfDrJi8eW7UxyOMmhJFeO1V+Z5O627ENJsvgvR5J0Np7JkcBHgC0n\n1PYDl1bVS4FvADsBkmwCtgGXtHWuT7KirXMD8DZgY7ud+JySpCV2xhCoqi8D3zuh9vmqerw9vBVY\n28ZbgZur6rGqegA4DFyWZDXwoqq6taoK+Chw1WK9CEnSZBbjM4HfBT7XxmuAh8aWHWm1NW18Yv2k\nklybZD7J/MLCwiK0KEk6mUEhkOQ9wOPAxxannZGq2l1Vm6tq89zc3GI+tSRpzMS/HZTkt4E3Ale0\nUzwAR4F1Y9PWttpRnjplNF6XJE3RREcCSbYA7wbeVFX/O7ZoH7AtycokGxh9AHx7VR0DHk1yebsq\n6K3ALQN7lyQNdMYjgSQfB14LXJzkCPBeRlcDrQT2tys9b62q36uqg0n2AvcyOk10XVU90Z7q7Yyu\nNHoeo88QPockaarOGAJV9eaTlG88zfxdwK6T1OeBS8+qO0nSs8pvDEtSxwwBSeqYISBJHTMEJKlj\nhoAkdcwQkKSOGQKS1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYI\nSFLHDAFJ6pghIEkdMwQkqWOGgCR1zBCQpI4ZApLUsTOGQJKbkhxPcs9Y7aIk+5Pc3+4vHFu2M8nh\nJIeSXDlWf2WSu9uyDyXJ4r8cSdLZeCZHAh8BtpxQ2wEcqKqNwIH2mCSbgG3AJW2d65OsaOvcALwN\n2NhuJz6nJGmJnTEEqurLwPdOKG8F9rTxHuCqsfrNVfVYVT0AHAYuS7IaeFFV3VpVBXx0bB1J0pRM\n+pnAqqo61sYPA6vaeA3w0Ni8I622po1PrEuSpmjwB8PtnX0tQi//L8m1SeaTzC8sLCzmU0uSxkwa\nAo+0Uzy0++OtfhRYNzZvbasdbeMT6ydVVburanNVbZ6bm5uwRUnSmUwaAvuA7W28HbhlrL4tycok\nGxh9AHx7O3X0aJLL21VBbx1bR5I0JeedaUKSjwOvBS5OcgR4L/B+YG+Sa4AHgasBqupgkr3AvcDj\nwHVV9UR7qrczutLoecDn2k2SNEVnDIGqevMpFl1xivm7gF0nqc8Dl55Vd5KkZ5XfGJakjhkCktQx\nQ0CSOmYISFLHDAFJ6pghIEkdMwQkqWOGgCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJHTME\nJKljhoAkdcwQkKSOGQKS1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHVsUAgk+cMkB5Pck+Tj\nSZ6b5KIk+5Pc3+4vHJu/M8nhJIeSXDm8fUnSEBOHQJI1wB8Am6vqUmAFsA3YARyoqo3AgfaYJJva\n8kuALcD1SVYMa1+SNMTQ00HnAc9Lch7wfOA/ga3AnrZ8D3BVG28Fbq6qx6rqAeAwcNnA7UuSBpg4\nBKrqKPCXwHeAY8B/V9XngVVVdaxNexhY1cZrgIfGnuJIq0mSpmTI6aALGb273wD8PPCCJG8Zn1NV\nBdQEz31tkvkk8wsLC5O2KEk6gyGng34NeKCqFqrqx8CngF8FHkmyGqDdH2/zjwLrxtZf22pPU1W7\nq2pzVW2em5sb0KIk6XSGhMB3gMuTPD9JgCuA+4B9wPY2ZztwSxvvA7YlWZlkA7ARuH3A9iVJA503\n6YpVdVuSTwBfAR4H7gR2AxcAe5NcAzwIXN3mH0yyF7i3zb+uqp4Y2L8kaYCJQwCgqt4LvPeE8mOM\njgpONn8XsGvINiVJi8dvDEtSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1DFDQJI6ZghIUscM\nAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pghIEkdMwQkqWOGgCR1zBCQ\npI4ZApLUMUNAkjo2KASSvDjJJ5J8Pcl9SX4lyUVJ9ie5v91fODZ/Z5LDSQ4luXJ4+5KkIYYeCfwN\n8C9V9UvALwP3ATuAA1W1ETjQHpNkE7ANuATYAlyfZMXA7UuSBpg4BJL8LPAa4EaAqvpRVX0f2Ars\nadP2AFe18Vbg5qp6rKoeAA4Dl026fUnScEOOBDYAC8A/JLkzyYeTvABYVVXH2pyHgVVtvAZ4aGz9\nI632NEmuTTKfZH5hYWFAi5Kk0xkSAucBrwBuqKqXA/9DO/XzpKoqoM72iatqd1VtrqrNc3NzA1qU\nJJ3OkBA4Ahypqtva408wCoVHkqwGaPfH2/KjwLqx9de2miRpSiYOgap6GHgoyS+20hXAvcA+YHur\nbQduaeN9wLYkK5NsADYCt0+6fUnScOcNXP8dwMeSPAf4FvA7jIJlb5JrgAeBqwGq6mCSvYyC4nHg\nuqp6YuD2JUkDDAqBqroL2HySRVecYv4uYNeQbUqSFo/fGJakjhkCktQxQ0CSOmYISFLHhl4dJEnP\nuvU7PjPtFs5ZHglIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pgh\nIEkdMwQkqWOGgCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqY/72kpGfM/+bx3DP4SCDJiiR3Jvnn\n9viiJPuT3N/uLxybuzPJ4SSHklw5dNuSpGEW43TQO4H7xh7vAA5U1UbgQHtMkk3ANuASYAtwfZIV\ni7B9SdKEBoVAkrXAG4APj5W3AnvaeA9w1Vj95qp6rKoeAA4Dlw3ZviRpmKFHAn8NvBv4yVhtVVUd\na+OHgVVtvAZ4aGzekVZ7miTXJplPMr+wsDCwRUnSqUwcAkneCByvqjtONaeqCqizfe6q2l1Vm6tq\n89zc3KQtSpLOYMjVQa8C3pTk9cBzgRcl+SfgkSSrq+pYktXA8Tb/KLBubP21rSZJmpKJjwSqamdV\nra2q9Yw+8P23qnoLsA/Y3qZtB25p433AtiQrk2wANgK3T9y5JGmwZ+N7Au8H9ia5BngQuBqgqg4m\n2QvcCzwOXFdVTzwL25ckPUOLEgJV9SXgS238X8AVp5i3C9i1GNuUeuaXtrRY/NkISeqYISBJHTME\nJKljhoAkdcwQkKSO+VPS0oS8QkfnAo8EJKljhoAkdczTQZp5npaRJueRgCR1zBCQpI55OkiLwlMy\n0mzySECSOuaRwLPAd8WSZsU5HQL+YyxJp+fpIEnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CS\nOmYISFLHJg6BJOuSfDHJvUkOJnlnq1+UZH+S+9v9hWPr7ExyOMmhJFcuxguQJE1uyJHA48AfVdUm\n4HLguiSbgB3AgaraCBxoj2nLtgGXAFuA65OsGNK8JGmYiUOgqo5V1Vfa+AfAfcAaYCuwp03bA1zV\nxluBm6vqsap6ADgMXDbp9iVJwy3KZwJJ1gMvB24DVlXVsbboYWBVG68BHhpb7UirSZKmZHAIJLkA\n+CTwrqp6dHxZVRVQEzzntUnmk8wvLCwMbVGSdAqDQiDJ+YwC4GNV9alWfiTJ6rZ8NXC81Y8C68ZW\nX9tqT1NVu6tqc1VtnpubG9KiJOk0hlwdFOBG4L6q+uDYon3A9jbeDtwyVt+WZGWSDcBG4PZJty9J\nGm7I/yfwKuC3gLuT3NVqfwK8H9ib5BrgQeBqgKo6mGQvcC+jK4uuq6onBmxfkjTQxCFQVf8O5BSL\nrzjFOruAXZNuU5K0uPzGsCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQ\nkKSOGQKS1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ\n6pghIEkdMwQkqWNLHgJJtiQ5lORwkh1LvX1J0lOWNASSrAD+DngdsAl4c5JNS9mDJOkpS30kcBlw\nuKq+VVU/Am4Gti5xD5KkZqlDYA3w0NjjI60mSZqC86bdwMkkuRa4tj38YZJDEz7VxcB3F6erJTWr\nfcPs9j6rfcPs9j6rfcMS9J4PDH6KX3gmk5Y6BI4C68Yer221n1JVu4HdQzeWZL6qNg99nqU2q33D\n7PY+q33D7PY+q33DbPd+oqU+HfQfwMYkG5I8B9gG7FviHiRJzZIeCVTV40l+H/hXYAVwU1UdXMoe\nJElPWfLPBKrqs8Bnl2hzg08pTcms9g2z2/us9g2z2/us9g2z3ftPSVVNuwdJ0pT4sxGS1LFzMgRm\n4acpknw7yd1J7koy32oXJdmf5P52f+HY/J3t9RxKcuUS9nlTkuNJ7hmrnXWfSV7ZXu/hJB9Kkin1\n/r4kR9t+vyvJ65db70nWJfliknuTHEzyzlZf1vv9NH3Pwj5/bpLbk3y19f5nrb6s9/miqKpz6sbo\nA+dvAi8BngN8Fdg07b5O0ue3gYtPqP05sKONdwAfaONN7XWsBDa017diifp8DfAK4J4hfQK3A5cD\nAT4HvG5Kvb8P+OOTzF02vQOrgVe08QuBb7T+lvV+P03fs7DPA1zQxucDt7XtL+t9vhi3c/FIYJZ/\nmmIrsKeN9wBXjdVvrqrHquoB4DCj1/msq6ovA98b0meS1cCLqurWGv2VfHRsnaXu/VSWTe9Vdayq\nvtLGPwDuY/TN+mW930/T96ksi75bv1VVP2wPz2+3Ypnv88VwLobArPw0RQFfSHJHRt+QBlhVVcfa\n+GFgVRsvt9d0tn2uaeMT69PyjiRfa6eLnjy8X5a9J1kPvJzRO9OZ2e8n9A0zsM+TrEhyF3Ac2F9V\nM7XPJ3UuhsCseHVVvYzRL6pel+Q14wvbu4hlf+nWrPQ55gZGpwpfBhwD/mq67ZxakguATwLvqqpH\nx5ct5/1+kr5nYp9X1RPtb3Ito3f1l56wfNnu8yHOxRB4Rj9NMW1VdbTdHwc+zej0ziPtcJJ2f7xN\nX26v6Wz7PNrGJ9aXXFU90v7YfwL8PU+dVltWvSc5n9E/pB+rqk+18rLf7yfre1b2+ZOq6vvAF4Et\nzMA+H+pcDIFl/9MUSV6Q5IVPjoHfAO5h1Of2Nm07cEsb7wO2JVmZZAOwkdGHT9NyVn22w+lHk1ze\nrpR469g6S+rJP+jmNxntd1hGvbft3AjcV1UfHFu0rPf7qfqekX0+l+TFbfw84NeBr7PM9/mimPYn\n08/GDXg9oysTvgm8Z9r9nKS/lzC6suCrwMEnewR+DjgA3A98AbhobJ33tNdziCW82gD4OKND+B8z\nOr95zSR9ApsZ/fF/E/hb2hcVp9D7PwJ3A19j9Ie8ern1Drya0WmHrwF3tdvrl/t+P03fs7DPXwrc\n2Xq8B/jTVl/W+3wxbn5jWJI6di6eDpIkPUOGgCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJ\nHfs/lv/8SmTEQ14AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = 44100.0; dt = 1.0 / df\n", "f = 440.0\n", "t = r_[0:0.1:dt] # 0.1 sec of data\n", "data = 0.1*sin(2*pi*f*t)\n", "data = wave.read(wave.write(data), scale=False)[0]\n", "print len(BitStream(data, rice.from_frame(data, signed=True)))\n", "hist(abs(data))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Differential Rice Coder\n", "=============" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "df = 44100.0; dt = 1.0 / df\n", "f = 440.0\n", "t = r_[0:0.1:dt] # 0.1 sec of data\n", "#data = sin(2*pi*f*t)\n", "#data = wave.read(wave.write(data), scale=False)[0]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4410 4409\n" ] } ], "source": [ "ddata = diff(data)\n", "print len(data), len(ddata)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4410 4410\n" ] } ], "source": [ "ddata = diff(r_[0,data]) # coding of the first value\n", "print len(data), len(ddata)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 281., 288., 288., 300., 312., 340., 384., 412.,\n", " 560., 1245.]),\n", " array([ 0. , 20.6, 41.2, 61.8, 82.4, 103. , 123.6, 144.2,\n", " 164.8, 185.4, 206. ]),\n", " )" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAD8CAYAAACRkhiPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAD/NJREFUeJzt3X+snmddx/H3xxbHLydbdtKUtrE1qZpu0SHNMsWQmRlX\ngdD5z1ISoOpCNVQEg8EW/5j/NJlBUUncksrmShxrGn5kjfyQ0UCIf2zjDBa2ttQ1lNHWbj1IdKjJ\nsOXrH+da9tj19HTPfXaes17vV3LyXM/3vu77vs6VO/2c+8fzNFWFJKlPPzHpAUiSJscQkKSOGQKS\n1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHVs+aQHMJ+rrrqq1q5dO+lhSNLLyiOPPPL9qpqa\nr9+SD4G1a9cyPT096WFI0stKkicvpp+XgySpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pgh\nIEkdMwQkqWNL/hPDkjRJa3d8biL7/e7tb12U/XgmIEkdMwQkqWOGgCR1bN4QSHJ3ktNJHh+pfSTJ\nt5N8K8lnk7xuZNnOJEeTHEly00j9jUkea8s+liQL/+tIkl6MizkTuAfYdE7tAeCaqvpF4F+BnQBJ\nNgBbgKvbOnckWdbWuRN4D7C+/Zy7TUnSIps3BKrqa8APzql9qarOtLcPAqtbezOwt6qerapjwFHg\nuiQrgcur6sGqKuATwM0L9UtIksazEPcEfg/4QmuvAo6PLDvRaqta+9z6eSXZlmQ6yfTMzMwCDFGS\ndD6DQiDJnwFngHsXZjizqmp3VW2sqo1TU/P+72iSpDGN/WGxJL8DvA24sV3iATgJrBnptrrVTvL8\nJaPRuiRpgsY6E0iyCfgQ8Paq+p+RRfuBLUkuS7KO2RvAD1fVKeCZJNe3p4LeDdw/cOySpIHmPRNI\nch9wA3BVkhPAbcw+DXQZ8EB70vPBqvqDqjqYZB9wiNnLRNur6mzb1HuZfdLoVczeQ/gCkqSJmjcE\nquod5ynfdYH+u4Bd56lPA9e8qNFJkl5SfmJYkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSO\nGQKS1DFDQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pgh\nIEkdMwQkqWOGgCR1zBCQpI4ZApLUsXlDIMndSU4neXykdmWSB5I80V6vGFm2M8nRJEeS3DRSf2OS\nx9qyjyXJwv86kqQX42LOBO4BNp1T2wEcqKr1wIH2niQbgC3A1W2dO5Isa+vcCbwHWN9+zt2mJGmR\nzRsCVfU14AfnlDcDe1p7D3DzSH1vVT1bVceAo8B1SVYCl1fVg1VVwCdG1pEkTci49wRWVNWp1n4K\nWNHaq4DjI/1OtNqq1j63fl5JtiWZTjI9MzMz5hAlSfMZfGO4/WVfCzCW0W3urqqNVbVxampqITct\nSRoxbgg83S7x0F5Pt/pJYM1Iv9WtdrK1z61LkiZo3BDYD2xt7a3A/SP1LUkuS7KO2RvAD7dLR88k\nub49FfTukXUkSROyfL4OSe4DbgCuSnICuA24HdiX5FbgSeAWgKo6mGQfcAg4A2yvqrNtU+9l9kmj\nVwFfaD+SpAmaNwSq6h1zLLpxjv67gF3nqU8D17yo0UmSXlJ+YliSOmYISFLHDAFJ6pghIEkdMwQk\nqWOGgCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1DFDQJI6\nZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktSxQSGQ5I+THEzyeJL7krwyyZVJHkjyRHu9\nYqT/ziRHkxxJctPw4UuShhg7BJKsAv4I2FhV1wDLgC3ADuBAVa0HDrT3JNnQll8NbALuSLJs2PAl\nSUMMvRy0HHhVkuXAq4F/AzYDe9ryPcDNrb0Z2FtVz1bVMeAocN3A/UuSBhg7BKrqJPCXwPeAU8B/\nVtWXgBVVdap1ewpY0dqrgOMjmzjRapKkCRlyOegKZv+6Xwe8HnhNkneO9qmqAmqMbW9LMp1kemZm\nZtwhSpLmMeRy0G8Ax6pqpqr+F/gM8KvA00lWArTX063/SWDNyPqrW+0Fqmp3VW2sqo1TU1MDhihJ\nupAhIfA94Pokr04S4EbgMLAf2Nr6bAXub+39wJYklyVZB6wHHh6wf0nSQMvHXbGqHkryKeAbwBng\nm8Bu4LXAviS3Ak8Ct7T+B5PsAw61/tur6uzA8UuSBhg7BACq6jbgtnPKzzJ7VnC+/ruAXUP2KUla\nOH5iWJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pghIEkd\nMwQkqWOGgCR1zBCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1LFB\nIZDkdUk+leTbSQ4n+ZUkVyZ5IMkT7fWKkf47kxxNciTJTcOHL0kaYuiZwN8CX6yqXwB+CTgM7AAO\nVNV64EB7T5INwBbgamATcEeSZQP3L0kaYOwQSPLTwJuBuwCq6kdV9R/AZmBP67YHuLm1NwN7q+rZ\nqjoGHAWuG3f/kqThhpwJrANmgH9I8s0kH0/yGmBFVZ1qfZ4CVrT2KuD4yPonWk2SNCFDQmA58MvA\nnVX1BuC/aZd+nlNVBdSL3XCSbUmmk0zPzMwMGKIk6UKGhMAJ4ERVPdTef4rZUHg6yUqA9nq6LT8J\nrBlZf3WrvUBV7a6qjVW1cWpqasAQJUkXMnYIVNVTwPEkP99KNwKHgP3A1lbbCtzf2vuBLUkuS7IO\nWA88PO7+JUnDLR+4/vuAe5P8JPAd4HeZDZZ9SW4FngRuAaiqg0n2MRsUZ4DtVXV24P4lSQMMCoGq\nehTYeJ5FN87Rfxewa8g+JUkLx08MS1LHDAFJ6tjQewKS9JJbu+Nzkx7CJcszAUnqmCEgSR0zBCSp\nY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pghIEkdMwQkqWOGgCR1zBCQpI4ZApLUMUNAkjpm\nCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1LHBIZBkWZJvJvmn9v7KJA8keaK9XjHSd2eS\no0mOJLlp6L4lScMsX4BtvB84DFze3u8ADlTV7Ul2tPd/mmQDsAW4Gng98OUkP1dVZxdgDJIWwdod\nn5v0ELTABp0JJFkNvBX4+Eh5M7CntfcAN4/U91bVs1V1DDgKXDdk/5KkYYZeDvob4EPAj0dqK6rq\nVGs/Baxo7VXA8ZF+J1rtBZJsSzKdZHpmZmbgECVJcxk7BJK8DThdVY/M1aeqCqgXu+2q2l1VG6tq\n49TU1LhDlCTNY8g9gTcBb0/yFuCVwOVJ/hF4OsnKqjqVZCVwuvU/CawZWX91q0mSJmTsEKiqncBO\ngCQ3AH9SVe9M8hFgK3B7e72/rbIf+GSSjzJ7Y3g98PD4Q5f65Q1aLZSFeDroXLcD+5LcCjwJ3AJQ\nVQeT7AMOAWeA7T4ZJEmTtSAhUFVfBb7a2v8O3DhHv13AroXYpyRpOD8xLEkdMwQkqWOGgCR1zBCQ\npI69FE8HSV3wMU1dCjwTkKSOGQKS1DFDQJI6ZghIUse8MayXPW/QSuPzTECSOuaZgBaEf41LL0+e\nCUhSxzwTeAn4V7Gkl4tLOgT8x1iSLszLQZLUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQ\nkKSOGQKS1LGxQyDJmiRfSXIoycEk72/1K5M8kOSJ9nrFyDo7kxxNciTJTQvxC0iSxjfkTOAM8MGq\n2gBcD2xPsgHYARyoqvXAgfaetmwLcDWwCbgjybIhg5ckDTN2CFTVqar6Rmv/EDgMrAI2A3tatz3A\nza29GdhbVc9W1THgKHDduPuXJA23IPcEkqwF3gA8BKyoqlNt0VPAitZeBRwfWe1Eq0mSJmRwCCR5\nLfBp4ANV9czosqoqoMbY5rYk00mmZ2Zmhg5RkjSHQSGQ5BXMBsC9VfWZVn46ycq2fCVwutVPAmtG\nVl/dai9QVburamNVbZyamhoyREnSBQx5OijAXcDhqvroyKL9wNbW3grcP1LfkuSyJOuA9cDD4+5f\nkjTckP9U5k3Au4DHkjzaah8Gbgf2JbkVeBK4BaCqDibZBxxi9smi7VV1dsD+JUkDjR0CVfUvQOZY\nfOMc6+wCdo27T0nSwvITw5LUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKljhoAkdcwQkKSOGQKS1DFD\nQJI6ZghIUscMAUnqmCEgSR0zBCSpY4aAJHXMEJCkjhkCktQxQ0CSOmYISFLHDAFJ6pghIEkdMwQk\nqWOGgCR1zBCQpI4teggk2ZTkSJKjSXYs9v4lSc9b1BBIsgz4O+C3gA3AO5JsWMwxSJKet9hnAtcB\nR6vqO1X1I2AvsHmRxyBJahY7BFYBx0fen2g1SdIELJ/0AM4nyTZgW3v7X0mOjLmpq4DvL8yoLmnO\n08Vxni6O8zS/eecofzF4Hz9zMZ0WOwROAmtG3q9utf+nqnYDu4fuLMl0VW0cup1LnfN0cZyni+M8\nzW8pzdFiXw76OrA+ybokPwlsAfYv8hgkSc2inglU1Zkkfwj8M7AMuLuqDi7mGCRJz1v0ewJV9Xng\n84u0u8GXlDrhPF0c5+niOE/zWzJzlKqa9BgkSRPi10ZIUscuyRDwqynmluS7SR5L8miS6Va7MskD\nSZ5or1dMepyLLcndSU4neXykNue8JNnZjq8jSW6azKgX3xzz9OdJTrZj6tEkbxlZ1us8rUnylSSH\nkhxM8v5WX3LH1CUXAn41xUX59aq6duQRtR3AgapaDxxo73tzD7DpnNp556UdT1uAq9s6d7Tjrgf3\n8MJ5Avjrdkxd2+779T5PZ4APVtUG4Hpge5uPJXdMXXIhgF9NMY7NwJ7W3gPcPMGxTERVfQ34wTnl\nueZlM7C3qp6tqmPAUWaPu0veHPM0l57n6VRVfaO1fwgcZvbbEZbcMXUphoBfTXFhBXw5ySPtk9kA\nK6rqVGs/BayYzNCWnLnmxWPshd6X5FvtctFzlzicJyDJWuANwEMswWPqUgwBXdivVdW1zF4u257k\nzaMLa/ZxMR8ZO4fzckF3Aj8LXAucAv5qssNZOpK8Fvg08IGqemZ02VI5pi7FELior6boVVWdbK+n\ngc8ye8r5dJKVAO319ORGuKTMNS8eYyOq6umqOltVPwb+nucvY3Q9T0lewWwA3FtVn2nlJXdMXYoh\n4FdTzCHJa5L81HNt4DeBx5mdn62t21bg/smMcMmZa172A1uSXJZkHbAeeHgC41sSnvtHrfltZo8p\n6HiekgS4CzhcVR8dWbTkjqkl+S2iQ/jVFBe0Avjs7PHJcuCTVfXFJF8H9iW5FXgSuGWCY5yIJPcB\nNwBXJTkB3AbcznnmpaoOJtkHHGL2KZDtVXV2IgNfZHPM0w1JrmX20sZ3gd+HvucJeBPwLuCxJI+2\n2odZgseUnxiWpI5dipeDJEkXyRCQpI4ZApLUMUNAkjpmCEhSxwwBSeqYISBJHTMEJKlj/wdoWIzh\nGI3K7AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hist(abs(ddata))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6\n", "42363\n" ] } ], "source": [ "r = rice.from_frame(ddata, signed=True)\n", "print r.b\n", "print len(BitStream(ddata, r))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "idata = cumsum(ddata)\n", "all(data == idata)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "24747\n" ] } ], "source": [ "dddata = diff(r_[0, diff(r_[0, data])])\n", "r = rice.from_frame(dddata, signed=True)\n", "print r.b\n", "print len(BitStream(dddata, r))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iidata = cumsum(cumsum(dddata))\n", "all(data == iidata)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }