fdtdx.compute_impedance_corrected_temporal_profile

fdtdx.compute_impedance_corrected_temporal_profile#

fdtdx.compute_impedance_corrected_temporal_profile(raw_samples, dt, eps_spectrum, eps_center)[source]#

FIR-filter a raw source temporal profile for broadband impedance matching.

Given the unfiltered E-side temporal profile s(n·dt) and the complex permittivity spectrum eps_spectrum = ε(ω_k) at the rFFT frequencies of a zero-padded version of s, returns the H-side temporal profile s_H(n·dt) whose spectrum satisfies \(\tilde{s}_H(\omega) = \tilde{s}(\omega) \cdot G(\omega)\) with

\[G(\omega) = \frac{\eta(\omega_c)}{\eta(\omega)} = \sqrt{\frac{\varepsilon(\omega)}{\varepsilon(\omega_c)}}\]

(assuming a non-dispersive permeability). Injecting the prescribed E and H fields as E(x,t) = E_spatial(x)·s(t) and H(x,t) = (H_spatial(x)/η(ω_c))·s_H(t) then reproduces a physical plane wave at every frequency in the pulse bandwidth, not just at ω_c. In the non-dispersive limit ε(ω) ε_c and G is the identity so s_H == s.

Implementation: zero-pads to M = 2·(len(eps_spectrum) - 1) for linear convolution, takes a real FFT, multiplies by G, and transforms back with numpy.fft.irfft() (which enforces a real output via Hermitian symmetry of the positive-frequency spectrum).

Parameters:
  • raw_samples (ndarray) – Real 1-D array of the unfiltered temporal profile sampled at integer time steps, s[n] = s(n·dt).

  • dt (float) – Simulation time step (seconds). Present for API symmetry; the actual time step is encoded in eps_spectrum.

  • eps_spectrum (ndarray) – Complex 1-D array of length M/2 + 1 giving \(\varepsilon(\omega)\) at \(\omega_k = 2\pi \cdot k / (M \cdot \Delta t)\) for k = 0, ..., M/2.

  • eps_center (complex) – Scalar complex \(\varepsilon(\omega_c)\) at the source carrier frequency.

Return type:

ndarray

Returns:

Real 1-D array of length len(raw_samples) containing s_H[n].