{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simulating an Add-Drop Filter"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import photontorch as pt"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"## Simple Add Drop filter\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"## Simulation & Design Parameters"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"dt = 1e-14 #[s]\n",
"total_time = 2000*dt #[s]\n",
"time = np.arange(0, total_time, dt)\n",
"c = 299792458 #[m/s]\n",
"ring_length = 50e-6 #[m]\n",
"transmission = 0.7 #[]\n",
"wavelengths = 1e-6*np.linspace(1.50, 1.6, 1000) #[m]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"## Circuit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the [all-pass notebook](01_all_pass_filter.ipynb), we saw how to create a network by subclassing pt.Network. Although this is the preferred way of creating a network, sometimes you want to get rid of the boilerplate of creating a network. This can be done by creating the network using a context manager:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"with pt.Network() as nw:\n",
" nw.term_in = pt.Source()\n",
" nw.term_pass = nw.term_add = nw.term_drop = pt.Detector()\n",
" nw.dc1 = nw.dc2 = pt.DirectionalCoupler(1-transmission)\n",
" nw.wg1 = nw.wg2 = pt.Waveguide(0.5*ring_length, loss=0, neff=2.86)\n",
" nw.link('term_in:0', '0:dc1:2', '0:wg1:1', '1:dc2:3', '0:term_drop')\n",
" nw.link('term_pass:0', '1:dc1:3', '0:wg2:1', '0:dc2:2', '0:term_add')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Simulate Time Domain"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"