21  Vom Strom zur Welle

Die Kette aus Kapitel 19 endete an einer Programmzeile. Steckdose, Netzteil, Oszillator, Verstärker — und dann stand da: „Die Meep-Source ist die Abstraktion genau dieser Kette.” Eine Programmzeile sagt „hier sitzt ein Sender”, und die Welle läuft. Aber wie? Zwischen dem Wechselstrom, der in einem Stück Draht hin- und herschwappt, und der Funkwelle, die hundert Meter weiter ein Radio erreicht, liegt der eigentliche Zaubertrick der ganzen Funktechnik: Das Feld muss sich vom Draht lösen. Heinrich Hertz hat diesen Trick 1886 in einem Hörsaal in Karlsruhe zum ersten Mal vorgeführt — mit einer Funkenstrecke als Sender und einem Drahtring als Empfänger, ein paar Meter weiter. Auf die Frage nach dem Nutzen soll er geantwortet haben, das Ganze habe vermutlich keinen. Dein Telefon führt das Gegenargument gerade in der Hosentasche.

In diesem Kapitel eröffnen wir Teil VI und bauen die Brücke in drei Bögen: Warum strahlt eine beschleunigte Ladung überhaupt (ein Geometrie-Argument, das ohne eine einzige neue Formel das \(1/r\)-Gesetz liefert)? Wie macht eine Antenne daraus eine Maschine (der Strom im Draht ist eine alte Bekannte: eine stehende Welle)? Und was kommt draußen an — wie teilt sich die Welt um die Antenne in ein gebundenes Nahfeld und ein frei laufendes Fernfeld, und in welche Richtungen geht die Leistung? Dafür verlassen wir zum ersten Mal im Buch die Fläche: Die Potenzgesetze der Abstrahlung sind 3D-Physik, und wir rechnen sie in 3D nach.

Lernziele

Nach diesem Kapitel kannst du …

  1. … mit dem Knick-Argument erklären, warum genau beschleunigte Ladungen strahlen — und aus der Knick-Geometrie herleiten, dass das Strahlungsfeld wie \(1/r\) abfällt und wie \(\sin\theta\) von der Richtung abhängt,
  2. … die Stromverteilung auf einem Halbwellendipol als stehende Welle erklären (Bauch am Speisepunkt, Knoten an den offenen Enden) und im Feldbild die Hertz’sche Ablösung der Feldlinien-Schleifen erkennen,
  3. … Nahfeld und Fernfeld quantitativ unterscheiden: die drei Stockwerke der Hertz-Formel (\(1/r^3\), \(1/r^2\), \(1/r\)), die Grenze \(r = \lambda/2\pi\) und das Verhältnis von Blind- zu Wirkleistung \(1/(kr)^3\),
  4. … ein Strahlungsdiagramm messen (Near-to-Far in 3D) und lesen, die Direktivität daraus integrieren und in dBi umrechnen,
  5. … aus Sendeleistung, Direktivität und Abstand die Leistungsdichte und Feldstärke am Empfangsort abschätzen (das \(1/r^2\)-Gesetz des Funks).
import numpy as np
import matplotlib.pyplot as plt
import meep as mp

mp.verbosity(0)        # Meeps Fortschrittsmeldungen aus (Kap. 16)
Using MPI version 4.1, 1 processes
1

21.1 Warum strahlt es überhaupt? Der Knick

Eine ruhende Ladung hat ein radiales Feld, das wie \(1/r^2\) abfällt — das Coulomb-Feld aus Kapitel 1 und 3. Eine gleichförmig bewegte Ladung trägt dieses Feld einfach mit sich; aus ihrer Sicht ruht sie ja. In beiden Fällen wird nichts abgestrahlt: \(1/r^2\) im Feld heißt \(1/r^4\) in der Energiedichte, und das ist, über immer größere Kugelflächen \(4\pi r^2\) integriert, immer weniger — die Energie bleibt bei der Ladung.

Interessant wird es beim Beschleunigen, und der Grund steckt in einer Einsicht aus Kapitel 20: Feldnachrichten reisen mit \(c\). Was eine Ladung jetzt tut, weiß das Feld im Abstand \(r\) erst nach der Laufzeit \(r/c\) — das Feld dort draußen zeigt den retardierten Zustand der Quelle. Nun lassen wir eine Ladung, die lange geruht hat, zur Zeit \(t = 0\) einen kurzen Stoß der Dauer \(\tau\) erleiden, nach dem sie mit der Geschwindigkeit \(v\) weiterdriftet. Dann zerfällt die Welt zur Zeit \(t\) in drei Zonen:

  • Außen (\(r > ct\)): Die Nachricht vom Stoß ist noch nicht angekommen. Die Feldlinien zeigen radial auf den alten Ruheplatz — als wäre nichts geschehen.
  • Innen (\(r < c(t - \tau)\)): Hier ist das Feld längst auf dem neuesten Stand; die Linien zeigen radial auf die neue, driftende Position.
  • Dazwischen eine Kugelschale der Dicke \(c\tau\), die mit Lichtgeschwindigkeit nach außen läuft. Feldlinien reißen nicht ab (es gibt keine Ladung, an der sie enden könnten — Gauß, Kapitel 3), also müssen sie innerhalb der Schale die innere und die äußere Zone verbinden. Diese Verbindungsstücke sind geknickt — und der Knick ist quer zur Ausbreitungsrichtung.
WichtigVorhersage-Punkt

Die Ladung driftet nach rechts. Welche Feldlinien bekommen den stärksten Knick — die nach rechts und links (in Bewegungsrichtung) oder die nach oben und unten (quer dazu)? Und was bedeutet das für die Richtung, in die am stärksten „gesendet” wird?

Das Bild dazu können wir mit reiner Geometrie zeichnen — keine Maxwell-Maschinerie, nur die drei Zonen:

C = 1.0      # Lichttempo
V = 0.25     # Drifttempo der Ladung nach dem Stoß
TAU = 0.6    # Dauer des Stoßes

def ort_der_ladung(t):
    """Ruhe bis t=0, gleichmäßige Beschleunigung bis TAU, dann Drift."""
    if t <= 0:
        return 0.0
    if t <= TAU:
        return 0.5 * (V / TAU) * t**2
    return V * (t - TAU / 2)

def zeichne_knick(ax, t, n_linien=24):
    r_aussen = C * t                      # Nachricht „Stoß beginnt"
    r_innen = max(C * (t - TAU), 0.0)     # Nachricht „Stoß ist vorbei"
    x_q = ort_der_ladung(t)
    winkel = np.linspace(0, 2 * np.pi, n_linien, endpoint=False)
    for w in winkel:
        ex, ey = np.cos(w), np.sin(w)
        # innerer Ast: Strahl von der NEUEN Position bis zur inneren
        # Schalenwand (Schnitt Strahl/Kreis um den Stoßort, exakt)
        unter_wurzel = (x_q * ex)**2 - x_q**2 + r_innen**2
        s_ende = -x_q * ex + np.sqrt(max(unter_wurzel, 0.0))
        s_in = np.linspace(0.25, max(s_ende, 0.25), 20)
        ax.plot(x_q + s_in * ex, s_in * ey, "b-", lw=0.8)
        # äußerer Ast: Strahl vom ALTEN Ruheplatz, ab der Schale
        s_out = np.linspace(r_aussen, 9.5, 20)
        ax.plot(s_out * ex, s_out * ey, "b-", lw=0.8)
        # der Knick: das Verbindungsstück durch die Schale
        ax.plot([x_q + s_in[-1] * ex, r_aussen * ex],
                [s_in[-1] * ey, r_aussen * ey], "r-", lw=1.6)
    for r, stil in ((r_innen, ":"), (r_aussen, "--")):
        ax.add_patch(plt.Circle((0, 0), r, fill=False, color="gray",
                                ls=stil, lw=0.8))
    ax.plot(x_q, 0, "ko", ms=6)
    ax.set_xlim(-8.4, 8.4); ax.set_ylim(-8.4, 8.4)
    ax.set_aspect("equal")
    ax.set_xticks([]); ax.set_yticks([])
    ax.set_title(f"t = {t:.1f}")

fig, achsen = plt.subplots(1, 3, figsize=(7.5, 2.9))
for ax, t in zip(achsen, (2.0, 4.5, 7.5)):
    zeichne_knick(ax, t)
plt.show()
Abbildung 21.1: Die Feldlinien einer Ladung (schwarzer Punkt), die bei t = 0 aus der Ruhe angestoßen wurde und seither nach rechts driftet, zu drei Zeiten. Außen (jenseits des gestrichelten Kreises bei r = ct) zeigen die Linien noch auf den alten Ruheplatz, innen schon auf die neue Position. Dazwischen läuft eine Schale der Dicke cτ mit Lichtgeschwindigkeit nach außen, in der jede Feldlinie einen Knick (rot) trägt — quer zur Laufrichtung, am stärksten senkrecht zur Bewegung, exakt null in Bewegungsrichtung.

Die Vorhersage lässt sich direkt ablesen: In Bewegungsrichtung (nach rechts und links) liegen alter und neuer Strahl auf derselben Geraden — kein Knick. Quer zur Bewegung (oben und unten) ist der Versatz zwischen den Zonen am größten — der stärkste Knick. Eine schwingende Ladung sendet quer zu ihrer Bewegung am stärksten und längs ihrer Bewegung gar nicht. Das ist genau das Dipol-Argument, mit dem Kapitel 13 den Brewster-Winkel erklärt hat — und wir werden es am Ende dieses Kapitels als „Donut”-Strahlungsdiagramm vermessen.

21.1.1 Ein Strahlensatz liefert das \(1/r\)-Gesetz

Der Knick kann mehr als ein hübsches Bild sein — er trägt eine quantitative Botschaft. Schau auf eine Feldlinie, die senkrecht zur Bewegung läuft (im Bild: nach oben), zur späten Zeit \(t\). Ihr Knickstück überbrückt quer den Versatz zwischen innerer und äußerer Zone: Die innere Zone ist um den Drift \(v\,t\) verschoben, also ist die Querkomponente des Knicks proportional zu \(v\,t\) (und allgemein, bei Beobachtung unter dem Winkel \(\theta\) zur Bewegungsachse, zu \(v\,t\sin\theta\) — nur die Querkomponente des Versatzes knickt die Linie). Radial ist das Knickstück genau die Schalendicke \(c\,\tau\) lang. Das Verhältnis von Quer-Feld zu Radial-Feld ist also pure Geometrie:

\[\frac{E_\perp}{E_r} \;=\; \frac{v\,t\,\sin\theta}{c\,\tau}.\]

Jetzt zahlen sich zwei alte Bekannte aus. Erstens: Das radiale Feld ist das Coulomb-Feld, \(E_r \propto 1/r^2\). Zweitens: Die Schale ist zur Zeit \(t\) am Radius \(r = c\,t\) angekommen, also ist \(t = r/c\). Einsetzen:

\[E_\perp \;=\; E_r \cdot \frac{v\,(r/c)\sin\theta}{c\,\tau} \;\propto\; \frac{1}{r^2}\cdot\frac{v\,r\sin\theta}{c^2\tau} \;=\; \frac{(v/\tau)\,\sin\theta}{c^2}\cdot\frac{1}{r},\]

und \(v/\tau\) ist die Beschleunigung \(a\) während des Stoßes. Das Querfeld in der Schale fällt nur wie \(1/r\) — eine ganze Potenz langsamer als jedes statische Feld. Seine Energiedichte fällt wie \(1/r^2\), und über die Kugelfläche \(4\pi r^2\) integriert bleibt eine konstante Energie in der Schale, egal wie weit sie schon gelaufen ist: Diese Energie kommt nie zur Ladung zurück. Das ist Strahlung. Drei Befunde aus einem Strahlensatz: Strahlung braucht Beschleunigung (\(E_\perp \propto a\)), sie fällt wie \(1/r\), und sie geht wie \(\sin\theta\) bevorzugt quer.

Eine Handrechnung am dritten Bild von Abbildung 32.5, damit eine Zahl herauskommt: Dort ist \(v = 0{,}25\,c\), \(\tau = 0{,}6\) und \(t = 7{,}5\). Senkrecht nach oben (\(\sin\theta = 1\)) erwarten wir \(E_\perp/E_r = 0{,}25 \cdot 7{,}5 / 0{,}6 = 3{,}1\) — das Knickstück sollte gut dreimal so weit quer laufen wie radial. Miss im Bild nach: Der rote Strich oben ist tatsächlich fast quer gestellt, rund dreimal länger als die Schalendicke. Je später man schaut, desto querer der Knick — der Strahlungsanteil gewinnt mit wachsendem \(r\) gegen das Coulomb-Feld, das ist der Kern des \(1/r\)-Arguments.

In Bewegung ist das Argument noch eindrücklicher — man sieht die Schale davonlaufen und den Knick dabei immer querer werden:

Code der Animation (nur in der HTML-Fassung)
from matplotlib import animation
from IPython.display import HTML

fig_a, ax_a = plt.subplots(figsize=(5.4, 5.4))

def film_knick(j):
    ax_a.clear()
    zeichne_knick(ax_a, 0.7 + j * 0.18)
    ax_a.set_title(f"Stoß bei t = 0 — die Knick-Schale läuft mit c "
                   f"(t = {0.7 + j * 0.18:.1f})")

anim = animation.FuncAnimation(fig_a, film_knick, frames=44, interval=120)
plt.close(fig_a)
HTML(anim.to_jshtml(default_mode="loop"))

Und weil das Ganze reine Geometrie ist, kannst du selbst daran drehen. Sage vor jedem Lauf vorher, was passieren wird: Was ändert ein doppelt so schneller Drift (V = 0.5) am Knick? Was macht ein kürzerer Stoß (TAU = 0.2) — wird der Knick stärker oder nur schärfer? Und findest du eine Einstellung, bei der irgendeine Linie in Bewegungsrichtung knickt?

Eine Antenne ist nun nichts anderes als eine Maschine für periodische Knicke: Der Wechselstrom beschleunigt die Ladungen im Draht im Takt der Frequenz hin und her, jede Halbschwingung schickt eine neue Knick-Schale los, und die Schalen hintereinander sind die Welle — Wellenlänge \(\lambda = c/f\), wie seit Kapitel 4. Schauen wir der Maschine bei der Arbeit zu.

21.2 Die Antenne als Knick-Maschine

Wir bauen den Klassiker: einen Halbwellendipol — zwei Metallstäbe in einer Linie, zusammen etwa \(\lambda/2\) lang, in der Mitte von einem Wechselstrom gespeist. Die Geschichte spielt im UKW-Band: \(f = 100\) MHz, also \(\lambda = 3\) m und eine Antenne von etwa \(1{,}5\) m — die Maße eines Dachantennen-Stabs.

Frage: Wie verteilt sich der Strom auf dem Draht, und wie löst sich das Feld ab? Bühne: eine 2D-Zelle von \(8\lambda \times 8\lambda\) (24 m × 24 m), Auflösung 48 Punkte pro \(\lambda\), rundum 1 \(\lambda\) PML; wir bleiben für dieses Feldlinien-Bild bewusst in 2D, weil sich E-Feldlinien nur dort direkt zeichnen lassen (das E-Feld liegt in der Ebene, \(H_z\) steht senkrecht — die TE-Polarisation, das Gegenstück zur TMz-Welt aus Kapitel 9). Aufbau: zwei Metallarme entlang \(y\) (Gesamtlänge \(0{,}48\lambda\), Drahtbreite \(0{,}06\lambda\)) mit einem Speisespalt von \(0{,}0625\lambda\) in der Mitte, darin eine weiche \(E_y\)-Dauerstrichquelle (\(f = 1\) in Meep-Einheiten, sanft eingeschaltet über eine Periode — Kapitel 6). Die beiden Detailwahlen gehören zusammen: Der Speisespalt muss mehrere Gitterzellen breit sein (hier drei). Wäre er schmaler als eine Zelle, würde das Gitter ihn beim Rastern der Metallblöcke einfach zuschütten — die Quelle säße im Metall, und der Kurzschluss würgt die Felder um viele Größenordnungen ab. Tückisch daran: Normierte Bilder sähen weiterhin plausibel aus, nur die absoluten Feldstärken verraten den Fehler. Messgrößen: (1) die Feldlinien von \(\vec{E}\) nach dem Einschwingen, (2) der Strom im Draht über den Sprung von \(H_z\) quer über das Blech (Durchflutungssatz aus Kapitel 3: ein Umlauf eng um den Leiter misst den eingeschlossenen Strom). Erfolgskriterium: geschlossene Feldlinien-Schleifen, die sich im Abstand \(\lambda/2\) ablösen, und eine Stromverteilung mit Bauch in der Mitte.

Vor dem Lauf der Vorhersage-Punkt zum Strom:

WichtigVorhersage-Punkt

Am offenen Drahtende kann keine Ladung hinaus — der Leitungsstrom muss dort null sein. Was heißt das für die Stromverteilung auf dem Draht? Du hast dieses Muster schon einmal gesehen: in Kapitel 6, als eine Welle zwischen zwei Spiegeln gefangen war. Wo liegt der Bauch, wo liegen die Knoten?

Dann lassen wir die Maschine anlaufen — erst einschwingen, dann eine volle Periode dicht fotografieren:

A_METER = 3.0            # 1 Meep-Längeneinheit = lambda = 3 m (UKW)
DIPOL_L = 0.48           # Gesamtlänge in lambda (knapp lambda/2)
SPALT = 0.0625           # Speisespalt — exakt 3 Gitterzellen breit!
DRAHT_B = 0.06           # Drahtbreite — dick genug fürs Gitter
AUFL = 48

arm = DIPOL_L / 2 - SPALT / 2
y_arm = SPALT / 2 + arm / 2
zwei_arme = [
    mp.Block(size=mp.Vector3(DRAHT_B, arm, mp.inf),
             center=mp.Vector3(0, +y_arm), material=mp.metal),
    mp.Block(size=mp.Vector3(DRAHT_B, arm, mp.inf),
             center=mp.Vector3(0, -y_arm), material=mp.metal),
]
sim = mp.Simulation(
    cell_size=mp.Vector3(8.0, 8.0),
    boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(mp.ContinuousSource(frequency=1.0, width=1.0),
                       component=mp.Ey, center=mp.Vector3())],
    resolution=AUFL, geometry=zwei_arme)

filmbilder = {"Ex": [], "Ey": [], "Hz": []}

def merke(s):
    filmbilder["Ex"].append(s.get_array(component=mp.Ex))
    filmbilder["Ey"].append(s.get_array(component=mp.Ey))
    filmbilder["Hz"].append(s.get_array(component=mp.Hz))

sim.run(until=20.0)                                   # einschwingen
sim.run(mp.at_every(1.0 / 16.0, merke), until=1.0)    # 1 Periode filmen
Ex_t = np.array(filmbilder["Ex"])[:16]
Ey_t = np.array(filmbilder["Ey"])[:16]
Hz_t = np.array(filmbilder["Hz"])[:16]
nt, nx, ny = Ex_t.shape
x_m = np.linspace(-4, 4, nx) * A_METER       # Achsen in Metern
y_m = np.linspace(-4, 4, ny) * A_METER
print(f"{nt} Filmbilder über exakt eine Periode, Gitter {nx} x {ny}")
16 Filmbilder über exakt eine Periode, Gitter 384 x 384

Die Strommessung: Wir lesen \(H_z\) eine Gitterzelle links und rechts vom Blech ab. Der Durchflutungssatz sagt — entzerrt, wie es sich gehört: Ein enger Umlauf um den Leiter sammelt \(\oint \vec H \cdot d\vec l\); in unserer 2D-Welt hat \(\vec H\) nur die \(z\)-Komponente, also bleibt vom Umlauf genau die Differenz der beiden Ablesungen übrig. Sie ist der Strom (pro Meter Tiefe), der zwischen den beiden Ablesepunkten hindurchfließt:

# von oben: Ex_t, Ey_t, Hz_t, x_m, y_m, AUFL, DRAHT_B, DIPOL_L, A_METER
L_m = DIPOL_L * A_METER

# --- Strom: Hz-Sprung eine Zelle neben dem Blech, Amplitude über
#     die aufgezeichnete Periode ---
abstand = DRAHT_B / 2 + 1.0 / AUFL
ix_links = np.argmin(np.abs(x_m / A_METER + abstand))
ix_rechts = np.argmin(np.abs(x_m / A_METER - abstand))
sprung = Hz_t[:, ix_links, :] - Hz_t[:, ix_rechts, :]   # (Zeit, y)
strom = np.max(np.abs(sprung), axis=0)                  # Amplitude je y
im_draht = np.abs(y_m / A_METER) <= DIPOL_L / 2
strom = strom / strom[im_draht].max()

fig, (ax_f, ax_s) = plt.subplots(
    1, 2, figsize=(7.5, 4.0), gridspec_kw={"width_ratios": [1.35, 1]})

# --- links: Feldlinien über Feldstärke ---
i_bild = nt - 1
betrag = np.hypot(Ex_t[i_bild], Ey_t[i_bild])
skala = np.percentile(betrag, 70) + 1e-12
gestaucht = np.arcsinh(betrag / skala)     # arcsinh-Lupe (Kap. 9)
ax_f.imshow(gestaucht.T, origin="lower", cmap="inferno",
            extent=[x_m.min(), x_m.max(), y_m.min(), y_m.max()],
            vmin=0, vmax=np.percentile(gestaucht, 99.5))
with np.errstate(invalid="ignore"):
    ax_f.streamplot(x_m, y_m, Ex_t[i_bild].T, Ey_t[i_bild].T,
                    color="white", density=1.1, linewidth=0.5,
                    arrowsize=0.6)
