Skip to content

RF autograd for dual-band antenna design#446

Open
groberts-flex wants to merge 4 commits intodevelopfrom
groberts-flex/rf-autograd-2
Open

RF autograd for dual-band antenna design#446
groberts-flex wants to merge 4 commits intodevelopfrom
groberts-flex/rf-autograd-2

Conversation

@groberts-flex
Copy link
Copy Markdown
Contributor

@groberts-flex groberts-flex commented Feb 10, 2026

Here is the second split of the original RF autograd notebook. This one shows the multi-band design using passive radiators and fin structures on the main patch.

I'm re-running the notebook to get all the plots filled in (I'll update when that finishes up) but wanted to post for the general content (I also need to figure out how to clear those errors for the Head and Mode simulations that I'm not running). The final antenna performance looks how it did before which you can see in the final plot.

@github-actions
Copy link
Copy Markdown
Contributor

Spell Check Report

RFAutograd1RectangularPatchAntenna.ipynb:

Cell 1, Line 7: 'justify-content'
  > <div style="display: flex; gap: 10px; justify-content: center;">
Cell 16, Line 78: 'Gtheta'
  > polarization_components = ["Gtheta", "Gphi"]
Cell 16, Line 78: 'Gphi'
  > polarization_components = ["Gtheta", "Gphi"]
Cell 16, Line 202: 'Gtheta'
  > add_polar_sequence(1, "Gtheta", "Realized Gain\n(Gtheta), phi=0")
Cell 16, Line 203: 'Gphi'
  > add_polar_sequence(2, "Gphi", "Realized Gain\n(Gphi), phi=0")
Cell 26, Line 72: 'Gtheta'
  > "Gtheta": realized_gain_eval["Gtheta"]
Cell 26, Line 72: 'Gtheta'
  > "Gtheta": realized_gain_eval["Gtheta"]
Cell 26, Line 76: 'Gphi'
  > "Gphi": realized_gain_eval["Gphi"].sel(phi=0, method="nearest").squeeze().values,
Cell 26, Line 76: 'Gphi'
  > "Gphi": realized_gain_eval["Gphi"].sel(phi=0, method="nearest").squeeze().values,
Cell 31, Line 1: 'dual-band'
  > Inverse design and the adjoint method will become increasingly useful when the degrees of freedom in the optimization get larger and the target objective functions are more challenging. The goal of this notebook was to introduce the concept and show how we can use gradient-based optimization methods for RF in Tidy3D. In future notebooks, we will demonstrate how to take advantage of this process to find designs for dual-band patch antennas and other more challenging RF problems.

RFAutograd2RectangularMultiPatchAntenna.ipynb:

Cell 1, Line 1: 'Multi-Patch'
  > # Adjoint Optimization of a Multi-Patch Antenna
Cell 1, Line 7: 'high-dimensional'
  > This notebook reuses the same core simulation and objective function infrastructure from the first notebook but applies it to a much richer design space where traditional parameter sweeps would be impractical. The adjoint method makes this high-dimensional optimization tractable by efficiently computing gradients with respect to all parameters in just two simulations per iteration.
Cell 1, Line 9: 'justify-content'
  > <div style="display: flex; gap: 10px; justify-content: center;">
Cell 3, Line 3: 'dual-band', 'multi-patch'
  > We set up the parameters for the multi-patch optimization, including the dual-band target frequencies and substrate geometry. The substrate is larger than in the single patch case to accommodate the passive radiating elements on either side of the central patch. As before, we use a scaling factor to convert Tidy3D's default unit of micrometers to millimeters (mm).
Cell 4, Line 9: 'multi-patch'
  > # substrate geometric parameters - sized to support the multi-patch antenna geometry
Cell 16, Line 78: 'Gtheta'
  > polarization_components = ["Gtheta", "Gphi"]
Cell 16, Line 78: 'Gphi'
  > polarization_components = ["Gtheta", "Gphi"]
Cell 16, Line 202: 'Gtheta'
  > add_polar_sequence(1, "Gtheta", "Realized Gain\n(Gtheta), phi=0")
Cell 16, Line 203: 'Gphi'
  > add_polar_sequence(2, "Gphi", "Realized Gain\n(Gphi), phi=0")
Cell 17, Line 1: 'multi-patch'
  > We set up a function to plot the figure of merit trajectory of the optimization and compare the initial and final antenna geometries. With the multi-patch design, we will see the central patch, insets, fins, and passive radiators all change significantly during the optimization.
Cell 21, Line 1: 'Multi-Patch'
  > ## Defining the Multi-Patch Design Space
Cell 21, Line 3: 'multi-patch'
  > Now we define the parameterization for our multi-patch antenna. The design consists of a central patch with an optimizable inset at the feed connection, fin structures on the top edge, and two passive radiating structures on either side. In total, the optimizer controls 18 parameters: the width and height of the central patch and each passive radiator (6), the gap between the central patch and each passive radiator (2), the vertical offset of each passive radiator (2), the inset heights and gaps on each side of the feed (4), and the fin widths and heights on each side of the top edge (4).
Cell 21, Line 5: 'multi-patch'
  > We define bounds for each parameter to keep the geometry physically reasonable, set initial values, and create a `params_to_boxes` function that converts the flat parameter vector into the list of `Box` geometries needed by the simulation. The image below illustrates the design space of our multi-patch antenna design.
Cell 22, Line 96: 'multi-patch'
  > """
Cell 23, Line 1: 'Multi-Patch'
  > ## Running the Multi-Patch Optimization
Cell 26, Line 3: 'multi-patch'
  > # 18 parameters describing the multi-patch antenna geometry.
Cell 26, Line 72: 'Gtheta'
  > "Gtheta": realized_gain_eval["Gtheta"]
Cell 26, Line 72: 'Gtheta'
  > "Gtheta": realized_gain_eval["Gtheta"]
Cell 26, Line 76: 'Gphi'
  > "Gphi": realized_gain_eval["Gphi"].sel(phi=0, method="nearest").squeeze().values,
Cell 26, Line 76: 'Gphi'
  > "Gphi": realized_gain_eval["Gphi"].sel(phi=0, method="nearest").squeeze().values,
Cell 27, Line 1: 'dual-band'
  > After the optimization, we can plot the figure of merit and compare the optimized antenna geometry to the initial antenna geometry. We can see that the optimization made a significant amount of changes to the antenna structure to realize dual-band operation. We also plot the evolution of the `S11` parameter and realized gain throughout the optimization.
Cell 31, Line 1: '-parameter', 'dual-band', 'multi-patch'
  > By expanding from a 2-parameter single patch to an 18-parameter multi-patch design, we have demonstrated how the adjoint method scales to handle significantly more complex antenna optimization problems. The dual-band result would be difficult to achieve through manual tuning or parameter sweeps alone. This workflow can be extended further to even more complex antenna topologies and multi-objective targets.

Checked 2 notebook(s). Found spelling errors in 2 file(s).
Generated by GitHub Action run: https://github.com/flexcompute/tidy3d-notebooks/actions/runs/22161134237

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant