From 4ee3a08ce8f103701374bcf3a99bc817e12ffc88 Mon Sep 17 00:00:00 2001 From: BrokenVoodooDoll Date: Fri, 10 Mar 2023 20:25:14 +0400 Subject: [PATCH] Draft --- README.md | 11 ++- assignment.ipynb | 220 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 assignment.ipynb diff --git a/README.md b/README.md index 1f6ecc2..fd294d6 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# optoelectronic-systems-theory-assignment \ No newline at end of file +# Optoelectronic Systems Theory Assignment + +1. For a cylindrical diffraction-limited optical system (Fig. 1), on which a plane monochromatic wave with length $\lambda$ and amplitude $A=1$ falls, find: + + 1. A coherent transfer function $\tilde{h}(\nu_x)$ and plot its graph + 2. An optical transfer function $\tilde{H}_N^{OS}(\nu_x)$ and plot its graph + +2. Find a polychromatic transfer function $\tilde{H}^{PC}(\nu_x)$ for the radiation of a corresponding blackbody with temperature $T$, if the image is formed in the rear focal plane, and the spectral sensitivity of the radiation receiver is approximated by a Gaussian distribution with a mathematical expectation of 600 nm and a standard deviation of 100 nm. The pupil function $P(\xi)$ is shown in Figure 2. + +3. Find the time-frequency spectrum of the radiation flux $\tilde{\Phi}_t(\nu_t)$ and the magnitude of the radiation flux $\Phi_t(t)$ in the image analysis plane of the optical system at the output of the modulator of the image analyzer during its linear scanning (Fig. 3) and plot their graphs. The optical system is a lens with a normalized scattering function $H_N^{OS}(x', y')=\delta(x', y')$, the source of radiation is an object in the form of a rectangle with a constant energy brightness $L_0$, the study of which obeys Lambert's law. The modulator of the image analyzer is a lattice with a cosine distribution of the transmission coefficient along the x axis. \ No newline at end of file diff --git a/assignment.ipynb b/assignment.ipynb new file mode 100644 index 0000000..efe521b --- /dev/null +++ b/assignment.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Optoelectronic Systems Theory Assignment\n", + "\n", + "1. For a cylindrical diffraction-limited optical system (Fig. 1), on which a plane monochromatic wave with length $\\lambda$ and amplitude $A=1$ falls, find:\n", + "\n", + " 1. A coherent transfer function $\\tilde{h}(\\nu_x)$ and plot its graph\n", + " 2. An optical transfer function $\\tilde{H}_N^{OS}(\\nu_x)$ and plot its graph\n", + "\n", + "2. Find a polychromatic transfer function $\\tilde{H}^{PC}(\\nu_x)$ for the radiation of a corresponding blackbody with temperature $T$, if the image is formed in the rear focal plane, and the spectral sensitivity of the radiation receiver is approximated by a Gaussian distribution with a mathematical expectation of 600 nm and a standard deviation of 100 nm. The pupil function $P(\\xi)$ is shown in Figure 2.\n", + "\n", + "3. Find the time-frequency spectrum of the radiation flux $\\tilde{\\Phi}_t(\\nu_t)$ and the magnitude of the radiation flux $\\Phi_t(t)$ in the image analysis plane of the optical system at the output of the modulator of the image analyzer during its linear scanning (Fig. 3) and plot their graphs. The optical system is a lens with a normalized scattering function $H_N^{OS}(x', y')=\\delta(x', y')$, the source of radiation is an object in the form of a rectangle with a constant energy brightness $L_0$, the study of which obeys Lambert's law. The modulator of the image analyzer is a lattice with a cosine distribution of the transmission coefficient along the x axis." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scipy.signal\n", + "import matplotlib.pyplot as plt\n", + "import sympy as sp" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial data" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [], + "source": [ + "wavelength = 0.7e-3 # mm\n", + "focus = 110 # mm\n", + "\n", + "x = sp.symbols('x')\n", + "triangle = sp.Piecewise((1 - sp.Abs(x), sp.Abs(x) <= 1), (0, True))\n", + "rect = sp.Piecewise((1, sp.Abs(x) <= 0.5), (0, True))\n", + "\n", + "pupil = triangle.subs(x, (x - 3) / 3) * rect.subs(x, (x - 1.5) / 3)\n", + "pupil_fun = sp.lambdify(x, pupil, 'numpy')\n", + "\n", + "def autoconvolve(f, t, lower=-sp.oo, upper=sp.oo):\n", + " tau = sp.Symbol('tau', real=True)\n", + " return sp.integrate(f.subs(t, tau) * f.subs(t, t - tau), (tau, lower, upper))" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[174], line 3\u001b[0m\n\u001b[0;32m 1\u001b[0m conv \u001b[39m=\u001b[39m autoconvolve(pupil, x, \u001b[39m-\u001b[39m\u001b[39m300\u001b[39m, \u001b[39m300\u001b[39m)\n\u001b[0;32m 2\u001b[0m xx \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mlinspace(\u001b[39m-\u001b[39m\u001b[39m300\u001b[39m, \u001b[39m300\u001b[39m, \u001b[39m1000\u001b[39m)\n\u001b[1;32m----> 3\u001b[0m h \u001b[39m=\u001b[39m [conv\u001b[39m.\u001b[39msubs(x, t)\u001b[39m.\u001b[39mdoit() \u001b[39mfor\u001b[39;00m t \u001b[39min\u001b[39;00m xx]\n", + "Cell \u001b[1;32mIn[174], line 3\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1\u001b[0m conv \u001b[39m=\u001b[39m autoconvolve(pupil, x, \u001b[39m-\u001b[39m\u001b[39m300\u001b[39m, \u001b[39m300\u001b[39m)\n\u001b[0;32m 2\u001b[0m xx \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mlinspace(\u001b[39m-\u001b[39m\u001b[39m300\u001b[39m, \u001b[39m300\u001b[39m, \u001b[39m1000\u001b[39m)\n\u001b[1;32m----> 3\u001b[0m h \u001b[39m=\u001b[39m [conv\u001b[39m.\u001b[39;49msubs(x, t)\u001b[39m.\u001b[39;49mdoit() \u001b[39mfor\u001b[39;00m t \u001b[39min\u001b[39;00m xx]\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\integrals\\integrals.py:711\u001b[0m, in \u001b[0;36mIntegral.doit\u001b[1;34m(self, **hints)\u001b[0m\n\u001b[0;32m 709\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m 710\u001b[0m evalued \u001b[39m=\u001b[39m Add(\u001b[39m*\u001b[39mothers)\u001b[39m.\u001b[39m_eval_interval(x, a, b)\n\u001b[1;32m--> 711\u001b[0m evalued_pw \u001b[39m=\u001b[39m piecewise_fold(Add(\u001b[39m*\u001b[39;49mpiecewises))\u001b[39m.\u001b[39;49m_eval_interval(x, a, b)\n\u001b[0;32m 712\u001b[0m function \u001b[39m=\u001b[39m uneval \u001b[39m+\u001b[39m evalued \u001b[39m+\u001b[39m evalued_pw\n\u001b[0;32m 713\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mNotImplementedError\u001b[39;00m:\n\u001b[0;32m 714\u001b[0m \u001b[39m# This can happen if _eval_interval depends in a\u001b[39;00m\n\u001b[0;32m 715\u001b[0m \u001b[39m# complicated way on limits that cannot be computed\u001b[39;00m\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\functions\\elementary\\piecewise.py:616\u001b[0m, in \u001b[0;36mPiecewise._eval_interval\u001b[1;34m(self, sym, a, b, _first)\u001b[0m\n\u001b[0;32m 612\u001b[0m \u001b[39mreturn\u001b[39;00m rv\n\u001b[0;32m 614\u001b[0m \u001b[39m# handle a Piecewise with lo <= hi and no x-independent relationals\u001b[39;00m\n\u001b[0;32m 615\u001b[0m \u001b[39m# -----------------------------------------------------------------\u001b[39;00m\n\u001b[1;32m--> 616\u001b[0m ok, abei \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_intervals(x)\n\u001b[0;32m 617\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m ok:\n\u001b[0;32m 618\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mintegrals\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mintegrals\u001b[39;00m \u001b[39mimport\u001b[39;00m Integral\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\functions\\elementary\\piecewise.py:741\u001b[0m, in \u001b[0;36mPiecewise._intervals\u001b[1;34m(self, sym, err_on_Eq)\u001b[0m\n\u001b[0;32m 739\u001b[0m cond \u001b[39m=\u001b[39m to_cnf(cond)\n\u001b[0;32m 740\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(cond, And):\n\u001b[1;32m--> 741\u001b[0m cond \u001b[39m=\u001b[39m distribute_or_over_and(cond)\n\u001b[0;32m 743\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(cond, Or):\n\u001b[0;32m 744\u001b[0m expr_cond\u001b[39m.\u001b[39mextend(\n\u001b[0;32m 745\u001b[0m [(i, expr, o) \u001b[39mfor\u001b[39;00m o \u001b[39min\u001b[39;00m cond\u001b[39m.\u001b[39margs\n\u001b[0;32m 746\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(o, Eq)])\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1563\u001b[0m, in \u001b[0;36mdistribute_or_over_and\u001b[1;34m(expr)\u001b[0m\n\u001b[0;32m 1547\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mdistribute_or_over_and\u001b[39m(expr):\n\u001b[0;32m 1548\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m 1549\u001b[0m \u001b[39m Given a sentence ``expr`` consisting of conjunctions and disjunctions\u001b[39;00m\n\u001b[0;32m 1550\u001b[0m \u001b[39m of literals, return an equivalent sentence in DNF.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \n\u001b[0;32m 1562\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[1;32m-> 1563\u001b[0m \u001b[39mreturn\u001b[39;00m _distribute((expr, Or, And))\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1597\u001b[0m, in \u001b[0;36m_distribute\u001b[1;34m(info)\u001b[0m\n\u001b[0;32m 1595\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m0\u001b[39m]\n\u001b[0;32m 1596\u001b[0m rest \u001b[39m=\u001b[39m info[\u001b[39m2\u001b[39m](\u001b[39m*\u001b[39m[a \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs \u001b[39mif\u001b[39;00m a \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m conj])\n\u001b[1;32m-> 1597\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39;49m(\u001b[39mmap\u001b[39;49m(_distribute,\n\u001b[0;32m 1598\u001b[0m [(info[\u001b[39m2\u001b[39;49m](c, rest), info[\u001b[39m1\u001b[39;49m], info[\u001b[39m2\u001b[39;49m])\n\u001b[0;32m 1599\u001b[0m \u001b[39mfor\u001b[39;49;00m c \u001b[39min\u001b[39;49;00m conj\u001b[39m.\u001b[39;49margs])), remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 1600\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(info[\u001b[39m0\u001b[39m], info[\u001b[39m1\u001b[39m]):\n\u001b[0;32m 1601\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[0;32m 1602\u001b[0m [(x, info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1603\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs])),\n\u001b[0;32m 1604\u001b[0m remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1597\u001b[0m, in \u001b[0;36m_distribute\u001b[1;34m(info)\u001b[0m\n\u001b[0;32m 1595\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m0\u001b[39m]\n\u001b[0;32m 1596\u001b[0m rest \u001b[39m=\u001b[39m info[\u001b[39m2\u001b[39m](\u001b[39m*\u001b[39m[a \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs \u001b[39mif\u001b[39;00m a \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m conj])\n\u001b[1;32m-> 1597\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39;49m(\u001b[39mmap\u001b[39;49m(_distribute,\n\u001b[0;32m 1598\u001b[0m [(info[\u001b[39m2\u001b[39;49m](c, rest), info[\u001b[39m1\u001b[39;49m], info[\u001b[39m2\u001b[39;49m])\n\u001b[0;32m 1599\u001b[0m \u001b[39mfor\u001b[39;49;00m c \u001b[39min\u001b[39;49;00m conj\u001b[39m.\u001b[39;49margs])), remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 1600\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(info[\u001b[39m0\u001b[39m], info[\u001b[39m1\u001b[39m]):\n\u001b[0;32m 1601\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[0;32m 1602\u001b[0m [(x, info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1603\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs])),\n\u001b[0;32m 1604\u001b[0m remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n", + " \u001b[1;31m[... skipping similar frames: _distribute at line 1597 (23 times)]\u001b[0m\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1597\u001b[0m, in \u001b[0;36m_distribute\u001b[1;34m(info)\u001b[0m\n\u001b[0;32m 1595\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m0\u001b[39m]\n\u001b[0;32m 1596\u001b[0m rest \u001b[39m=\u001b[39m info[\u001b[39m2\u001b[39m](\u001b[39m*\u001b[39m[a \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs \u001b[39mif\u001b[39;00m a \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m conj])\n\u001b[1;32m-> 1597\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39;49m(\u001b[39mmap\u001b[39;49m(_distribute,\n\u001b[0;32m 1598\u001b[0m [(info[\u001b[39m2\u001b[39;49m](c, rest), info[\u001b[39m1\u001b[39;49m], info[\u001b[39m2\u001b[39;49m])\n\u001b[0;32m 1599\u001b[0m \u001b[39mfor\u001b[39;49;00m c \u001b[39min\u001b[39;49;00m conj\u001b[39m.\u001b[39;49margs])), remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 1600\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(info[\u001b[39m0\u001b[39m], info[\u001b[39m1\u001b[39m]):\n\u001b[0;32m 1601\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[0;32m 1602\u001b[0m [(x, info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1603\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs])),\n\u001b[0;32m 1604\u001b[0m remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1598\u001b[0m, in \u001b[0;36m_distribute\u001b[1;34m(info)\u001b[0m\n\u001b[0;32m 1595\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m0\u001b[39m]\n\u001b[0;32m 1596\u001b[0m rest \u001b[39m=\u001b[39m info[\u001b[39m2\u001b[39m](\u001b[39m*\u001b[39m[a \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs \u001b[39mif\u001b[39;00m a \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m conj])\n\u001b[0;32m 1597\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[1;32m-> 1598\u001b[0m [(info[\u001b[39m2\u001b[39m](c, rest), info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1599\u001b[0m \u001b[39mfor\u001b[39;00m c \u001b[39min\u001b[39;00m conj\u001b[39m.\u001b[39margs])), remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 1600\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(info[\u001b[39m0\u001b[39m], info[\u001b[39m1\u001b[39m]):\n\u001b[0;32m 1601\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[0;32m 1602\u001b[0m [(x, info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1603\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs])),\n\u001b[0;32m 1604\u001b[0m remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:1598\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1595\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m0\u001b[39m]\n\u001b[0;32m 1596\u001b[0m rest \u001b[39m=\u001b[39m info[\u001b[39m2\u001b[39m](\u001b[39m*\u001b[39m[a \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs \u001b[39mif\u001b[39;00m a \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m conj])\n\u001b[0;32m 1597\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[1;32m-> 1598\u001b[0m [(info[\u001b[39m2\u001b[39;49m](c, rest), info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1599\u001b[0m \u001b[39mfor\u001b[39;00m c \u001b[39min\u001b[39;00m conj\u001b[39m.\u001b[39margs])), remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 1600\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(info[\u001b[39m0\u001b[39m], info[\u001b[39m1\u001b[39m]):\n\u001b[0;32m 1601\u001b[0m \u001b[39mreturn\u001b[39;00m info[\u001b[39m1\u001b[39m](\u001b[39m*\u001b[39m\u001b[39mlist\u001b[39m(\u001b[39mmap\u001b[39m(_distribute,\n\u001b[0;32m 1602\u001b[0m [(x, info[\u001b[39m1\u001b[39m], info[\u001b[39m2\u001b[39m])\n\u001b[0;32m 1603\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m info[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39margs])),\n\u001b[0;32m 1604\u001b[0m remove_true\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\core\\operations.py:512\u001b[0m, in \u001b[0;36mLatticeOp.__new__\u001b[1;34m(cls, *args, **options)\u001b[0m\n\u001b[0;32m 505\u001b[0m args \u001b[39m=\u001b[39m (_sympify_(arg) \u001b[39mfor\u001b[39;00m arg \u001b[39min\u001b[39;00m args)\n\u001b[0;32m 507\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m 508\u001b[0m \u001b[39m# /!\\ args is a generator and _new_args_filter\u001b[39;00m\n\u001b[0;32m 509\u001b[0m \u001b[39m# must be careful to handle as such; this\u001b[39;00m\n\u001b[0;32m 510\u001b[0m \u001b[39m# is done so short-circuiting can be done\u001b[39;00m\n\u001b[0;32m 511\u001b[0m \u001b[39m# without having to sympify all values\u001b[39;00m\n\u001b[1;32m--> 512\u001b[0m _args \u001b[39m=\u001b[39m \u001b[39mfrozenset\u001b[39m(\u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49m_new_args_filter(args))\n\u001b[0;32m 513\u001b[0m \u001b[39mexcept\u001b[39;00m ShortCircuit:\n\u001b[0;32m 514\u001b[0m \u001b[39mreturn\u001b[39;00m sympify(\u001b[39mcls\u001b[39m\u001b[39m.\u001b[39mzero)\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:606\u001b[0m, in \u001b[0;36mAnd._new_args_filter\u001b[1;34m(cls, args)\u001b[0m\n\u001b[0;32m 604\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[0;32m 605\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_new_args_filter\u001b[39m(\u001b[39mcls\u001b[39m, args):\n\u001b[1;32m--> 606\u001b[0m args \u001b[39m=\u001b[39m BooleanFunction\u001b[39m.\u001b[39;49mbinary_check_and_simplify(\u001b[39m*\u001b[39;49margs)\n\u001b[0;32m 607\u001b[0m args \u001b[39m=\u001b[39m LatticeOp\u001b[39m.\u001b[39m_new_args_filter(args, And)\n\u001b[0;32m 608\u001b[0m newargs \u001b[39m=\u001b[39m []\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:494\u001b[0m, in \u001b[0;36mBooleanFunction.binary_check_and_simplify\u001b[1;34m(self, *args)\u001b[0m\n\u001b[0;32m 491\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[0;32m 492\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mbinary_check_and_simplify\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39m*\u001b[39margs):\n\u001b[0;32m 493\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mcore\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mrelational\u001b[39;00m \u001b[39mimport\u001b[39;00m Relational, Eq, Ne\n\u001b[1;32m--> 494\u001b[0m args \u001b[39m=\u001b[39m [as_Boolean(i) \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args]\n\u001b[0;32m 495\u001b[0m bin_syms \u001b[39m=\u001b[39m \u001b[39mset\u001b[39m()\u001b[39m.\u001b[39munion(\u001b[39m*\u001b[39m[i\u001b[39m.\u001b[39mbinary_symbols \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args])\n\u001b[0;32m 496\u001b[0m rel \u001b[39m=\u001b[39m \u001b[39mset\u001b[39m()\u001b[39m.\u001b[39munion(\u001b[39m*\u001b[39m[i\u001b[39m.\u001b[39matoms(Relational) \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args])\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:494\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 491\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[0;32m 492\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mbinary_check_and_simplify\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39m*\u001b[39margs):\n\u001b[0;32m 493\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mcore\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mrelational\u001b[39;00m \u001b[39mimport\u001b[39;00m Relational, Eq, Ne\n\u001b[1;32m--> 494\u001b[0m args \u001b[39m=\u001b[39m [as_Boolean(i) \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args]\n\u001b[0;32m 495\u001b[0m bin_syms \u001b[39m=\u001b[39m \u001b[39mset\u001b[39m()\u001b[39m.\u001b[39munion(\u001b[39m*\u001b[39m[i\u001b[39m.\u001b[39mbinary_symbols \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args])\n\u001b[0;32m 496\u001b[0m rel \u001b[39m=\u001b[39m \u001b[39mset\u001b[39m()\u001b[39m.\u001b[39munion(\u001b[39m*\u001b[39m[i\u001b[39m.\u001b[39matoms(Relational) \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m args])\n", + "File \u001b[1;32mc:\\Python310\\lib\\site-packages\\sympy\\logic\\boolalg.py:23\u001b[0m, in \u001b[0;36mas_Boolean\u001b[1;34m(e)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutilities\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39miterables\u001b[39;00m \u001b[39mimport\u001b[39;00m sift, ibin\n\u001b[0;32m 20\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutilities\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mmisc\u001b[39;00m \u001b[39mimport\u001b[39;00m filldedent\n\u001b[1;32m---> 23\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mas_Boolean\u001b[39m(e):\n\u001b[0;32m 24\u001b[0m \u001b[39m\"\"\"Like ``bool``, return the Boolean value of an expression, e,\u001b[39;00m\n\u001b[0;32m 25\u001b[0m \u001b[39m which can be any instance of :py:class:`~.Boolean` or ``bool``.\u001b[39;00m\n\u001b[0;32m 26\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 47\u001b[0m \n\u001b[0;32m 48\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m 49\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39msympy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mcore\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39msymbol\u001b[39;00m \u001b[39mimport\u001b[39;00m Symbol\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "conv = autoconvolve(pupil, x, -300, 300)\n", + "xx = np.linspace(-300, 300, 1000)\n", + "h = [conv.subs(x, t).doit() for t in xx]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Xr3Ms88+a9577z0zb968uLt19sCBA2bYsGFm0qRJ5sCBA+azzz4L/+lErb7yySefmJ07d5r58+ebvn37mp07d5qdO3eao0ePGmO+ulWvoKDA7Nq1y6xfv95ceeWVZ7zNeNasWea9994zlZWVrrrN2Ov1mhUrVpj6+nrz0EMPmfT09Ig7B9zg6NGj4XNHklm0aJHZuXOn+eSTT4wxX95mnJ6ebtasWWPeffddc+edd57xNuOxY8earVu3mt/+9rfm2muvjbvbjEtLS01aWpp56623Iv5uOnHiRLjNww8/bHJycswbb7xhduzY0eWREk5+J+PBk08+aTZt2mT2799v3n33XfPkk0+ahIQEU1VVZYyxs06uDCjvvvuuufXWW01GRobxer3mqquuMg8//LA5cOBARLvf/e535pZbbjFer9d87WtfM88880yXvn7961+b6667ziQnJ5sbbrjBvPrqq5fqMC6J5cuXG0ln/HMqavWlkpKSM9aqc2bOGGM+/vhjM2XKFNO7d28zYMAA8/jjj5tQKBTRz5tvvmnGjBljkpOTzdVXX22WL19+aQ8khhYvXmxycnJMcnKyufnmm01tbW2sh3TJvfnmm2c8j0pKSowxX84c/PCHPzR+v994vV4zadIks2/fvog+Pv/8czN16lTTt29f4/P5zAMPPBAOyvHibH83nfr78sUXX5i/+7u/M1dccYVJTU013/ve9yL+A8sYZ7+Tl7u//du/NUOGDDHJycnmyiuvNJMmTQqHE2PsrFOCMS5ZFQoAAC4bcXUXDwAAiA8EFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABY5/8Dxowb4MYAK/oAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure()\n", + "plt.plot(xx, h)\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pupil function" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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/QXq8cvJyTGaNm1qJCcnG/fee68xduzY665rxjG07MhIQUGB0tLS1L179+JlQUFB6t69u9avX1/iNuvXr79qfUnq1avXddc3W1l6lKQLFy6oUaNGio6Ovun/AQSaQDuGZdWhQwfVq1dPPXr00FdffWV2OaV2/vx5SVLNmjWvu04gH8PS9CcF7mfQ4XBo6dKlys3NVXx8fInrBPLxK01/UmAev9GjR+vhhx++5tiUxIxjaNkwcurUKTkcDkVFRV21PCoq6rrz65mZmW6tb7ay9Ni8eXPNnTtXH330kRYuXCin06k777xTR44cKY+Sfe56xzA7O1sXL140qSrvqVevnmbMmKH3339f77//vqKjo3XfffcpPT3d7NJuyul0aty4cbrrrrvUpk2b664XaJ/DIqXtLxA/g1u3blWVKlUUFhamJ554Qh988IFatWpV4rqBePzc6S8Qj9/SpUuVnp6uKVOmlGp9M45hQDy1F94THx9/VeK/88471bJlS7355pt6+eWXTawMpdG8eXM1b968+PWdd96pvXv36rXXXtOCBQtMrOzmRo8erW3btunLL780uxSfKG1/gfgZbN68uTIyMnT+/Hm99957Gjp0qNauXXvdP9iBxp3+Au34HT58WGPHjlVycrJfn2hr2TBSq1YtBQcHKysr66rlWVlZqlu3bonb1K1b1631zVaWHn8oJCREHTt21J49e3xRYrm73jGMjIxU5cqVTarKt2JjY/3+D/yYMWP08ccf64svvlDDhg1vuG6gfQ4l9/r7oUD4DIaGhqpJkyaSpM6dO2vTpk36+9//rjfffPOadQPx+LnT3w/5+/FLS0vTiRMn1KlTp+JlDodDX3zxhV5//XXl5+crODj4qm3MOIaWnaYJDQ1V586dlZKSUrzM6XQqJSXlunOB8fHxV60vScnJyTecOzRTWXr8IYfDoa1bt6pevXq+KrNcBdox9IaMjAy/PX6GYWjMmDH64IMP9Nlnn6lx48Y33SaQjmFZ+vuhQPwMOp1O5efnl/i1QDp+13Oj/n7I34/fAw88oK1btyojI6P4X5cuXTRo0CBlZGRcE0Qkk46hz06N9QNLly41wsLCjPnz5xvffvutMWrUKKN69epGZmamYRiGMXjwYGP8+PHF63/11VdGpUqVjL/97W/Gjh07jEmTJhkhISHG1q1bzWrhptztcfLkycaqVauMvXv3GmlpaUb//v2N8PBwY/v27Wa1cEM5OTnGli1bjC1bthiSjKlTpxpbtmwxDh48aBiGYYwfP94YPHhw8fr79u0zIiIijGeeecbYsWOHMX36dCM4ONhYuXKlWS3ckLv9vfbaa8aHH35ofPfdd8bWrVuNsWPHGkFBQcann35qVgs39OSTTxrVqlUz1qxZYxw/frz4X15eXvE6gfw5LEt/gfYZHD9+vLF27Vpj//79xjfffGOMHz/esNlsxurVqw3DCOzjZxju9xdox68kP7yaxh+OoaXDiGEYxj//+U/jtttuM0JDQ43Y2FgjNTW1+Gv33nuvMXTo0KvWf+edd4xmzZoZoaGhRuvWrY3ly5eXc8Xuc6fHcePGFa8bFRVl9O7d20hPTzeh6tIpupT1h/+Keho6dKhx7733XrNNhw4djNDQUOP222835s2bV+51l5a7/f35z3827rjjDiM8PNyoWbOmcd999xmfffaZOcWXQkm9SbrqmATy57As/QXaZ3D48OFGo0aNjNDQUKN27drGAw88UPyH2jAC+/gZhvv9BdrxK8kPw4g/HEObYRiG78ZdAAAAbsyy54wAAIDAQBgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKn+H3Ewc06JY7P5AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t = np.linspace(0, 4, 1000)\n", + "\n", + "plt.figure()\n", + "plt.plot(t, pupil_fun(t))\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p = pupil(x)\n", + "\n", + "h = scipy.signal.convolve(pupil(-x), pupil(x))\n", + "\n", + "plt.figure()\n", + "plt.plot(h)\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}