ax_f.plot([0, 0], [SPALT / 2 * A_METER, L_m / 2], "c-", lw=3.5)
ax_f.plot([0, 0], [-L_m / 2, -SPALT / 2 * A_METER], "c-", lw=3.5)
ax_f.set_xlabel("x (m)"); ax_f.set_ylabel("y (m)")
ax_f.set_title("E-Feldlinien lösen sich ab")

# --- rechts: Stromprofil ---
ax_s.plot(np.where(im_draht, strom, np.nan), y_m, "b-", lw=2.5,
          label="Messung ($H_z$-Sprung)")
ideal = np.where(im_draht, np.abs(np.cos(np.pi * y_m / L_m)), np.nan)
ax_s.plot(ideal, y_m, "r--", lw=1.5, label="Ideal: dünner 3D-Draht")
ax_s.axhline(+L_m / 2, color="gray", lw=0.8, ls=":")
ax_s.axhline(-L_m / 2, color="gray", lw=0.8, ls=":")
ax_s.set_ylim(-1.3 * L_m / 2, 1.3 * L_m / 2); ax_s.set_xlim(0, 1.08)
ax_s.set_xlabel("Stromamplitude (normiert)"); ax_s.set_ylabel("y (m)")
ax_s.set_title("Strom im Draht")
ax_s.legend(fontsize=8, loc="center right"); ax_s.grid(alpha=0.3)
fig.tight_layout()
plt.show()
Abbildung 21.2: Links: das eingeschwungene Feld des 100-MHz-Dipols (Farbfläche: Feldstärke, logarithmisch gestaucht; weiße Linien: E-Feldlinien — Lesehilfe: Linien = Richtung, Farbe = Stärke). Nahe der Antenne spannen sich die Linien noch von Arm zu Arm, weiter draußen sind sie zu geschlossenen Schleifen abgeschnürt, die im Abstand λ/2 = 1,5 m aufeinanderfolgen. Rechts: die Stromamplitude auf dem Draht — ein Bauch am Speisepunkt, abfallend zu den Enden, dazu die ideale Dünndraht-Stehwelle als gestrichelte Erwartung. Warum unsere Messkurve die Null am Ende nicht erreicht, klärt der Text.

Die Vorhersage zum Strom trifft im Kern zu: Der Strom auf der Antenne ist eine stehende Welle. Der Speisepunkt sitzt im Bauch, zu den Enden hin fällt die Amplitude — dieselbe Physik wie die gefangene Welle in Kapitel 6, nur dass hier die Stromwelle im Draht am offenen Ende reflektiert wird (wo der Leitungsstrom nicht weiterkann), statt der Feldwelle am Spiegel. Genau deshalb ist \(\lambda/2\) die natürliche Länge: Sie lässt einen vollen Bauch zwischen zwei Knoten genau auf die Antenne passen, der Draht schwingt in seiner Grundmode — die Antenne ist ein Resonator (Kapitel 15 lässt grüßen), den man in der Mitte anstößt.

Zwei Ehrlichkeiten zur rechten Kurve. Erstens erreicht unsere Messung am Drahtende nicht die Null, und das hat einen physikalisch lehrreichen Grund: Die Messschleife umfasst neben dem Leitungsstrom auch den Verschiebungsstrom (Kapitel 3!). An den Enden sammelt sich im Takt die Ladung, ihr quellendes E-Feld führt den Strom als \(\varepsilon_0\,\partial\vec E/\partial t\) im Feld weiter — der Gesamtstrom reißt am Drahtende gar nicht ab, nur der Leitungsanteil. Zweitens ist die gestrichelte \(\cos\)-Kurve die Theorie für einen dünnen Draht in 3D; unser 2D-„Draht” ist in Wahrheit ein unendlich tiefes Blech, das deutlich anders belastet ist. Das ist dieselbe Lektion, die in Kapitel 11 die 2D-Yagi unbaubar machte — 2D taugt für das Prinzip, nicht für Drahtmaße. Wer exakte Drahtströme braucht, nimmt das Werkzeug mit Dünndraht-Modell: NEC, so wie es Kapitel 24 beim Yagi-Bauplan tun wird.

Das Standbild zeigt die abgeschnürten Schleifen — die Animation zeigt den Mechanismus: Zwischen den Armen klappt das Feld jede Halbschwingung um, die alte Schleife wird abgestoßen und wandert davon. Die 16 Bilder decken exakt eine Periode ab, der Film läuft also nahtlos:

Code der Animation (nur in der HTML-Fassung)
# von oben: Ex_t, Ey_t, x_m, y_m, SPALT, L_m, A_METER, skala
from matplotlib import animation
from IPython.display import HTML

fig_b, ax_b = plt.subplots(figsize=(6.0, 6.0))

def film_abloesung(i):
    ax_b.clear()
    b = np.arcsinh(np.hypot(Ex_t[i], Ey_t[i]) / skala)
    ax_b.imshow(b.T, origin="lower", cmap="inferno",
                extent=[x_m.min(), x_m.max(), y_m.min(), y_m.max()],
                vmin=0, vmax=np.percentile(b, 99.5))
    with np.errstate(invalid="ignore"):
        ax_b.streamplot(x_m, y_m, Ex_t[i].T, Ey_t[i].T, color="white",
                        density=1.1, linewidth=0.5, arrowsize=0.6)
    ax_b.plot([0, 0], [SPALT / 2 * A_METER, L_m / 2], "c-", lw=3.5)
    ax_b.plot([0, 0], [-L_m / 2, -SPALT / 2 * A_METER], "c-", lw=3.5)
    ax_b.set_xlabel("x (m)"); ax_b.set_ylabel("y (m)")
    ax_b.set_title(f"Hertz'sche Ablösung — {i + 1}/16 einer Periode")

anim = animation.FuncAnimation(fig_b, film_abloesung, frames=16,
                               interval=140)
plt.close(fig_b)
HTML(anim.to_jshtml(default_mode="loop"))

21.3 Das Feld macht sich selbstständig

Bevor wir messen, wie weit die Welle trägt, räumen wir die zentrale Fehlvorstellung ab:

WarnungNaheliegende Vermutung

„Das Feld gehört zu seiner Quelle. Schaltet man den Sender aus, bricht auch das Feld zusammen — so wie das Feld im Kondensator verschwindet, wenn man ihn entlädt.”

Warum sie naheliegt: In der Statik stimmt sie. Jedes Feld in Teil I hing an seinen Ladungen und Strömen; nimmt man die Quelle weg, ist auch das Feld weg. Und der Sprachgebrauch — der Strom „erzeugt” das Feld — klingt nach einer Abhängigkeit, die ständigen Nachschub braucht.

Was stattdessen stimmt: Feldnachrichten reisen mit \(c\) (Kapitel 20). Was die Quelle jetzt tut, erreicht eine abgelöste Feldschleife im Abstand \(r\) erst nach \(r/c\) — und holt sie nie ein, denn die Schleife flieht selbst mit \(c\). Draußen tragen sich die Felder gegenseitig: Das wandernde \(\vec B\) induziert \(\vec E\), das wandernde \(\vec E\) baut per Verschiebungsstrom \(\vec B\) — die zwei dynamischen Maxwell-Gleichungen aus Kapitel 3 brauchen keine Quelle mehr, das war der Kern der Wellengleichung in Kapitel 4. Einmal abgelöst, ist die Welle autark.

Der Beweis ist ein Experiment, das die Behauptung wörtlich nimmt. Frage: Läuft die Welle weiter, wenn der Sender nachweislich schweigt? Bühne: dieselbe 2D-Welt, aber größer (\(12\lambda \times 12\lambda\)), damit der Ring nach dem Verstummen noch Strecke vor sich hat; ein kurzer Dipol (\(0{,}3\lambda\) — er klingt nach dem Puls kaum nach). Quelle: ein Gauß-Puls um \(f = 1\) mit cutoff=3 — Meep schaltet die Quelle danach exakt ab, ab \(t = 2 \cdot 3 / 1{,}1 \approx 5{,}5\) Perioden ist jeder Quellstrom identisch null. Messgrößen: Schnappschüsse des Felds und die Position des Ringmaximums über die Zeit. Erfolgskriterium: Der Ring läuft nach \(t = 5{,}5\) unverändert weiter, sein Radius wächst mit Tempo \(c\).

KURZ_L = 0.3
arm_k = KURZ_L / 2 - SPALT / 2
y_arm_k = SPALT / 2 + arm_k / 2
sim_puls = mp.Simulation(
    cell_size=mp.Vector3(12.0, 12.0),
    boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(
        # cutoff=3: nach 3 Gauß-Breiten beidseits wird die Quelle
        # exakt null — danach fließt garantiert kein Quellstrom mehr
        mp.GaussianSource(frequency=1.0, fwidth=1.1, cutoff=3),
        component=mp.Ey, center=mp.Vector3())],
    resolution=AUFL,
    geometry=[
        mp.Block(size=mp.Vector3(DRAHT_B, arm_k, mp.inf),
                 center=mp.Vector3(0, +y_arm_k), material=mp.metal),
        mp.Block(size=mp.Vector3(DRAHT_B, arm_k, mp.inf),
                 center=mp.Vector3(0, -y_arm_k), material=mp.metal)])

puls = {"Ex": [], "Ey": [], "Hz": [], "t": []}

def merke_puls(s):
    puls["Ex"].append(s.get_array(component=mp.Ex))
    puls["Ey"].append(s.get_array(component=mp.Ey))
    puls["Hz"].append(s.get_array(component=mp.Hz))
    puls["t"].append(s.meep_time())   # aktuelle Simulationszeit

sim_puls.run(mp.at_every(0.25, merke_puls), until=10.5)
Ex_p = np.array(puls["Ex"]); Ey_p = np.array(puls["Ey"])
Hz_p = np.array(puls["Hz"]); t_p = np.array(puls["t"])
T_AUS = 2 * 3 / 1.1
print(f"{len(t_p)} Schnappschüsse; Quelle exakt aus ab t = {T_AUS:.2f}")
# Gesundheits-Check (siehe Bühnenbeschreibung oben): die ABSOLUTE
# Spitzenamplitude — säße die Quelle im zugerasterten Spalt, stünde
# hier nur Rundungsrauschen (~1e-19)
print(f"Spitzenamplitude des Laufs: max|Ey| = {np.abs(Ey_p).max():.3f}")
42 Schnappschüsse; Quelle exakt aus ab t = 5.45
Spitzenamplitude des Laufs: max|Ey| = 20.946
# von oben: Ex_p, Ey_p, t_p, T_AUS (Lauf oben); Gitter 12 lambda
x_p = np.linspace(-6, 6, Ex_p.shape[1])
# Ringposition: Maximum des Feldbetrags entlang der +x-Achse (y = 0)
iy0 = Ex_p.shape[2] // 2
profil = np.hypot(Ex_p[:, :, iy0], Ey_p[:, :, iy0])[:, x_p > 0.5]
r_ring = x_p[x_p > 0.5][np.argmax(profil, axis=1)]

print("   t    Ringradius   (Quelle aus ab t = 5,45)")
for tz in (6.0, 6.5, 7.0, 7.5, 8.0):
    i = np.argmin(np.abs(t_p - tz))
    print(f"  {t_p[i]:4.1f}   {r_ring[i]:5.2f} λ")
