{ "cells": [ { "cell_type": "markdown", "id": "63517e36", "metadata": {}, "source": [ "# Parameterized IO Sync Frames\n", "Most experimental sequences include a scan of one or multiple parameters such as hold times, RF frequencies... which are dynamically reconfigured between different experimental runs. To this end, Parameterized IO Sync Frames are introduced, which are built upon a *frame function* and *frame parameter* and which are only recompiled in case a change in any of both is detected.\n", "\n", "In this example we scan the RF in/out delay to find the best overlap value, i.e. to establish the RF loopback latency. We use a set of 3 Parameterized IO Sync Frames that initialize the RF outputs, set the LEDs and perform the RF generation and acquisition; together with a nested dictionary defining the corresponding parameters.\n", "\n", "Required hardware connection (see [README](https://github.com/dspsandbox/OpenLabCtrl/blob/main/README.md#ios--pin-mapping) for IO Names and Pin Mapping):\n", "* SMA cable between rf_out_0 <-> rf_in_0" ] }, { "cell_type": "markdown", "id": "57714d5f", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": null, "id": "607b9c7a", "metadata": {}, "outputs": [], "source": [ "import time \n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from openlabctrl.device import Rp_125_14_Z7010\n", "from openlabctrl.sequence import IoSequence\n", "from openlabctrl.frame import IoSyncFrame, ParamIoSyncFrame\n", "from openlabctrl.io.scope import ScopeSource" ] }, { "cell_type": "markdown", "id": "43fb4f95", "metadata": {}, "source": [ "### Device instances" ] }, { "cell_type": "code", "execution_count": 2, "id": "563af75c", "metadata": {}, "outputs": [], "source": [ "rp_0 = Rp_125_14_Z7010(ip=\"192.168.1.143\", label=\"rp_0\")" ] }, { "cell_type": "markdown", "id": "0436c2e7", "metadata": {}, "source": [ "### IO Sequences & IO Frames instances" ] }, { "cell_type": "code", "execution_count": 3, "id": "6e410a24", "metadata": {}, "outputs": [], "source": [ "seq = IoSequence(device_list=[rp_0])\n", "fr_0 = ParamIoSyncFrame(device_type=Rp_125_14_Z7010, trig=None)\n", "fr_1 = ParamIoSyncFrame(device_type=Rp_125_14_Z7010, trig=None)\n", "fr_2 = ParamIoSyncFrame(device_type=Rp_125_14_Z7010, trig=None)\n" ] }, { "cell_type": "markdown", "id": "74b67a24", "metadata": {}, "source": [ "### Parameters" ] }, { "cell_type": "code", "execution_count": null, "id": "979db0cd", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "param_dict = {\n", " \"rf_init\" : {\n", " \"frequency\" : 0,\n", " \"phase\" : 0,\n", " \"amplitude\" : 0\n", " },\n", " \"led\" : {\n", " \"led_on_idx\" : 0\n", " },\n", " \"rf_in_out\" :{\n", " \"samples\": 100,\n", " \"acq_delay\": 0\n", " }\n", "}\n", "\n", "data_out_list = 0.5 * np.exp(-np.linspace(-5, 5, 100)**2) \n", "\n", "plt.plot(data_out_list)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "e5930f84", "metadata": {}, "source": [ "### Frame definitions \n" ] }, { "cell_type": "code", "execution_count": 5, "id": "0406fc31", "metadata": {}, "outputs": [], "source": [ "\n", "def rf_init(fr : IoSyncFrame, fr_param: dict):\n", " print(\"--> Building RF init frame\")\n", " fr.reset()\n", " fr.led.output(val=0, mask = 0xff)\n", " fr.rf_out_0.frequency(fr_param[\"frequency\"])\n", " fr.rf_out_0.phase(fr_param[\"phase\"])\n", " fr.rf_out_0.amplitude(fr_param[\"amplitude\"])\n", " fr.rf_out_0.phase_reset()\n", " fr.delay(1000)\n", "\n", "def led_update(fr: IoSyncFrame, fr_param: dict):\n", " print(\"--> Building LED update frame\")\n", " fr.reset()\n", " fr.led.output(val=(1 << fr_param[\"led_on_idx\"]), mask=(1 << fr_param[\"led_on_idx\"]))\n", " \n", "def rf_in_out(fr: IoSyncFrame, fr_param: dict):\n", " print(\"--> Building RF in/out frame\")\n", " fr.reset()\n", " fr.scope_0.source(ScopeSource.RF_IN_0)\n", " fr.scope_0.decimation(1) \n", " fr.rsync()\n", " for data_out in data_out_list:\n", " fr.rf_out_0.amplitude(data_out)\n", " fr.scope_0.delay(fr_param[\"acq_delay\"])\n", " fr.scope_0.acquire(samples=fr_param[\"samples\"], label=\"acq_rf\")\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "641f4621", "metadata": {}, "outputs": [], "source": [ "fr_0.set_frame_function(rf_init)\n", "fr_0.set_frame_parameter(param_dict[\"rf_init\"]) \n", "fr_1.set_frame_function(led_update)\n", "fr_1.set_frame_parameter(param_dict[\"led\"])\n", "fr_2.set_frame_function(rf_in_out)\n", "fr_2.set_frame_parameter(param_dict[\"rf_in_out\"]) \n" ] }, { "cell_type": "markdown", "id": "7d3c09a3", "metadata": {}, "source": [ "### Sequence definition" ] }, { "cell_type": "code", "execution_count": 7, "id": "1430a2e3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+--------------------+\n", "| rp_0@192.168.1.143 |\n", "+--------------------+\n", "| rf init |\n", "| led update |\n", "| rf in out |\n", "+--------------------+\n", "NOTE: Frames with (*) are triggered by external trigger source.\n", "\n" ] } ], "source": [ "seq.reset()\n", "seq.add_frame(frame=fr_0, device=rp_0, label=\"rf init\")\n", "seq.add_frame(frame=fr_1, device=rp_0, label=\"led update\")\n", "seq.add_frame(frame=fr_2, device=rp_0, label=\"rf in out\")\n", "\n", "print(seq.sequence_description())" ] }, { "cell_type": "markdown", "id": "528b48e0", "metadata": {}, "source": [ "### Run scan" ] }, { "cell_type": "code", "execution_count": 8, "id": "da00d851", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0: led_on_idx=0, acq_delay=0\n", "--> Building RF init frame\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 1: led_on_idx=0, acq_delay=1\n", "--> Building RF in/out frame\n", "Iteration 2: led_on_idx=0, acq_delay=2\n", "--> Building RF in/out frame\n", "Iteration 3: led_on_idx=0, acq_delay=3\n", "--> Building RF in/out frame\n", "Iteration 4: led_on_idx=0, acq_delay=4\n", "--> Building RF in/out frame\n", "Iteration 5: led_on_idx=1, acq_delay=5\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 6: led_on_idx=1, acq_delay=6\n", "--> Building RF in/out frame\n", "Iteration 7: led_on_idx=1, acq_delay=7\n", "--> Building RF in/out frame\n", "Iteration 8: led_on_idx=1, acq_delay=8\n", "--> Building RF in/out frame\n", "Iteration 9: led_on_idx=2, acq_delay=9\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 10: led_on_idx=2, acq_delay=10\n", "--> Building RF in/out frame\n", "Iteration 11: led_on_idx=2, acq_delay=11\n", "--> Building RF in/out frame\n", "Iteration 12: led_on_idx=2, acq_delay=12\n", "--> Building RF in/out frame\n", "Iteration 13: led_on_idx=2, acq_delay=13\n", "--> Building RF in/out frame\n", "Iteration 14: led_on_idx=3, acq_delay=14\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 15: led_on_idx=3, acq_delay=15\n", "--> Building RF in/out frame\n", "Iteration 16: led_on_idx=3, acq_delay=16\n", "--> Building RF in/out frame\n", "Iteration 17: led_on_idx=3, acq_delay=17\n", "--> Building RF in/out frame\n", "Iteration 18: led_on_idx=4, acq_delay=18\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 19: led_on_idx=4, acq_delay=19\n", "--> Building RF in/out frame\n", "Iteration 20: led_on_idx=4, acq_delay=20\n", "--> Building RF in/out frame\n", "Iteration 21: led_on_idx=4, acq_delay=21\n", "--> Building RF in/out frame\n", "Iteration 22: led_on_idx=4, acq_delay=22\n", "--> Building RF in/out frame\n", "Iteration 23: led_on_idx=5, acq_delay=23\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 24: led_on_idx=5, acq_delay=24\n", "--> Building RF in/out frame\n", "Iteration 25: led_on_idx=5, acq_delay=25\n", "--> Building RF in/out frame\n", "Iteration 26: led_on_idx=5, acq_delay=26\n", "--> Building RF in/out frame\n", "Iteration 27: led_on_idx=6, acq_delay=27\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n", "Iteration 28: led_on_idx=6, acq_delay=28\n", "--> Building RF in/out frame\n", "Iteration 29: led_on_idx=6, acq_delay=29\n", "--> Building RF in/out frame\n", "Iteration 30: led_on_idx=6, acq_delay=30\n", "--> Building RF in/out frame\n", "Iteration 31: led_on_idx=7, acq_delay=31\n", "--> Building LED update frame\n", "--> Building RF in/out frame\n" ] } ], "source": [ "N=32\n", "delay_list = np.arange(N) #generate a list of delays from 0 to N-1\n", "led_val_list = np.linspace(0, 7, N, dtype=int) #progressively turn on more LEDs\n", "overlap_list = [] #overlap between RF out and scope acquisition\n", "\n", "\n", "for i in range(N):\n", " print(f\"Iteration {i}: led_on_idx={led_val_list[i]}, acq_delay={delay_list[i]}\")\n", " \n", " param_dict[\"led\"][\"led_on_idx\"] = led_val_list[i]\n", " param_dict[\"rf_in_out\"][\"acq_delay\"] = delay_list[i]\n", " \n", " seq.upload()\n", " seq.start()\n", " seq.wait()\n", " \n", " scope_dict = seq.get_scope()\n", " data_in_list = scope_dict[rp_0.get_uid()][\"rf in out\"][\"scope_0\"][\"acq_rf\"][\"data\"]\n", " norm_in = np.sqrt(np.sum(data_in_list.astype(float)**2))\n", " norm_out = np.sqrt(np.sum(data_out_list.astype(float)**2))\n", " overlap = np.sum(data_in_list.astype(float)*data_out_list.astype(float)) / (norm_in*norm_out)\n", " overlap_list.append(overlap)\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "7efcbba4", "metadata": {}, "outputs": [], "source": [ "seq.stop()" ] }, { "cell_type": "markdown", "id": "0dec271b", "metadata": {}, "source": [ "### Plot overlap\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "2d77b2b6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RF loopback latency: 14 clk cycles\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rf_out_in_latency = delay_list[np.argmax(overlap_list)]\n", "print(f\"RF loopback latency: {rf_out_in_latency} clk cycles\")\n", "plt.plot(delay_list, overlap_list)\n", "plt.xlabel(\"Acquisition delay (clk cycles)\")\n", "plt.ylabel(\"Overlap\")\n", "plt.axvline(rf_out_in_latency, color='r', linestyle='--')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10.15" } }, "nbformat": 4, "nbformat_minor": 5 }