aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandreas128 <Andreas>2017-05-06 12:44:24 +0100
committerandreas128 <Andreas>2017-05-06 12:44:24 +0100
commit92b5073fe3bc0aaac0eecc1647ca3176d204df89 (patch)
treea3bdc6b21dbd036e7a21a1af20e0a4a72d2f8c98
parent2deeb43ce5d99dafa1556e3fdc1d3a02911614a6 (diff)
downloadODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.tar.gz
ODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.tar.bz2
ODR-StaticPrecorrection-92b5073fe3bc0aaac0eecc1647ca3176d204df89.zip
Add analyze_dab_nonlinearity.ipynb
-rw-r--r--analyze_dab_nonlinearity.ipynb451
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
+}