# Fit nur bis t = 8: danach erreicht der Ring die PML und die
# Maximum-Suche rastet auf den schwächeren 2D-Nachlauf ein
spaet = (t_p >= 5.5) & (t_p <= 8.0)
tempo = np.polyfit(t_p[spaet], r_ring[spaet], 1)[0]
print(f"\nTempo des Rings nach dem Verstummen: {tempo:.3f} c")
   t    Ringradius   (Quelle aus ab t = 5,45)
   6.0    2.87 λ
   6.5    3.37 λ
   7.0    3.87 λ
   7.5    4.37 λ
   8.0    4.87 λ

Tempo des Rings nach dem Verstummen: 1.002 c

Der Ring weiß nichts vom Schicksal seiner Quelle: Lange nachdem der letzte Quellstrom geflossen ist, wächst sein Radius stur mit einer Wellenlänge pro Periode — Tempo \(c\) bis auf rund ein Prozent (der Rest: numerische Dispersion aus Kapitel 8 plus die Rasterung der Maximum-Suche aufs Gitter). Dazu das Bild — und der Energieblick von Kapitel 18: Wo strömt die Leistung?

# von oben: Ex_p, Ey_p, Hz_p, t_p, x_p, KURZ_L, SPALT, A_METER
i8 = np.argmin(np.abs(t_p - 8.0))
y_p = x_p
Sx = Ey_p[i8] * Hz_p[i8]          # Poynting in 2D-TE (Kap. 18):
Sy = -Ex_p[i8] * Hz_p[i8]         # Sx = Ey·Hz, Sy = −Ex·Hz
fig, (ax_e, ax_p2) = plt.subplots(1, 2, figsize=(7.5, 3.9))

betrag_e = np.hypot(Ex_p[i8], Ey_p[i8])
sk_e = np.percentile(betrag_e, 70) + 1e-12
ge = np.arcsinh(betrag_e / sk_e)
ax_e.imshow(ge.T, origin="lower", cmap="inferno",
            extent=[-6, 6, -6, 6], vmin=0,
            vmax=np.percentile(ge, 99.5))
with np.errstate(invalid="ignore"):
    ax_e.streamplot(x_p, y_p, Ex_p[i8].T, Ey_p[i8].T, color="white",
                    density=1.1, linewidth=0.5, arrowsize=0.6)
ax_e.set_title("E-Feld: autarke Schleifen")
ax_e.set_xlabel("x (λ)"); ax_e.set_ylabel("y (λ)")

betrag_s = np.hypot(Sx, Sy)
sk_s = np.percentile(betrag_s[betrag_s > 0], 70) + 1e-12
gs = np.arcsinh(betrag_s / sk_s)
ax_p2.imshow(gs.T, origin="lower", cmap="viridis",
             extent=[-6, 6, -6, 6], vmin=0,
             vmax=np.percentile(gs, 99.5))
with np.errstate(invalid="ignore"):
    ax_p2.streamplot(x_p, y_p, Sx.T, Sy.T, color="white",
                     density=1.1, linewidth=0.5, arrowsize=0.6)
ax_p2.set_title(r"$\vec S = \vec E \times \vec H$: Energie radial nach außen")
ax_p2.set_xlabel("x (λ)"); ax_p2.set_ylabel("y (λ)")
for ax in (ax_e, ax_p2):
    ax.plot([0, 0], [SPALT / 2, KURZ_L / 2], "c-", lw=2.5)
    ax.plot([0, 0], [-KURZ_L / 2, -SPALT / 2], "c-", lw=2.5)
fig.tight_layout()
plt.show()
Abbildung 21.3: Der abgelöste Einzelpuls bei t = 8 — die Quelle ist seit zweieinhalb Perioden exakt still. Links das E-Feld mit Feldlinien: eine geschlossene, quellenfreie Schleifenstruktur, kein Faden führt mehr zur Antenne. Rechts der Poynting-Vektor (Farbfläche: Betrag, Linien: Flussrichtung): Die Energie strömt radial nach außen, mit dem Ring. Dass hinter dem Hauptring schwächere Ringe nachlaufen, ist eine 2D-Eigenheit (das Huygens-Prinzip gilt scharf nur in 3D); in 3D wäre der Puls solo unterwegs.

Im Film sieht man beides hintereinander: erst das Senden (der Speisespalt leuchtet im Poynting-Bild auf — dort tritt die Energie ins Feld), dann das Verstummen — und der Ring zieht unbeirrt weiter. Der Titel sagt an, wann die Quelle exakt abgeschaltet ist:

Code der Animation (nur in der HTML-Fassung)
# von oben: Ex_p, Ey_p, Hz_p, t_p, x_p, y_p, T_AUS, KURZ_L, SPALT,
#           sk_e, sk_s, ge, gs (Farbskalen + Standbild-Werte)
from matplotlib import animation
from IPython.display import HTML

fig_c, (ax_ce, ax_cs) = plt.subplots(1, 2, figsize=(7.4, 3.8))
# feste Filmskalen, geeicht am Standbild (statt Zahlen zu raten —
# so bleibt die Helligkeit über alle Bilder vergleichbar)
vmax_e = float(np.percentile(ge, 99.5))
vmax_s = float(np.percentile(gs, 99.5))

def film_puls(j):
    i = 4 + 2 * j                      # ab t = 1, jede halbe Periode
    for ax in (ax_ce, ax_cs):
        ax.clear()
    be = np.hypot(Ex_p[i], Ey_p[i])
    ge2 = np.arcsinh(be / sk_e)
    ax_ce.imshow(ge2.T, origin="lower", cmap="inferno",
                 extent=[-6, 6, -6, 6], vmin=0, vmax=vmax_e)
    sx, sy = Ey_p[i] * Hz_p[i], -Ex_p[i] * Hz_p[i]
    gs2 = np.arcsinh(np.hypot(sx, sy) / sk_s)
    ax_cs.imshow(gs2.T, origin="lower", cmap="viridis",
                 extent=[-6, 6, -6, 6], vmin=0, vmax=vmax_s)
    for ax in (ax_ce, ax_cs):
        ax.plot([0, 0], [SPALT / 2, KURZ_L / 2], "c-", lw=2.5)
        ax.plot([0, 0], [-KURZ_L / 2, -SPALT / 2], "c-", lw=2.5)
        ax.set_xlabel("x (λ)")
    ax_ce.set_title("E-Feld"); ax_cs.set_title("Poynting-Betrag")
    status = ("Quelle sendet" if t_p[i] < T_AUS
              else "QUELLE IST STILL — der Ring läuft weiter")
    farbe = "black" if t_p[i] < T_AUS else "firebrick"
    fig_c.suptitle(f"t = {t_p[i]:.2f} Perioden — {status}",
                   color=farbe)

anim = animation.FuncAnimation(fig_c, film_puls, frames=19, interval=200)
plt.close(fig_c)
HTML(anim.to_jshtml(default_mode="loop"))

21.4 Nah und fern — gemessen in 3D

Wie stark ist das Feld in welchem Abstand? Für diese Frage reicht 2D nicht mehr: Dort verteilen sich Wellen auf wachsende Kreisumfänge und fallen wie \(1/\sqrt{r}\) (gemessen in Kapitel 9). Die Funkwelt ist dreidimensional — Kugelflächen \(4\pi r^2\), Strahlungsfeld \(\propto 1/r\), genau wie es das Knick-Argument verlangt. Also rechnen wir jetzt zum ersten Mal im Buch echtes 3D.

Die Theorie dazu ist über 130 Jahre alt: Für den Hertz’schen Dipol — ein punktförmiges Stromelement, das mit \(f\) schwingt — lässt sich Maxwell exakt lösen. Quer zur Dipolachse (äquatorial) hat der Betrag des E-Felds die Form

\[|E|(r) \;\propto\; \sqrt{\Big(\tfrac{1}{kr} - \tfrac{1}{(kr)^3}\Big)^{2} + \tfrac{1}{(kr)^4}}\,, \qquad k = \frac{2\pi}{\lambda},\]

ein Haus mit drei Stockwerken: Ganz nah dominiert \(1/(kr)^3\) — das ist das statische Dipolfeld aus Kapitel 3, das im Takt mitschwingt. Ganz fern bleibt \(1/(kr)\) — die Strahlung aus dem Knick-Argument. Dazwischen vermittelt der \(1/(kr)^2\)-Term. Die Stockwerke wechseln dort, wo \(kr \approx 1\) ist, also bei

\[r \;=\; \frac{\lambda}{2\pi} \;\approx\; 0{,}16\,\lambda\]

der Trennradius zwischen Nahfeld und Fernfeld. Längs der Achse dagegen fehlt der \(1/(kr)\)-Term komplett (kein Knick in Bewegungsrichtung!); dort fällt das Feld auch in der Ferne wie \(1/r^2\) — die Antenne strahlt längs ihrer Achse nichts ab, wie es Kapitel 13 fürs Dipol-Argument schon benutzt hat.

Frage: Treffen unsere Messpunkte beide Kurven — \(1/r\) quer, \(1/r^2\) längs? Bühne: eine 3D-Zelle \(6\lambda \times 6\lambda \times 6\lambda\) mit 1 \(\lambda\) PML, Auflösung 40. Das ist die bisher teuerste Zelle des Buchs (rund drei Minuten Rechenzeit); zwei Spiegelsymmetrien machen sie bezahlbar. Quelle: eine \(E_z\)-Punktquelle — sie ist der Hertz-Dipol in Reinform (ein Stromelement von der Größe einer Gitterzelle), gepulst um \(f = 1\), gelegt exakt auf einen \(E_z\)-Gitterpunkt. Messgrößen: die DFT-Amplitude von \(E_z\) bei \(f = 1\) (Kapitel 15) auf zwei Messlinien — äquatorial entlang \(x\) und axial entlang \(z\) —, dazu (für später) eine geschlossene Near-to-Far-Box. Erfolgskriterium: Beide Messreihen liegen auf ihrer Hertz-Kurve; im Fernbereich Steigung \(-1\) bzw. \(-2\) im log-log-Bild.

Die WLAN-Story dazu: In Meep-Einheiten ist \(\lambda = 1\); lies die Zelle als \(2{,}4\)-GHz-Welt, dann ist \(\lambda = 12{,}5\) cm und die Zelle ein 75-cm-Würfel um einen winzigen Sender.

AUFL_3D = 40
z_q = 0.5 / AUFL_3D     # Quelle exakt auf einen Ez-Gitterpunkt
                        # (Ez wohnt auf halben z-Schritten — Yee!)
sim3 = mp.Simulation(
    # drei Komponenten in cell_size: die erste echte 3D-Zelle des Buchs
    cell_size=mp.Vector3(6, 6, 6),
    boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(mp.GaussianSource(frequency=1.0, fwidth=0.3),
                       component=mp.Ez, center=mp.Vector3(0, 0, z_q))],
    resolution=AUFL_3D,
    # mp.Mirror: Aufbau und Quelle sind spiegelsymmetrisch in x und y —
    # Meep rechnet nur ein Viertel des Volumens, Ergebnis identisch
    symmetries=[mp.Mirror(mp.X), mp.Mirror(mp.Y)])

