Simulación FDTD de Antenas
Este post abre la caja negra del simulador de antenas del playground: qué cálculo corre por debajo y qué física enseña cada antena. El método es FDTD (diferencias finitas en el dominio del tiempo): se resuelven las ecuaciones de Maxwell tal cual, paso a paso en el tiempo, sobre una malla, en la GPU mediante WebGPU. Nada de fórmulas cerradas — la onda simplemente evoluciona.
El punto de partida: Maxwell en forma de rotacional
FDTD discretiza las dos ecuaciones de Maxwell con derivada temporal — la ley de Faraday y la ley de Ampère-Maxwell— en su forma diferencial. En unidades normalizadas (, , ) quedan:
Cada ecuación vectorial son tres escalares. Por ejemplo, la componente del campo eléctrico depende solo de cómo varían y en el espacio:
La clave conceptual: un campo cambia en el tiempo porque el otro varía en el espacio. Un que se curva alimenta a , y viceversa. Esa realimentación cruzada es la onda electromagnética propagándose.
La malla de Yee: dónde vive cada campo
El truco que hace estable y preciso a FDTD (Kane Yee, 1966) es no guardar todos los campos en el mismo punto. Cada componente se almacena desfasada media celda de modo que cada derivada espacial caiga, de forma natural, justo en el punto donde se necesita. Las componentes de viven en las aristas del cubo:
y las de en los centros de las caras:
Además del desfase espacial, hay un desfase temporal: se evalúa en pasos enteros y en pasos medios . Es el esquema leapfrog (rana saltarina): E y H se van pisando el turno indefinidamente.
El grueso del cálculo: la actualización leapfrog
Toda la simulación es repetir dos kernels que reemplazan las derivadas continuas por diferencias entre celdas vecinas ( denota esa diferencia discreta). Definiendo el número de Courant , el paso de actualización de es:
y el de , medio paso después:
Escrito con índices explícitos, el update de sobre su arista es literalmente lo que corre la GPU por celda:
El factor es cómo entran los dieléctricos: dentro de un material con el campo crece más lento, y la onda viaja más despacio → refracción y reflexión parcial emergen solas. Sin material, y el término desaparece.
No hay matriz que invertir ni sistema que resolver: cada celda se actualiza leyendo solo a sus vecinas inmediatas. Por eso FDTD es masivamente paralelo y encaja perfecto en un compute shader — millones de celdas, una invocación por celda, dos despachos por paso de tiempo.
Estabilidad: la condición CFL
El esquema explícito solo es estable si la información no avanza más de una celda por paso. En 3D la condición de Courant–Friedrichs–Lewy es:
Si supera la simulación explota (los campos divergen a infinito en pocos pasos). El simulador usa , cómodamente por debajo del límite. Una consecuencia útil: la longitud de onda medida en celdas es
Esta misma relación es la que fija el largo del cable de la fuente que dibuja el simulador: lo pinta de , la referencia de un elemento resonante de media onda. Sube la frecuencia y el cable se acorta solo — antena más pequeña.
Fuentes: cómo se inyecta la energía
La antena se excita en una brecha de alimentación (delta-gap): una sola arista de la malla a la que cada paso se le suma una forma de onda. Hay tres:
Senoidal
Onda continua a una frecuencia fija. Para ver el régimen permanente y patrones a una .
Pulso gaussiano
Banda ancha en un disparo: excita todas las frecuencias a la vez (barridos de impedancia / S₁₁).
Gaussiana modulada
Pulso centrado en : banda ancha pero acotada alrededor de la resonancia.
Y dos maneras de aplicarla — la fuente blanda suma (deja pasar la onda reflejada), la dura fija el valor (la refleja como un conductor):
El vector de corriente cian del simulador es justamente dibujado en vivo sobre el eje del cable: late y cambia de signo al ritmo de la fuente, en sincronía con los frentes de onda que salen.
Fronteras absorbentes (CPML)
La malla es finita pero el espacio libre no. Sin tratamiento, la onda rebota en las paredes y contamina todo. La solución es una CPML (Convolutional Perfectly Matched Layer): una capa de unas 12 celdas en cada cara donde se añade una conductividad artificial graduada que absorbe la onda sin reflejarla, fingiendo un espacio infinito. Se implementa con campos auxiliares que siguen una recursión; fuera de la capa los coeficientes son neutros y el kernel colapsa al Yee clásico, así que el mismo shader sirve con y sin frontera.
De campo cercano a patrón de radiación (NFFT)
El simulador resuelve el campo cerca de la antena, pero el patrón de radiación vive en el infinito. El puente es la transformada near-to-far: por el principio de equivalencia, los campos sobre una caja cerrada de Huygens que rodea la antena se reemplazan por corrientes equivalentes
Se acumula su transformada (una DFT a la frecuencia de la fuente, integrada sobre las seis caras) en los potenciales de radiación
y se proyectan a las componentes esféricas del campo lejano, con la impedancia del vacío:
De ahí salen el diagrama polar, la directividad, la relación frente-espalda y el ancho de haz que muestra el panel de diagnósticos — el globo de radiación sobre la simulación es exactamente .
Las antenas: un mecanismo físico por cada una
La progresión de presets no es aleatoria: cada antena introduce una razón distinta por la que un patrón deja de ser omnidireccional. Esa es la columna vertebral pedagógica.
Dipolo de media onda
El control: un hilo de con corriente senoidal forma el patrón rosquilla clásico. Es lo que se ve cuando nada rompe la simetría.
Monopolo sobre plano de tierra
El método de imágenes: el plano PEC refleja y crea un dipolo virtual. Media rosquilla hacia arriba, cancelación abajo — contraste directo con el dipolo libre.
Yagi-Uda
Elementos parásitos. Un reflector y varios directores sin alimentar reradian con la fase justa; la interferencia entre ellos concentra el haz hacia adelante. Ganancia y F/B reales medibles.
Parche microstrip
Radiación de apertura. Las dos ranuras en los bordes del parche radian en fase → haz broadside (perpendicular a la placa). El sustrato acorta la resonancia.
Slot (principio de Babinet)
Dualidad E↔H. Una ranura en un plano es el complemento del dipolo: mismo patrón, polarización girada 90°. La dualidad de Maxwell hecha visible.
Array en fase (phased array)
Interferencia controlada. N fuentes coherentes con desfase progresivo dirigen el lóbulo sin mover nada — el haz se barre con un slider.
Vivaldi (ranura cónica)
Onda viajera. Ni resonancia ni interferencia entre fuentes: la onda viaja por una ranura que se ensancha exponencialmente y radia endfire a lo largo del camino, cada banda desde una sección distinta → comportamiento ultra banda-ancha.
Por qué WebGPU
FDTD es vergonzosamente paralelo y su cuello de botella es el ancho de banda de memoria, no la lógica. Una malla de son más de dos millones de celdas, cada una con seis campos, actualizadas decenas de veces por segundo. En la CPU sería un crawl; en la GPU vía compute shaders (WGSL) corre en tiempo real con el render volumétrico encima, en el mismo dispositivo, sin copiar datos de vuelta. La métrica canónica del panel de rendimiento — celdas/segundo— mide justo eso.





