REMI Lab
OPEN KNOWLEDGE / TOOLS

Which cells move a patch antenna's match?

이 페이지의 내용

A 39.7 × 49.25 mm patch on 3.175 mm RT/Duroid 5880 (εr 2.2), fed by a 50 Ω probe, resonates near 2.3 GHz. We ask how |S11| at 2.356 GHz, 1 % above the return-loss minimum, changes when the permittivity of any one substrate cell changes. rfx answers for all 20,592 cells under and around the patch with one forward and one reverse pass.

20,592 design cells
2×10⁻⁵ worst reverse-mode vs finite-difference difference (float64)
24 s value and gradient on one RTX A6000 (1.4× a forward run)
The sensitivity map, |S11| with f_r and f_t marked, and the |E_z|² panel

What the map shows

The derivative is positive wherever it is significant and concentrated in two bands, under and just outside the two radiating edges; along the centre line between them it is about 450 times weaker. That is what cavity perturbation predicts for the TM010 mode: a local permittivity change shifts the resonance in proportion to the local |E_z|², and E_z of this mode peaks at the radiating edges and vanishes on the centre line. The map and |E_z(2.356 GHz)|² from the same run correlate at r = 0.948. The sign is the expected one: raising εr lowers the resonance, which moves the return-loss minimum further below 2.356 GHz and raises |S11| there.

How the gradient was checked

  • Finite differences: six blocks of cells chosen before the run (at the radiating edges, on the centre line, outside the patch). On the four large enough to judge, reverse mode and central differences agree to 2.4×10⁻⁶–1.9×10⁻⁵ relative, in float64.
  • Record length: repeating the gradient with a 1.5× longer time record changes those block sums by at most 5.4×10⁻⁴.
  • The same board’s forward model agrees with openEMS (see forward checks).

This map is for this board on a mesh of 4 cells through the substrate, whose resonance is 0.91 % below the finest mesh’s; it is not a manufacturing tolerance or a statement about other boards.

What the code looks like

def J(eps_box):
res = board.sim.forward(
design_box=corners, design_eps_override=eps_box,
design_box_holds_ports=True, n_steps=n_steps, checkpoint=False,
checkpoint_segments=checkpoint_segments,
port_s11_freqs=freqs, skip_preflight=True)
s = res.s_params
s = s if s.ndim == 1 else s[0]
return jnp.real(s[0]) ** 2 + jnp.imag(s[0]) ** 2
v, g = jax.jit(jax.value_and_grad(J))(eps_bg)

Full script →

Downloads

Evidence
  • rfx commit 655b1fc6 (checks) and b46a8220 (board builder)
  • the pre-declaration note docs/design_notes/20260927_showcase_predeclaration.md
  • f_t = 1.01 × the |S11| minimum (2.333099 GHz → 2.356430 GHz, |S11(f_t)| = −12.57 dB on the rising flank)
  • FD step Δεr = 0.1 on blocks of 3 × 3 cells through the 4-cell substrate (36 cells, 2.4 × 2.4 mm); judged blocks are those with |FD| ≥ 10 % of the largest
  • 418 of 20,592 cells have a negative derivative, the largest 0.30 % of the maximum
  • issue #1332, PR #1337
Back to top ↑