linie_eq = mp.Volume(center=mp.Vector3(0.95, 0, z_q),
                     size=mp.Vector3(1.9, 0, 0))
linie_ax = mp.Volume(center=mp.Vector3(0, 0, z_q + 0.95),
                     size=mp.Vector3(0, 0, 1.9))
# äquatorial nehmen wir Ez UND Hy auf — aus dem Paar wird gleich
# noch der komplexe Poynting-Vektor
dft_eq = sim3.add_dft_fields([mp.Ez, mp.Hy], 1.0, 0, 1, where=linie_eq)
dft_ax = sim3.add_dft_fields([mp.Ez], 1.0, 0, 1, where=linie_ax)

# Near-to-Far-Box (Kap. 14, jetzt geschlossen in 3D: sechs Flächen;
# weight=-1, wo die Außennormale in negative Achsrichtung zeigt) —
# wir nehmen sie im selben Lauf fürs Richtdiagramm weiter unten auf
b = 1.6
def n2f_box(s):
    return s.add_near2far(
        1.0, 0, 1,
        mp.Near2FarRegion(mp.Vector3(+b, 0, 0), size=mp.Vector3(0, 2*b, 2*b)),
        mp.Near2FarRegion(mp.Vector3(-b, 0, 0), size=mp.Vector3(0, 2*b, 2*b), weight=-1),
        mp.Near2FarRegion(mp.Vector3(0, +b, 0), size=mp.Vector3(2*b, 0, 2*b)),
        mp.Near2FarRegion(mp.Vector3(0, -b, 0), size=mp.Vector3(2*b, 0, 2*b), weight=-1),
        mp.Near2FarRegion(mp.Vector3(0, 0, +b), size=mp.Vector3(2*b, 2*b, 0)),
        mp.Near2FarRegion(mp.Vector3(0, 0, -b), size=mp.Vector3(2*b, 2*b, 0), weight=-1))

n2f_hertz = n2f_box(sim3)

# stop_when_fields_decayed: läuft, bis das Feld am Kontrollpunkt auf
# 1e-5 des Maximums gefallen ist — der Puls ist dann fertig abgestrahlt
sim3.run(until_after_sources=mp.stop_when_fields_decayed(
    5, mp.Ez, mp.Vector3(0.5, 0, 0), 1e-5))
print("3D-Lauf fertig.")
3D-Lauf fertig.
# von oben: sim3, dft_eq, dft_ax (3D-Lauf)
k = 2 * np.pi
ez_eq = np.abs(sim3.get_dft_array(dft_eq, mp.Ez, 0))
ez_ax = np.abs(sim3.get_dft_array(dft_ax, mp.Ez, 0))
r_lin = np.linspace(0, 1.9, len(ez_eq))
messbar = (r_lin >= 0.2) & (r_lin <= 1.85)
r_mess = r_lin[messbar]; kr = k * r_mess

hertz_eq = lambda kr: np.sqrt((1/kr - 1/kr**3)**2 + 1/kr**4)
hertz_ax = lambda kr: np.sqrt(1/kr**4 + 1/kr**6)
fern = kr > 6
A_eq = np.mean(ez_eq[messbar][fern] / hertz_eq(kr[fern]))
A_ax = np.mean(ez_ax[messbar][fern] / hertz_ax(kr[fern]))

fig, ax = plt.subplots(figsize=(7.0, 4.4))
r_theo = np.linspace(0.04, 1.9, 400); kr_t = k * r_theo
ax.loglog(r_theo, A_eq * hertz_eq(kr_t), "b-", lw=1.3,
          label="Hertz-Formel, äquatorial")
ax.loglog(r_theo, A_ax * hertz_ax(kr_t), "g-", lw=1.3,
          label="Hertz-Formel, axial")
ax.loglog(r_mess[::3], ez_eq[messbar][::3], "bo", ms=4.5, mfc="none",
          label="Meep, äquatorial")
ax.loglog(r_mess[::3], ez_ax[messbar][::3], "gs", ms=4.5, mfc="none",
          label="Meep, axial")
ax.loglog(r_theo, A_eq / kr_t, "k--", lw=0.9, label=r"$\propto 1/r$")
ax.loglog(r_theo, A_ax / kr_t**2, "k:", lw=1.1, label=r"$\propto 1/r^2$")
ax.axvline(1 / k, color="orange", lw=1.4)
ax.text(1 / k * 1.07, ax.get_ylim()[0] * 1.5, r"$r = \lambda/2\pi$",
        color="orange", rotation=90, va="bottom")
ax.set_xlabel("Abstand r (λ)"); ax.set_ylabel("|E| (relativ)")
ax.set_title("Drei Stockwerke: Nah- und Fernfeld des Hertz-Dipols")
ax.legend(fontsize=8); ax.grid(alpha=0.3, which="both")
plt.show()

steigung_eq = np.polyfit(np.log(r_mess[fern]),
                         np.log(ez_eq[messbar][fern]), 1)[0]
steigung_ax = np.polyfit(np.log(r_mess[fern]),
                         np.log(ez_ax[messbar][fern]), 1)[0]
print(f"log-log-Steigung im Fernbereich: äquatorial {steigung_eq:.3f} "
      f"(Soll −1), axial {steigung_ax:.3f} (Soll −2)")
Abbildung 21.4: |E|(r) des Hertz-Dipols im log-log-Bild, äquatorial (blau) und axial (grün), je mit der exakten Hertz-Kurve als Linie und den Messpunkten aus dem 3D-Lauf. Die gestrichelte 1/r-Asymptote trägt die äquatoriale Kurve in der Ferne, die gepunktete 1/r²-Asymptote die axiale — längs der Achse gibt es keinen Strahlungsterm. Die orangefarbene Senkrechte markiert die Nahfeld-Fernfeld-Grenze r = λ/2π, an der die Stockwerke wechseln. Messpunkte erst ab r = 0,2 λ: näher an der Quelle ist die eine Gitterzelle der Punktquelle keine Punktquelle mehr.
log-log-Steigung im Fernbereich: äquatorial -0.996 (Soll −1), axial -2.053 (Soll −2)

Beide Messreihen liegen auf ihren Kurven, die Steigungen im Fernbereich treffen \(-1\) und \(-2\) — das Knick-Argument und die 130 Jahre alte Formel bestehen den Gittertest. Was die Grenze \(\lambda/2\pi\) praktisch bedeutet, zeigt eine Handrechnung quer durch die Frequenzen, alle mit derselben Formel \(r = \lambda/2\pi = c/(2\pi f)\):

Anwendung \(f\) \(\lambda\) Nahfeldgrenze \(\lambda/2\pi\)
WLAN \(2{,}45\) GHz \(12{,}2\) cm \(1{,}9\) cm
UKW-Radio \(100\) MHz \(3\) m \(48\) cm
Stromnetz \(50\) Hz \(6000\) km \(955\) km

Die letzte Zeile ist die wichtigste: Beim 50-Hz-Netz liegt die Nahfeldgrenze bei fast tausend Kilometern. Alles, was du im Alltag an 50-Hz-Feldern erlebst — jede Leitung, jeder Trafo — ist tiefstes Nahfeld: gebundenes Feld, das pendelt, statt zu reisen. Warum ein Stromnetz trotzdem (verschwindend wenig) strahlt und warum man dafür quantitativ mehr braucht als diese Tabelle, klärt Kapitel 25.

21.4.1 Pendeln oder reisen: Blind- und Wirkleistung

„Gebundenes Feld, das pendelt” kann man messen. Die DFT-Amplituden sind komplexe Zahlen (Kapitel 15) — sie tragen die Phasenlage. Daraus baut man den komplexen Poynting-Vektor \(S_r = -\tfrac{1}{2} E_\theta H_\varphi^*\): Sein Realteil ist die Wirkleistung, die im Zeitmittel tatsächlich nach außen fließt; sein Imaginärteil ist die Blindleistung — Energie, die zweimal pro Periode hinaus- und wieder hineinschwappt, ohne je anzukommen (das Wort kennst du aus dem Schwingkreis-Umfeld von Kapitel 19; hier siehst du das Feld-Original). Für den Hertz-Dipol sagt die Theorie ein verblüffend schlichtes Verhältnis voraus:

\[\frac{\text{Blind}}{\text{Wirk}} \;=\; \frac{\operatorname{Im} S_r}{\operatorname{Re} S_r} \;=\; \frac{1}{(kr)^3}.\]

Bei \(r = \lambda/2\pi\) (also \(kr = 1\)) pendelt genauso viel, wie fließt — die Nahfeldgrenze ist keine Konvention, sondern der Ort dieses Gleichstands.

# von oben: sim3, dft_eq, r_lin, k (3D-Lauf + Profil)
ez_c = sim3.get_dft_array(dft_eq, mp.Ez, 0)
hy_c = sim3.get_dft_array(dft_eq, mp.Hy, 0)
# np.conj: konjugiert komplex (Vorzeichen des Imaginärteils kippen) —
# E·H* trennt Wirkanteil (Re) und Blindanteil (Im)
S_radial = -0.5 * ez_c * np.conj(hy_c)
# fürs Verhältnis dürfen die Punkte weiter nach innen als beim
# Profil — die Quellzellen-Abweichung ist hier Teil der Geschichte
nah_dran = (r_lin >= 0.13) & (r_lin <= 1.85)
r_bw = r_lin[nah_dran]
blind_zu_wirk = (np.imag(S_radial[nah_dran]) /
                 np.real(S_radial[nah_dran]))

fig, ax = plt.subplots(figsize=(6.8, 4.2))
zeig = blind_zu_wirk > 0
ax.loglog(r_bw[zeig][::2], blind_zu_wirk[zeig][::2], "o",
          ms=4.5, mfc="none", color="purple", label="Meep (3D-Lauf)")
r_t = np.linspace(0.12, 1.9, 300)
ax.loglog(r_t, 1 / (k * r_t)**3, "k-", lw=1.2,
          label=r"Theorie $1/(kr)^3$")
ax.plot(1 / k, 1.0, "x", color="orange", ms=11, mew=2.5,
        label=r"$r = \lambda/2\pi$: Blind = Wirk")
ax.set_xlabel("Abstand r (λ)")
ax.set_ylabel("Blindleistung / Wirkleistung")
ax.set_title("Nah pendelt die Energie, fern reist sie")
ax.legend(); ax.grid(alpha=0.3, which="both")
plt.show()

# blind_zu_wirk fällt monoton mit r — der gemessene Gleichstand
# (Verhältnis = 1) per Interpolation, np.interp braucht Aufsteigendes
r_gleich = np.interp(1.0, blind_zu_wirk[::-1], r_bw[::-1])
print(f"Gleichstand Blind = Wirk gemessen bei r = {r_gleich:.3f} λ "
      f"(Theorie: λ/2π = {1/k:.3f} λ)")
