Last active
October 6, 2025 19:53
-
-
Save xkstein/cdbf8a9216f6ec11a80f8e8b181abf9b to your computer and use it in GitHub Desktop.
MZI Explainer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "87edfa9f-4511-471e-b29d-c09836562ce9", | |
| "metadata": {}, | |
| "source": [ | |
| "`'mzi_calibration_all.npz'` gives you freq(mode number), so to find the starting mode number, subtract out the starting frequency and find the x-intercept\n", | |
| "\n", | |
| "(with numpy poly1d objects, you can do this with `.roots`)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "c00fb7b3-3ebb-42fb-903f-f9686d9224ce", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Start Mode: -2694307.286009588\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "\n", | |
| "data = np.load('mzi_calibration_all.npz')\n", | |
| "fit = np.poly1d(data['mzi_fit_coefficients'])\n", | |
| "\n", | |
| "c = 299792458\n", | |
| "start_wl = 1637e-9\n", | |
| "\n", | |
| "roots = (fit - c / start_wl).roots\n", | |
| "roots = roots[np.isreal(roots)].real\n", | |
| "start_mode = roots[np.argmin(np.abs(roots))]\n", | |
| "\n", | |
| "print('Start Mode: ', start_mode)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "7e9e5630-2084-48b4-a162-10be94e67405", | |
| "metadata": {}, | |
| "source": [ | |
| "Now you can assign the mode numbers of the detected mzi peaks. This fit has **frequency increasing with mode number**." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "6eed76c2-b4f3-4d43-95c1-4a6c0fd9ee7e", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHACAYAAABeV0mSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAATFZJREFUeJzt3Qd4lFX69/E7vfeQAEloSeiEaqF3VPwj6roqKqjL6iqoCLoiiiAqgnXBVRARsLIoCuqrKApSRHqTIkUSIEgLBEgl/Xmvc5IZM5BAEpJM+36ua8yUZyYnj2Hml3POfY6LYRiGAAAAOAhXazcAAACgOhFuAACAQyHcAAAAh0K4AQAADoVwAwAAHArhBgAAOBTCDQAAcCiEGwAA4FAINwAAwKEQbgAAgENx6nCzevVqGTRokNSvX19cXFzkq6++qvRrLF26VK699loJCAiQOnXqyN/+9jc5dOhQldu0aNEiGTBggISFhek2bd++vULPmzZtmjRr1kx8fHwkJiZGRo8eLTk5OebHZ86cKQkJCRIYGKgvnTt3lu+//97iNd577z3p1auXflx973Pnzl30fW666SZp0KCBeHt7S7169WTo0KFy7Ngx8+PqZ1fPvfCyfv36Sp2HyZMnS5cuXcTX11eCg4MveWxqaqpER0eX22YAgHNx6nCTlZUlbdu2lXfeeadKzz948KAMHjxY+vTpo0OICjqnT5+WW2+9tdznPP/883Lfffddsk3dunWTV155pcLtmD9/vjz99NMyceJE2bNnj8yZM0c+++wzeeaZZ8zHqA//qVOnypYtW2Tz5s26zartu3fvNh+TnZ0t119/vcXzLtS7d2/5/PPPZd++ffLll19KYmKi3HbbbRcdt2zZMjl+/Lj50rFjR6mMvLw8+fvf/y4PP/zwZY8dPny4Dm4AAGhq40zozUONxYsXW9yXk5NjPPHEE0b9+vUNX19f4+qrrzZWrFhhfnzhwoWGu7u7UVhYaL7vm2++MVxcXIy8vLwyv8/EiRONe++997LtOXjwoG7Ttm3bLnvsyJEjjT59+ljcN2bMGKNr166XfF5ISIjx/vvvX3S/+hnV9z579uxlv/fXX39t8fNWtN2zZ882mjdvbnh5eRnNmjUz3nnnnTKPmzdvnhEUFFTu68yYMcPo2bOnsXz58gq3GQDg2Jy65+ZyHnnkEVm3bp0sWLBAduzYoXsSVM/GH3/8oR9XvRGurq4yb948KSwslLS0NPn444+lX79+4uHhUWvtVMM3qkdm48aN+nZSUpIsWbJEBg4cWObxqq3qZ1K9RGp4qqrOnDkjn376qf7+F/68avgqIiJC90J98803Fo+p50yYMEEPPameppdfflmee+45+fDDDyv1/X///Xd54YUX5KOPPtL/HwAA0Kydrmy15+bw4cOGm5ubcfToUYvj+vbta4wbN858e+XKlUZERIQ+Vr1G586dL9l7UBM9N8r06dMNDw8P3ZOknvfQQw9ddMyOHTsMPz8/3VbVG/Ldd9+V+VqX67l56qmndE+WOubaa681Tp8+bX7s1KlTxhtvvGGsX7/e2LhxozF27Fjds6N6eExiY2ON+fPnW7zmiy++qM9dRXtuVK9aQkKC8fHHH1eozQAA50G4KSfcfPvtt/o+FQZKX1R4uP322/Uxx48fN+Lj441///vfxtatW41Vq1bpIRIVgIqKivQxq1evtni+KYCUvu+TTz65onCjPtgjIyP1UI8KMIsWLTJiYmKMF154weK43Nxc448//jA2b95sPP3000Z4eLixe/fuMl/vUkFBBZh9+/YZP/74ox76GjhwoPnnLcvQoUONbt266euZmZn6tX18fCzOgRqeUiGxouFm9OjRxh133FHhNgMAnIc7HVhly8zMFDc3Nz3co76W5u/vr7+qichBQUHy6quvmh/75JNPdLXShg0bdBVVp06dLCqe3nrrLTl69KjFhOHIyMgraqsa0lFVS//85z/17TZt2ughpwcffFCeffZZ85CNp6enxMXFmYfUNm3aJNOnT5dZs2ZV6vuFh4frS9OmTaVFixb651XVUOUNcV1zzTXy008/mc+rMnv2bH1/aRee50v5+eefZefOnfLFF1/o28X5tLht6meeNGlSpX4mAIDjINyUo3379npuSkpKinTv3r3MY1R10YVzPUwf0EVFRfqrKs02BQolNDRU0tPTLe67Updqh+lDvyyqjbm5uVf0vU0/56VeR4U7VTZuCnKq9F7NC7r77rur/H1Vpdb58+fNt1VQ+8c//iG//PKLxMbGVvl1AQD2z6nDjepFOHDggEVpt/ogVgFE9UqoD99hw4bJG2+8ocPOqVOnZPny5brs+MYbb9SX//znP3pS65AhQyQjI0OXUTds2FAfX9VJusnJyea1Y1TJ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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "mzi_peak_times = np.sort(np.random.rand(10)) # get this from peak finding\n", | |
| "mode_numbers = np.arange(len(mzi_peak_times)) + start_mode\n", | |
| "\n", | |
| "mzi_peak_frequency = fit(mode_numbers)\n", | |
| "\n", | |
| "plt.plot(mzi_peak_times, mzi_peak_frequency)\n", | |
| "plt.ylabel('Frequency')\n", | |
| "plt.xlabel('Time')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "ff9710b2-9ec0-4e79-8510-0dc4d090c5d3", | |
| "metadata": {}, | |
| "source": [ | |
| "Then you have `mzi_peak_time` and `mzi_peak_frequency` which you can use to interpolate the sweep time axis into frequency." | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.13.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment