{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np, pandas as pd\n", "import pickle\n", "import os\n", "\n", "if not os.path.isdir(\"./lut_plot\"):\n", " os.mkdir(\"./lut_plot\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_meas(path):\n", " measurements = pickle.load(open(path, \"rb\"))\n", " df = pd.DataFrame(measurements, columns=[\"ampl\",\"mag_gen_sq\",\"mag_feedback_sq\",\"phase_diff\"])\n", " df[\"mag_gen\"] = np.sqrt(df[\"mag_gen_sq\"])\n", " df[\"mag_feedback\"] = np.sqrt(df[\"mag_feedback_sq\"])\n", " return df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = get_meas(\"./measurements.pkl\")\n", "df_lut = get_meas(\"./measurements_lut.pkl\")\n", "df_lut_sq = get_meas(\"./measurements_lut_sq.pkl\")\n", "df_tab = get_meas(\"./measurements_tab.pkl\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_slope(ampl, mag_feedback):\n", " slope, intersect = np.polyfit(x = ampl[0:20], y = mag_feedback[0:20], deg = 1)\n", " return slope, intersect\n", "\n", "#get_slope(df[\"ampl\"], df[\"mag_feedback\"])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_fac(ampl, mag_feedback):\n", " slope, intersect = get_slope(ampl, mag_feedback)\n", " return[(x*slope + intersect) / y for (x,y) in zip(ampl, mag_feedback)]\n", "def interp(x): return np.interp(x, df[\"ampl\"], fac)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = np.linspace(0.1, 0.5, num = 50)\n", "slope, intersect = get_slope(df[\"ampl\"], df[\"mag_feedback\"])\n", "\n", "plt.plot(df[\"ampl\"], df[\"mag_feedback\"], label=\"measurement\")\n", "plt.plot(x, x*slope + intersect, label = \"linear model\")\n", "\n", "plt.legend(loc=0)\n", "plt.title(\"Original Measurement\")\n", "\n", "plt.savefig(\"./lut_plot/original_measurement.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "slope, intersect = get_slope(df[\"ampl\"], df[\"mag_feedback\"])\n", "\n", "plt.plot(df_lut[\"ampl\"], df_lut[\"mag_feedback\"], label=\"measurement\")\n", "plt.plot(x, x*slope + intersect, label = \"linear model\")\n", "\n", "plt.legend(loc=0)\n", "plt.title(\"Lut Measurement\")\n", "\n", "plt.savefig(\"./lut_plot/lut_measurement.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "slope, intersect = get_slope(df[\"ampl\"], df[\"mag_feedback\"])\n", "\n", "plt.plot(df_lut_sq[\"ampl\"], df_lut_sq[\"mag_feedback\"], label=\"measurement\")\n", "plt.plot(x, x*slope + intersect, label = \"linear model\")\n", "\n", "plt.legend(loc=0)\n", "plt.title(\"Lut Squared Measurement\")\n", "\n", "plt.savefig(\"./lut_plot/lut_sq_measurement.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "slope, intersect = get_slope(df_tab[\"ampl\"], df_tab[\"mag_feedback\"])\n", "\n", "plt.plot(df_tab[\"ampl\"], df_tab[\"mag_feedback\"], label=\"measurement\")\n", "plt.plot(x, x*slope + intersect, label = \"linear model\")\n", "\n", "plt.legend(loc=0)\n", "plt.title(\"Lut Tab Measurement\")\n", "\n", "plt.savefig(\"./lut_plot/lut_tab_measurement.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "slope, intersect = get_slope(df[\"ampl\"], df[\"mag_feedback\"])\n", "\n", "plt.plot(df[\"ampl\"], df[\"mag_feedback\"], label=\"measurement\")\n", "plt.plot(df_lut[\"ampl\"], df_lut[\"mag_feedback\"], label=\"measurement lut\")\n", "plt.plot(df_lut_sq[\"ampl\"], df_lut_sq[\"mag_feedback\"], label=\"measurement lut sq\")\n", "plt.plot(df_tab[\"ampl\"], df_tab[\"mag_feedback\"], label=\"measurement tab sq\")\n", "plt.plot(x, x*slope + intersect, label = \"linear model\")\n", "\n", "plt.legend(loc=0)\n", "plt.title(\"All Measurements\")\n", "\n", "plt.savefig(\"./lut_plot/all_measurement.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fac = get_fac(df[\"ampl\"], df[\"mag_feedback\"])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pickle.dump({\"ampl\":list(df[\"ampl\"]),\"fac\":[f for f in fac]}, open(\"lut.pkl\", \"wb\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pickle.dump({\"ampl\":list(df[\"ampl\"]),\"fac\":[f**2 for f in fac]}, open(\"lut_sq.pkl\", \"wb\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "slope, intersect = get_slope(df[\"ampl\"], df[\"mag_feedback\"])\n", "ampl_corr = []\n", "for ampl in df[\"ampl\"]:\n", " y = ampl * slope + intersect\n", " mag_feedback_idx = np.argmin(np.abs(df[\"mag_feedback\"] - y))\n", " ampl_corr.append(df[\"ampl\"][mag_feedback_idx])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ampl_corr = np.array(ampl_corr)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "idx_start = np.argmax(ampl_corr != ampl_corr.min()) - 1\n", "idx_end = np.argmin(ampl_corr != ampl_corr.max()) \n", "start = 1.0 * idx_start / len(ampl_corr)\n", "end = 1.0 * idx_end / len(ampl_corr)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "orig_range = np.linspace(start,end,num=len(ampl_corr))\n", "new_range = np.linspace(0,1,num=len(ampl_corr))\n", "\n", "ampl_corr_new = []\n", "for f in new_range:\n", " ratio = np.interp(f, new_range, orig_range)\n", " new_ampl = np.interp(ratio, new_range, ampl_corr)\n", " ampl_corr_new.append(new_ampl)\n", "ampl_corr_new" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fac = ampl_corr_new / df[\"ampl\"]\n", "pickle.dump({\"ampl\":list(df[\"ampl\"]),\"fac\":[f for f in list(fac)]}, open(\"lut_tab.pkl\", \"wb\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pickle.load(open(\"./lut_tab.pkl\"))" ] }, { "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" } }, "nbformat": 4, "nbformat_minor": 1 }