Abbildung 21.5: Das Verhältnis von Blind- zu Wirkleistung über dem Abstand, aus den komplexen DFT-Feldern des 3D-Laufs (Punkte), gegen die Theorie 1/(kr)³ (Linie). Nahe der Antenne überwiegt das Pendeln um ein Vielfaches, am Theorie-Punkt r = λ/2π herrscht Gleichstand (orangefarbenes Kreuz), weit draußen ist praktisch alle Leistung Wirkleistung auf dem Weg nach draußen. Die Messpunkte links von 0,2 λ heben sich sichtbar über die Kurve — so nah an der Quelle ist die eine Gitterzelle keine Punktquelle mehr; ganz rechts streuen sie, weil der winzige Imaginärteil im numerischen Rauschen versinkt.
Gleichstand Blind = Wirk gemessen bei r = 0.175 λ (Theorie: λ/2π = 0.159 λ)

Damit ist das Begriffspaar geerdet: Nahfeld heißt „die Blindleistung dominiert” — Energie schwappt zwischen Antenne und Umgebung, wie zwischen den Töpfen des Schwingkreises. Fernfeld heißt „die Wirkleistung dominiert” — die Energie ist unterwegs und kommt nicht wieder. Eine NFC-Karte und eine Ladespule arbeiten im Nahfeld (deshalb bricht die Verbindung nach Zentimetern ab: \(1/r^3\)-Felder!), dein WLAN im Fernfeld.

21.5 In welche Richtung? Das Strahlungsdiagramm

Bleibt die Richtungsfrage. Das Knick-Argument verspricht \(E_\perp \propto \sin\theta\), also Strahlungsleistung \(\propto \sin^2\theta\): null längs der Achse, maximal quer, dazwischen ein glatter Übergang — in 3D um die Achse rotiert ein Donut. Das prüfen wir mit dem Werkzeug aus Kapitel 14: Die Near-to-Far-Box, die im 3D-Lauf schon mitgelaufen ist, liefert das Fernfeld in jeder Wunschrichtung; wir tasten einen Kreis in der \(xz\)-Ebene ab (der „E-Ebene”: sie enthält die Dipolachse) und tragen die Leistungsdichte über dem Winkel \(\theta\) zur Achse auf.

Und weil eine echte Antenne kein Punkt ist, lassen wir den Halbwellendipol in 3D gegen den Hertz-Dipol antreten — die Bsp.-7-Geometrie aus dem Playground: zwei Metallzylinder, Länge zusammen \(0{,}5\lambda\), Drahtradius \(0{,}04\lambda\). Für ihn kennt die Lehrbuch-Theorie (dünner Draht, \(\cos\)-Strom) die E-Ebenen-Form \(\big[\cos(\tfrac{\pi}{2}\cos\theta)/ \sin\theta\big]^2\) — eine etwas schlankere Acht als \(\sin^2\theta\).

WichtigVorhersage-Punkt

Der Halbwellendipol ist \(\lambda/2\) groß statt punktförmig — sein Strom ist über den Draht verteilt. Bündelt das die Strahlung stärker oder schwächer als beim Punkt-Dipol? Überlege mit Kapitel 14: Was machte dort eine breitere Quelle (der Einzelspalt) mit ihrem Beugungsbild?

Der zweite 3D-Lauf ist deutlich billiger als der erste (gröberes Gitter reicht fürs Fernfeld — die Box mittelt ohnehin):

# von oben: n2f_box(), n2f_hertz, sim3 (3D-Lauf des Hertz-Dipols)
L3, SPALT3, R_DRAHT = 0.5, 0.08, 0.04
arm3 = L3 / 2 - SPALT3 / 2
zc3 = SPALT3 / 2 + arm3 / 2
sim4 = mp.Simulation(
    cell_size=mp.Vector3(6, 6, 6), boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(mp.GaussianSource(frequency=1.0, fwidth=0.3),
                       component=mp.Ez, center=mp.Vector3())],
    resolution=20,
    geometry=[mp.Cylinder(radius=R_DRAHT, height=arm3,
                          center=mp.Vector3(0, 0, +zc3),
                          material=mp.metal),
              mp.Cylinder(radius=R_DRAHT, height=arm3,
                          center=mp.Vector3(0, 0, -zc3),
                          material=mp.metal)],
    symmetries=[mp.Mirror(mp.X), mp.Mirror(mp.Y)])
n2f_l2 = n2f_box(sim4)
sim4.run(until_after_sources=mp.stop_when_fields_decayed(
    5, mp.Ez, mp.Vector3(), 1e-4))

def e_ebene(s, n2f, n_winkel=181):
    """Fernfeld-Leistungsdichte |S|(θ) auf einem Kreis in der xz-Ebene."""
    theta = np.linspace(0.001, np.pi - 0.001, n_winkel)
    S = np.empty(n_winkel)
    for i, t in enumerate(theta):
        ff = s.get_farfield(n2f, 1000.0 * mp.Vector3(np.sin(t), 0,
                                                     np.cos(t)))
        Ex, Ey, Ez, Hx, Hy, Hz = ff
        # zeitgemittelter Poynting-Vektor S = ½ Re(E × H*) (Kap. 18)
        Sx = 0.5 * np.real(Ey * np.conj(Hz) - Ez * np.conj(Hy))
        Sy = 0.5 * np.real(Ez * np.conj(Hx) - Ex * np.conj(Hz))
        Sz = 0.5 * np.real(Ex * np.conj(Hy) - Ey * np.conj(Hx))
        S[i] = np.sqrt(Sx**2 + Sy**2 + Sz**2)
    return theta, S

theta_h, S_hertz = e_ebene(sim3, n2f_hertz)
theta_l, S_l2 = e_ebene(sim4, n2f_l2)
print("Fernfeld auf je 181 Richtungen ausgewertet.")
Fernfeld auf je 181 Richtungen ausgewertet.
# von oben: theta_h, S_hertz, theta_l, S_l2
fig = plt.figure(figsize=(6.4, 5.4))
ax = fig.add_subplot(projection="polar")        # Polarbild (Kap. 11)
voll = np.concatenate([theta_h, 2 * np.pi - theta_h[::-1]])

def rundum(S):
    Sn = S / S.max()
    return np.concatenate([Sn, Sn[::-1]])

with np.errstate(divide="ignore", invalid="ignore"):
    theo_l2 = (np.cos(np.pi / 2 * np.cos(theta_l)) /
               np.sin(theta_l))**2
theo_l2 = theo_l2 / np.nanmax(theo_l2)

ax.plot(voll, rundum(S_l2), "b-", lw=2, label="Meep: λ/2-Dipol")
ax.plot(voll, np.concatenate([theo_l2, theo_l2[::-1]]), "r--", lw=1.3,
        label="Theorie λ/2-Dipol")
ax.plot(voll, rundum(S_hertz), "g-", lw=1.6, label="Meep: Hertz-Dipol")
ax.plot(voll, rundum(np.sin(theta_h)**2), "k:", lw=1.3,
        label=r"$\sin^2\theta$ (Knick-Argument)")
ax.set_theta_zero_location("N")
ax.set_title("E-Ebene: die „Acht“ — nichts längs der Achse", pad=18)
ax.legend(loc="lower right", bbox_to_anchor=(1.12, -0.14), fontsize=8)
plt.show()

abw = np.abs(S_hertz / S_hertz.max() - np.sin(theta_h)**2).max()
print(f"Hertz-Dipol: größte Abweichung von sin²θ = {abw:.3f}")
Abbildung 21.6: Das Strahlungsdiagramm in der E-Ebene (Polardiagramm; 0° = Antennenachse, die Antenne steht senkrecht im Bild). Der Hertz-Dipol (grün) trifft die sin²θ-Vorhersage des Knick-Arguments fast perfekt, der Halbwellendipol (blau) liegt auf der schlankeren λ/2-Theoriekurve (rot gestrichelt). Beide strahlen exakt nichts längs der Achse. In der H-Ebene (quer zur Antenne, hier nicht gezeigt) sind beide Diagramme perfekte Kreise — rundum gleich stark.
Hertz-Dipol: größte Abweichung von sin²θ = 0.012

Die Antwort auf den Vorhersage-Punkt: Die ausgedehnte Antenne bündelt stärker — ihre Acht ist schlanker. Wie in Kapitel 14 gilt: je größer die strahlende Struktur (in Wellenlängen), desto schärfer die Richtwirkung. Beim Sprung von „Punkt” auf \(\lambda/2\) ist der Effekt noch mild; Übung 21.3 dreht die Länge weiter auf und findet Überraschendes.

21.5.1 Eine Zahl für die Bündelung: Direktivität und dBi

Um Antennen zu vergleichen, presst man das ganze Diagramm in eine Zahl: die Direktivität \(D\) — wie viel stärker strahlt die Antenne in ihre beste Richtung als eine (hypothetische) Antenne, die dieselbe Leistung gleichmäßig in alle Richtungen verteilt?

\[D \;=\; \frac{4\pi\, S_{\text{max}}} {\displaystyle\oint S \, d\Omega} \;=\; \frac{S_{\text{max}}} {\big\langle S \big\rangle_{\text{Kugel}}}.\]

Das Integral über alle Richtungen haben wir komplett gemessen — unsere Diagramme sind rotationssymmetrisch um die Achse, also reicht ein gewichtetes Integral über \(\theta\):

# von oben: theta_h, S_hertz, theta_l, S_l2
def direktivitaet(theta, S):
    """D = 4π·S_max / ∮S dΩ; rotationssymmetrisch um die z-Achse:
    dΩ = 2π·sin(θ)dθ."""
    gesamt = 2 * np.pi * np.trapezoid(S * np.sin(theta), theta)
    return 4 * np.pi * S.max() / gesamt

D_hertz = direktivitaet(theta_h, S_hertz)
D_l2 = direktivitaet(theta_l, S_l2)
print(f"Hertz-Dipol: D = {D_hertz:.3f}{10*np.log10(D_hertz):.2f} dBi"
      "   (Theorie: 1,50 = 1,76 dBi)")
print(f"λ/2-Dipol:   D = {D_l2:.3f}{10*np.log10(D_l2):.2f} dBi"
      "   (Theorie dünner Draht: 1,64 = 2,15 dBi)")
Hertz-Dipol: D = 1.507  → 1.78 dBi   (Theorie: 1,50 = 1,76 dBi)
λ/2-Dipol:   D = 1.745  → 2.42 dBi   (Theorie dünner Draht: 1,64 = 2,15 dBi)

Der Hertz-Dipol landet praktisch exakt auf der Theorie. Der Halbwellendipol liegt ein paar Prozent über seinem Lehrbuchwert 1,64 — kein Messfehler, sondern Modell-Ehrlichkeit: Unser Meep-Draht ist mit \(0{,}04\lambda\) Radius dick (reale Antennendrähte: ein Zehntel davon) und hat einen breiten Speisespalt; seine Stromverteilung ist nicht das ideale \(\cos\)-Profil. Dass Meep dicke Stäbe gut kann und dünne Drähte schlecht, ist seit der Yagi-Fallgeschichte (Kapitel 11) ein vertrautes Thema.

