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 spectrumeps_spectrum = ε(ω_k)at the rFFT frequencies of a zero-padded version ofs, returns the H-side temporal profiles_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)andH(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ε(ω) ≡ ε_candGis the identity sos_H == s.Implementation: zero-pads to
M = 2·(len(eps_spectrum) - 1)for linear convolution, takes a real FFT, multiplies byG, and transforms back withnumpy.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 ineps_spectrum.eps_spectrum (
ndarray) – Complex 1-D array of lengthM/2 + 1giving \(\varepsilon(\omega)\) at \(\omega_k = 2\pi \cdot k / (M \cdot \Delta t)\) fork = 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)containings_H[n].