diff options
author | andreas128 <Andreas> | 2017-05-06 12:44:24 +0100 |
---|---|---|
committer | andreas128 <Andreas> | 2017-05-06 12:44:24 +0100 |
commit | 92b5073fe3bc0aaac0eecc1647ca3176d204df89 (patch) | |
tree | a3bdc6b21dbd036e7a21a1af20e0a4a72d2f8c98 | |
parent | 2deeb43ce5d99dafa1556e3fdc1d3a02911614a6 (diff) | |
download | ODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.tar.gz ODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.tar.bz2 ODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.zip |
Add analyze_dab_nonlinearity.ipynb
-rw-r--r-- | analyze_dab_nonlinearity.ipynb | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/analyze_dab_nonlinearity.ipynb b/analyze_dab_nonlinearity.ipynb new file mode 100644 index 0000000..0bd874a --- /dev/null +++ b/analyze_dab_nonlinearity.ipynb @@ -0,0 +1,451 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import src.dab_util as du" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": true, + "editable": true + }, + "source": [ + "# Align Original / Recored Files\n", + "\n", + "Using Txgain 81" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "#path = \"../test_dat/out.iq\"\n", + "path = \"./recored.dat\"\n", + "frame = 96*8192\n", + "offset = 5 * frame + 8192\n", + "length = 2 * frame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sig_rec = np.fromfile(path, dtype=np.complex64, count=offset + length)[offset:]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "#sig_rec = sig_rec[30370+0*frame:30370+1*frame]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "i = 0\n", + "l = length\n", + "plt.plot(np.abs(sig_rec[i:i + l]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "n = sig_rec.shape[0]\n", + "max_mean = np.mean(np.sort(np.abs(sig_rec))[int(n*0.90):])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sym = int(frame / 76.0)\n", + "mask = np.ones((int(4*sym)))\n", + "mask[int(2*sym) : int(3*sym)] = -1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "import scipy.signal as ss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "c = ss.correlate(np.abs(sig_rec), mask, mode='same')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "max1 = np.argmax(c[:frame])\n", + "max2 = frame + np.argmax(c[frame:])\n", + "max2 - max1 - frame < sym / 100" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "plt.plot(c)\n", + "plt.plot((max1, max1), (0, 1200))\n", + "plt.plot((max2, max2), (0, 1200))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "i = max2\n", + "l = 2*sym\n", + "plt.plot(np.abs(sig_rec[i:i + l]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sig_rec.tofile(\"./orig_frame_8.iq\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "path = \"../test_dat/out.iq\"\n", + "frame = 96*8192\n", + "offset = 8 * frame + 8192 + 10500 + 72\n", + "length = 1 * frame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sig_orig = np.fromfile(path, dtype=np.complex64, count=offset + length)[offset:]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "plt.plot(sig_orig)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sig_orig.tofile(\"./orig_frame_8.iq\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "sig_rec = sig_rec / sig_rec.std()\n", + "sig_orig = sig_orig / sig_orig.std()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "i = 10000\n", + "l = 400\n", + "plt.plot(sig_orig[i:i+l], label=\"in\")\n", + "plt.plot(sig_rec[i:i+l], label=\"out\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "from sklearn.linear_model import Ridge\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": true, + "editable": true + }, + "source": [ + "# Approximate Amplifier Function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "plt.plot(np.abs(sig_orig), np.abs(sig_rec), 'o')\n", + "plt.xlabel(\"Amplitude In\")\n", + "plt.ylabel(\"Amplitude Out\")\n", + "\n", + "deg = 8\n", + "t = np.linspace(0,5)\n", + "model = make_pipeline(PolynomialFeatures(deg), Ridge())\n", + "model.fit(np.abs(sig_orig.reshape(-1,1)), np.abs(sig_rec.reshape(-1,1)))\n", + "y = model.predict(t.reshape(-1,1))\n", + "plt.plot(t, np.abs(y))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": true, + "editable": true + }, + "source": [ + "# Approximate Inverse Function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "plt.plot(np.abs(sig_orig), np.abs(sig_rec), 'o')\n", + "plt.xlabel(\"Amplitude In\")\n", + "plt.ylabel(\"Amplitude Out\")\n", + "\n", + "deg = 8\n", + "t = np.linspace(0,3)\n", + "model = make_pipeline(PolynomialFeatures(deg), Ridge(alpha=100))\n", + "model.fit(np.abs(sig_rec.reshape(-1,1)),np.abs(sig_orig.reshape(-1,1)) )\n", + "y = model.predict(t.reshape(-1,1))\n", + "plt.plot(t, np.abs(y))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": true, + "editable": true + }, + "source": [ + "# Phase Error" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "l = 100000\n", + "plt.plot(np.abs(sig_orig[i:i+l]), (np.angle(sig_rec[i:i+l], deg = 1) - np.angle(sig_orig[i:i+l], deg = 1)) % 180, 'o')\n", + "plt.xlabel(\"Amplitude In\")\n", + "plt.ylabel(\"Phase difference\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": true, + "editable": true + }, + "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" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} |