Die Logarithmus-Schreibweise \(10\log_{10} D\) mit der Einheit dBi („Dezibel über isotrop”) ist die Verkehrssprache der Antennentechnik — und sie löst rückwirkend ein Rätsel aus Kapitel 11: Die NEC-Yagi hatte „8,9 dBi”. Jetzt kannst du das lesen: \(10^{0{,}89} \approx 7{,}8\)-mal stärker in Hauptrichtung als der isotrope Vergleichsstrahler, also noch \(7{,}8/1{,}64 \approx 4{,}8\)-mal stärker als der Dipol, aus dem sie gebaut ist.

Antenne \(D\) dBi
isotroper Strahler (Rechengröße) \(1\) \(0\)
Hertz-Dipol (punktförmig) \(1{,}5\) \(1{,}76\)
Halbwellendipol \(1{,}64\) \(2{,}15\)
Yagi aus Kapitel 11 (NEC) \(\approx 7{,}8\) \(8{,}9\)

Wie hängt die Diagrammform an der Antennenlänge? Für einen mittengespeisten Draht der Länge \(L\) mit idealer Stehwellen-Stromverteilung kennt die Theorie die geschlossene Formel

\[P(\theta) \;\propto\; \left[\frac{\cos\!\big(\tfrac{kL}{2} \cos\theta\big) - \cos\!\big(\tfrac{kL}{2}\big)} {\sin\theta}\right]^2 .\]

Damit kannst du spielen, ohne Meep zu starten. Sage vorher: Was passiert bei L_LAMBDA = 1.0? Und — Vorhersage-Punkt — was bei L_LAMBDA = 1.5: wird die Acht noch schlanker, oder passiert etwas qualitativ Neues? (Tipp: Bei \(L > \lambda\) passen Stromabschnitte mit entgegengesetztem Vorzeichen auf den Draht — denk an die gegenphasigen Quellen aus Übung 14.4.) Prüfe auch den Grenzfall L_LAMBDA = 0.05: Findest du das Knick-Ergebnis wieder?

21.6 Wie weit trägt das? Die Reichweitenrechnung

Zum Schluss lösen wir das Versprechen aus Kapitel 9 ein: das \(1/r\)-Gesetz als Reichweitenformel des Funks. Im Fernfeld fällt \(E\) wie \(1/r\), die Leistungsdichte \(S \propto E^2\) also wie \(1/r^2\) — dieselbe Leistung verteilt sich auf immer größere Kugelflächen. Mit Sendeleistung \(P\) und Direktivität \(D\) kommt in Hauptrichtung im Abstand \(r\) an:

\[S(r) \;=\; \frac{P \cdot D}{4\pi r^2}, \qquad E_0 \;=\; \sqrt{2\,Z_0\, S} \quad\text{mit } Z_0 = 377\ \Omega\ \text{(Kapitel 6)}.\]

Die Handrechnung zum WLAN-Router: \(P = 100\) mW, Dipolantenne (\(D = 1{,}64\)), Abstand \(r = 50\) m (Nachbarhaus). Erst die Leistungsdichte: \(S = 0{,}1 \cdot 1{,}64 / (4\pi \cdot 50^2) = 5{,}2\ \mu\)W/m². Dann das Feld: \(E_0 = \sqrt{2 \cdot 377 \cdot 5{,}2 \cdot 10^{-6}} = 63\) mV/m. Zum Vergleich: Sonnenlicht bringt \(1000\) W/m² (Kapitel 18) — das WLAN-Signal im Nachbarhaus ist zweihundert Millionen Mal dünner, und doch liest es dein Laptop mühelos, weil Empfänger Feldstärken bis hinunter zu Mikrovolt pro Meter verarbeiten. Funkstrecken funktionieren nicht, weil viel Leistung ankommt, sondern weil fast nichts schon reicht — und weil im Fernfeld eben nur \(1/r^2\) verloren geht, nicht \(e^{-r/\delta}\) wie in einem verlustbehafteten Medium (Kapitel 6) oder \(1/r^6\) wie bei den gebundenen Nahfeldern.

21.7 Das Kapitel-Programm

programme/kap21/kap21_strom_zur_welle.py bündelt die vier Experimente eigenständig: den 2D-Halbwellendipol mit der gemessenen Strom-Stehwelle (Bauch am Speisepunkt, \(\cos\)-Theorielinie samt der ehrlichen Blechstreifen-Abweichung), den 3D-Hertz-Dipol, dessen \(|E|(r)\)-Profil über anderthalb Dekaden auf der Hertz-Formel liegt (Fernast \(1/r\) äquatorial, \(1/r^2\) axial, Knie bei \(\lambda/2\pi\)), das Blind-zu-Wirk-Verhältnis \(\text{Im}(S)/\text{Re}(S) = 1/(kr)^3\) aus dem komplexen Poynting-Vektor (die Nahfeld-Fernfeld-Grenze bei \(\lambda/2\pi\)) und die near2far-Richtdiagramme (Hertz \(\sin^2\theta\) mit \(D = 1{,}53\); Halbwellendipol \(D = 1{,}74 \approx 2{,}4\) dBi). Laufzeit etwa vier Minuten — der 3D-Hertz-Lauf mit Auflösung 40 dominiert.

TippMerkkasten
  • Strahlung braucht Beschleunigung. Eine gestoßene Ladung hinterlässt eine mit \(c\) laufende Knick-Schale; reine Geometrie liefert \(E_\perp \propto a\sin\theta / r\) — einmal \(1/r\) statt \(1/r^2\), und die Schalenenergie kehrt nie zurück.
  • Die Antenne ist ein Resonator: Der Strom im Halbwellendipol ist eine stehende Welle (Bauch am Speisepunkt, Knoten an den offenen Enden), das Feld schnürt sich jede Halbschwingung als geschlossene Schleife ab.
  • Einmal abgelöst, ist die Welle autark — die Quelle kann sie weder zurückrufen noch löschen; ihre Nachricht hinkt mit \(c\) hinterher.
  • Nahfeld bis \(r \approx \lambda/2\pi\) (Blindleistung pendelt, Felder \(\propto 1/r^3\)), Fernfeld darüber (Wirkleistung reist, \(E \propto 1/r\), Blind/Wirk \(= 1/(kr)^3\)). Längs der Dipolachse wird nichts abgestrahlt: Diagramm \(\sin^2\theta\) (Punkt-Dipol).
  • Direktivität \(D = 4\pi S_{\text{max}}/\oint S\,d\Omega\), als \(10\log_{10}D\) in dBi; Leistungsdichte am Empfänger \(S = PD/4\pi r^2\).

Roter Faden

Dieses Kapitel hat geerntet, was lange gesät war: Das statische Dipolfeld aus Kapitel 3 wurde zum \(1/r^3\)-Erdgeschoss der Hertz-Formel, die Retardierung aus Kapitel 20 zum Motor des Knick-Arguments, die stehende Welle aus Kapitel 6 zur Stromverteilung im Draht, der Verschiebungsstrom aus Kapitel 3 zur Erklärung, warum der Antennenstrom am Drahtende nicht endet, sondern ins Feld wechselt. Der Poynting-Vektor aus Kapitel 18 bekam seine komplexe Schwester (Blind- und Wirkleistung), das Near-to-Far aus Kapitel 14 seine geschlossene 3D-Box, das Dipol-Argument aus Kapitel 13 seine vermessene Keule, und die 2D-Ringwelle aus Kapitel 9 ihren 3D-Gegenspieler mit echtem \(1/r\). Nach vorn: Kapitel 22 fragt, wie die Leistung verlustfrei vom Sender zum Speisepunkt kommt (Leitungen, Reflexion, 50 Ω), Kapitel 23 schaltet viele Dipole zum schwenkbaren Array zusammen, Kapitel 24 baut aus passiven Nachbarstäben die Yagi mit Bauplan, und Kapitel 25 rechnet aus, warum die 955-km-Zeile der Nahfeld-Tabelle das 50-Hz-Netz endgültig vom Funken freispricht.

Übungen

Ü 21.1 (Verstehen). (a) Ein Gleichstrom fließt durch einen langen geraden Draht. Die Elektronen bewegen sich — warum strahlt der Draht trotzdem nicht? Argumentiere mit dem Knick. (b) Und warum strahlt derselbe Draht doch ein winziges bisschen, wenn man den Strom einschaltet? (c) Berechne die Nahfeldgrenze \(\lambda/2\pi\) für dein Induktionskochfeld (arbeitet bei etwa \(25\) kHz) und entscheide: Ist der Topf im Nah- oder Fernfeld?

  1. Gleichförmig driftende Ladungen tragen ihr Feld mit — ohne Beschleunigung kein Knick, keine Schale, kein \(1/r\)-Anteil. (Genauer mit Kapitel 2: Ein konstanter Strom macht ein konstantes Magnetfeld, \(\partial \vec B/\partial t = 0\), also wird kein E-Feld induziert — die Selbsterhaltungs-Kette der Welle startet nie.)
  2. Beim Einschalten werden die Ladungen beschleunigt — genau einmal läuft eine Knick-Schale davon. Jeder Schaltvorgang funkt; deshalb knackt ein altes Radio, wenn der Kühlschrank anspringt.
  3. Der Code rechnet:
C_LICHT = 3e8
f = 25e3
grenze = C_LICHT / (2 * np.pi * f)
print(f"lambda = {C_LICHT/f/1000:.0f} km, "
      f"Nahfeldgrenze = {grenze/1000:.1f} km")
lambda = 12 km, Nahfeldgrenze = 1.9 km

Die Nahfeldgrenze liegt bei fast zwei Kilometern — der Topf (20 cm) sitzt im tiefsten Nahfeld. Induktives Kochen und induktives Laden sind reine Nahfeld-Kopplungen: gebundenes Feld, keine Abstrahlung in nennenswerter Menge.

Ü 21.2 (Verstehen/Rechnen). (a) Warum ist das Strahlungsdiagramm in der H-Ebene (quer zur Antenne) ein perfekter Kreis? Ein Satz mit dem Knick-Argument genügt. (b) Ein UKW-Sender strahlt \(P = 100\) kW über eine Antenne mit \(D = 5\) ab. Wie groß sind Leistungsdichte und Feldstärke \(E_0\) in \(50\) km Entfernung — und wie viele Größenordnungen liegt das über der Empfindlichkeit eines Autoradios (\(\approx 1\ \mu\)V/m)?

  1. Quer zur Achse gesehen ist die Querbewegung der Ladungen aus jeder Richtung gleich gut sichtbar (\(\theta = 90°\) rundum) — der Knick ist in der ganzen Ebene gleich stark, das Diagramm ein Kreis.
Z0 = 377.0
P, D, r = 100e3, 5.0, 50e3
S = P * D / (4 * np.pi * r**2)
E0 = np.sqrt(2 * Z0 * S)
print(f"S = {S*1e6:.0f} µW/m², E0 = {E0*1000:.0f} mV/m")
print(f"über Autoradio-Schwelle: Faktor {E0/1e-6:.0e}")
S = 16 µW/m², E0 = 110 mV/m
über Autoradio-Schwelle: Faktor 1e+05

Rund \(16\ \mu\)W/m² und \(110\) mV/m — gut fünf Größenordnungen über der Schwelle. Deshalb klingt UKW auch hinter Bergen und in Tiefgaragen noch: Es ist Reserve für viele Reflexions- und Beugungsverluste da.

Ü 21.3 (Verändern). Verlängere den 3D-Dipol im Richtdiagramm-Lauf auf \(L = 1{,}5\,\lambda\) (passe arm3 und zc3 an; die Near-to-Far-Box umschließt mit \(b = 1{,}6\) auch diesen Draht noch). Sage mit der Spielwiesen-Formel vorher, wie das Diagramm aussieht, und vergleiche dann Meep gegen die Theoriekurve. Was ist aus der „Acht” geworden — und warum ist „länger = stärker gebündelt” ab \(L > \lambda\) falsch?

Auf einem \(1{,}5\lambda\)-Draht passen Stromabschnitte mit entgegengesetztem Vorzeichen (die Stehwelle wechselt alle \(\lambda/2\) das Vorzeichen). Die Teilströme interferieren wie gegenphasige Quellen (Ü 14.4): Quer zur Achse löschen sie sich teilweise aus, schräg addieren sie sich — die Acht zerfällt in ein Kleeblatt mit schrägen Hauptkeulen.

# von oben: n2f_box(), e_ebene(), direktivitaet() (Kapiteltext)
L_LANG = 1.5
arm_u = L_LANG / 2 - SPALT3 / 2
zc_u = SPALT3 / 2 + arm_u / 2
sim_u = mp.Simulation(
    cell_size=mp.Vector3(6, 6, 6), boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(mp.GaussianSource(frequency=1.0, fwidth=0.3),
                       component=mp.Ez, center=mp.Vector3())],
    resolution=20,
    geometry=[mp.Cylinder(radius=R_DRAHT, height=arm_u,
                          center=mp.Vector3(0, 0, +zc_u),
                          material=mp.metal),
              mp.Cylinder(radius=R_DRAHT, height=arm_u,
                          center=mp.Vector3(0, 0, -zc_u),
                          material=mp.metal)],
    symmetries=[mp.Mirror(mp.X), mp.Mirror(mp.Y)])
n2f_u = n2f_box(sim_u)
sim_u.run(until_after_sources=mp.stop_when_fields_decayed(
    5, mp.Ez, mp.Vector3(0.3, 0, 0.5), 1e-4))
theta_u, S_u = e_ebene(sim_u, n2f_u)

kL2 = np.pi * L_LANG
theo_u = ((np.cos(kL2 * np.cos(theta_u)) - np.cos(kL2)) /
          np.sin(theta_u))**2
fig = plt.figure(figsize=(6.0, 5.0))
ax = fig.add_subplot(projection="polar")
voll = np.concatenate([theta_u, 2 * np.pi - theta_u[::-1]])
Sn = S_u / S_u.max(); Tn = theo_u / theo_u.max()
ax.plot(voll, np.concatenate([Sn, Sn[::-1]]), "b-", lw=2,
        label="Meep, L = 1,5 λ")
ax.plot(voll, np.concatenate([Tn, Tn[::-1]]), "r--", lw=1.3,
        label="Stehwellen-Theorie")
ax.set_theta_zero_location("N")
ax.set_title("Aus der Acht wird ein Kleeblatt", pad=18)
ax.legend(loc="lower right", bbox_to_anchor=(1.12, -0.12), fontsize=8)
plt.show()
i_max = np.argmax(S_u[:len(S_u)//2])
print(f"Hauptkeule bei θ ≈ {np.degrees(theta_u[i_max]):.0f}° "
      "zur Achse (Theorie: 42,6°)")

Hauptkeule bei θ ≈ 51° zur Achse (Theorie: 42,6°)

Meep bestätigt das Kleeblatt — vier Keulen, Nullstellen längs der Achse und ein Einbruch quer dazu. Die gemessene Hauptkeule liegt allerdings rund acht Grad steiler als die Dünndraht-Theorie: wieder der dicke Stab, dessen Stromverteilung nicht das ideale Stehwellen-Profil ist (wie schon bei der Direktivität des Halbwellendipols). „Mehr Draht” bündelt jedenfalls nur, solange der Strom überall gleichphasig schwingt — darüber zerlegt Interferenz die Keule. Wer wirklich bündeln will, schaltet viele getrennt gespeiste Dipole zusammen: Kapitel 23.

Ü 21.4 (Übertragen). Die Antenne im Auto(dach) ist oft nur ein Stab — ein Monopol über einer Metallfläche. Simuliere in der 2D-Welt des Kapitels einen einzelnen \(0{,}22\lambda\)-Arm senkrecht auf einem PEC-Boden (ein Metallblock als Boden, Quelle im Fußpunkt) und vergleiche das Feldbild der oberen Halbebene mit dem des Dipols. Erkläre den Befund mit einem Spiegelbild-Argument — und damit, warum die Karosserie zur Antenne gehört.

Der PEC-Boden erzwingt \(E_\parallel = 0\) — dieselbe Randbedingung, die ein Spiegelbild des Arms samt gespiegeltem Strom erfüllen würde (Kapitel 6: die PEC-Wand als Spiegel). Für die obere Halbebene ist der Monopol über Blech daher exakt äquivalent zum vollen Dipol; der Boden liefert den fehlenden Arm gratis.

# von oben: DRAHT_B, SPALT, AUFL, Ey_t (Kapiteltext, 2D-Dipol-Lauf)
boden_und_arm = [
    mp.Block(size=mp.Vector3(mp.inf, 2.0, mp.inf),
             center=mp.Vector3(0, -1.0 - SPALT / 2),
             material=mp.metal),
    mp.Block(size=mp.Vector3(DRAHT_B, 0.22, mp.inf),
             center=mp.Vector3(0, SPALT / 2 + 0.11),
             material=mp.metal),
]
sim_m = mp.Simulation(
    cell_size=mp.Vector3(8.0, 8.0), boundary_layers=[mp.PML(1.0)],
    sources=[mp.Source(mp.ContinuousSource(frequency=1.0, width=1.0),
                       component=mp.Ey, center=mp.Vector3())],
    resolution=AUFL, geometry=boden_und_arm)
mono_bilder = []
sim_m.run(until=20.0)
sim_m.run(mp.at_every(1.0 / 16.0,
                      lambda s: mono_bilder.append(
                          s.get_array(component=mp.Ey))), until=1.0)
ey_mono = np.array(mono_bilder)[:16]

fig, (a1, a2) = plt.subplots(1, 2, figsize=(7.3, 3.7))
x8 = np.linspace(-4, 4, ey_mono.shape[1])
# Schnappschüsse zur gleichen Quellenphase (letztes Bild beider Läufe)
for ax, feld, titel in ((a1, Ey_t[15], "Dipol (frei)"),
                        (a2, ey_mono[15], "Monopol über PEC-Boden")):
    g = np.arcsinh(feld / (np.abs(feld).max() / 30))
    ax.imshow(g.T, origin="lower", cmap="RdBu",
              extent=[-4, 4, -4, 4],
              vmin=-np.abs(g).max(), vmax=np.abs(g).max())
    ax.set_title(titel); ax.set_xlabel("x (λ)")
a2.axhline(-SPALT / 2, color="gray", lw=1.0)   # Bodenoberkante
a1.set_ylabel("y (λ)")
fig.tight_layout()
plt.show()

# quantitativ und phasenunabhängig: Amplituden-Profile (Maximum über
# die Periode) auf der Linie y = 1 oberhalb des Bodens
iy1 = np.argmin(np.abs(x8 - 1.0))
p_d = np.max(np.abs(Ey_t[:, :, iy1]), axis=0)
p_m = np.max(np.abs(ey_mono[:, :, iy1]), axis=0)
p_d, p_m = p_d / p_d.max(), p_m / p_m.max()
print("mittlere Amplituden-Abweichung auf der Linie y = 1: "
      f"{np.mean(np.abs(p_d - p_m)):.3f} (normiert)")

mittlere Amplituden-Abweichung auf der Linie y = 1: 0.016 (normiert)

Oberhalb des Bodens stimmen die Feldbilder bis auf wenige Prozent überein (unterhalb ist beim Monopol naturgemäß nichts). Praktisch heißt das: Autodach, Blechgehäuse oder die Massefläche einer Platine sind die halbe Antenne. Ein \(\lambda/4\)-Stab über gutem Blech funkt wie ein \(\lambda/2\)-Dipol — und ein schlechter Massekontakt ist der häufigste Grund, warum eine Antenne „nicht geht”.

Das Kleingedruckte

Warum die Punktquelle ein perfekter Hertz-Dipol ist. Meeps \(E_z\)-Punktquelle ist ein erzwungener Strom \(J_z\) in einer einzigen Gitterzelle — buchstäblich ein „Stromelement \(I\,dl\)“, das Objekt, für das die Hertz-Lösung gilt. Deshalb trifft sie \(\sin^2\theta\) und \(D = 1{,}5\) so präzise, während der ausgedehnte Stab-Dipol von seiner Lehrbuchkurve leicht abweicht: Nicht die Theorie ist unscharf, sondern „dünner Draht mit \(\cos\)-Strom” ist für dicke Stäbe das falsche Modell. Erst nahe der Quelle (innerhalb weniger Zellen) endet die Punkt-Idylle — eine Zelle ist dort eben doch kein Punkt, weshalb unsere Profil-Messpunkte erst bei \(0{,}2\lambda\) beginnen.

Der Strahlungswiderstand wartet in Kapitel 25. Von der Schaltungsseite gesehen „verbraucht” die Antenne Leistung wie ein Widerstand — die abgestrahlte Leistung pro Speisestrom-Quadrat heißt Strahlungswiderstand (beim \(\lambda/2\)-Dipol etwa \(73\ \Omega\), eine der berühmtesten Zahlen der Funktechnik und der halbe Grund für „\(50\ \Omega\)“, Kapitel 22). Für die elektrisch kleine Antenne bricht er wie \((l/\lambda)^2\) ein — das ist dann das quantitative Ende der 50-Hz-Funk-Frage.

Hertz’ Funkenstrecke. Hertz erzeugte seine Hochfrequenz 1886 mit Funkenentladungen — jeder Funke ein Stromstoß, also genau der „Knick” vom Kapitelanfang, nur tausendfach wiederholt. Sein Empfänger war ein Drahtring mit winziger Funkenstrecke, abgelesen im Dunkeln mit der Lupe. Die Messungen (stehende Wellen im Hörsaal, Reflexion, Polarisation, Brechung an einem Asphalt-Prisma) bestätigten Maxwells Theorie zwanzig Jahre nach ihrer Veröffentlichung — und Marconi machte aus dem „nutzlosen” Hörsaalversuch binnen zehn Jahren die Funktelegrafie.