import numpy as np
import matplotlib.pyplot as plt24 Fallstudie Yagi: Entwurf, Validierung, Bauplan
Das Starlink-Panel aus Kapitel 23 bündelt seinen Strahl mit rund 1500 gespeisten Elementen, ebenso vielen Phasenstellern und einem Rechner, der den Zündplan tausendmal pro Sekunde nachführt. Auf Millionen Dächern steht seit siebzig Jahren eine Antenne, die fast dasselbe leistet — mit einem einzigen Kabel: die Yagi-Uda-Antenne, die klassische Fernseh- und WLAN-Richtantenne. Ein gespeister Dipol, dahinter ein Stab, davor ein paar kürzere Stäbe. Die Stäbe hängen an nichts; sie sind einfach Metall im Raum. Und trotzdem wirft die Antenne fast ihre gesamte Leistung nach vorn.
Wie bringt man tote Metallstäbe dazu, im Takt mitzusenden — und zwar mit genau den richtigen Phasen? Die Antwort macht aus diesem Kapitel das Gegenstück zu Kapitel 23: Die Yagi ist der Zündplan ohne Kabel. Und weil ihre Erfindung so gut dokumentiert ist wie ihre Fallstricke (Kapitel 11 hat die Geschichte unserer eigenen Irrwege erzählt), eignet sie sich wie kein zweites Gerät für eine komplette Fallstudie: vom Wirkprinzip über den rechnerischen Entwurf und seine Vertrauensgrenzen bis zur Stückliste mit Millimetermaßen, die du wirklich bauen kannst.
Lernziele
Nach diesem Kapitel kannst du …
- … das Endfire-Rezept aus der Kapitel-23-Werkzeugkiste herleiten (zwei Quellen, \(d = \lambda/4\), \(\Delta\Phi = 90°\) → Kardioide mit exakter Rückwärts-Null),
- … erklären, woher ein passives Element seine Phase nimmt: Es ist ein getriebener Resonator — länger als die Resonanz heißt induktiv (Reflektor), kürzer heißt kapazitiv (Direktor) — und du kannst den Umschlag in NEC nachmessen,
- … eine Mehrelement-Yagi schrittweise entwerfen (Aufbau- Reihe, Direktorenkette nachstimmen) und die Faustregeln begründen,
- … die Vertrauensgrenzen der Rechnung benennen (Segmentierung mit Gültigkeitsfenster, robuste vs. empfindliche Größen, Querrechnung) und die Konsequenz für den Bau ziehen (Abgleich einplanen),
- … Bandbreite und SWR der Yagi messen, ihr abruptes Kippen oberhalb der Entwurfsfrequenz erklären und die Anpass-Optionen aus Kapitel 22 zuordnen.
24.1 Endfire: die Keule längs der Reihe
Kapitel 23 hat die Keule quer zur Strahlerreihe geschwenkt („Breitseite”). Eine Yagi strahlt aber längs ihres Booms — in der Arraysprache: Endfire. Auch dafür liefert „Umweg = Vorsprung” das Rezept, und es ist so hübsch, dass es eine Handrechnung verdient.
Nimm zwei Strahler im Abstand \(d = \lambda/4\) hintereinander, und lass den vorderen um \(\Delta\Phi = 90°\) später zünden. Nach vorn ist der vordere Strahler um \(\lambda/4\) voraus — sein Zeitrückstand von einer Viertelperiode gleicht das exakt aus: volle Verstärkung. Nach hinten addieren sich dagegen Wegrückstand (\(\lambda/4\)) und Zeitrückstand (nochmal \(\lambda/4\)) zu einer halben Wellenlänge: exakte Auslöschung. Eine Richtung bekommt alles, die Gegenrichtung nichts:
# von oben: nichts — zwei Zeiger genügen (Kap.-23-Rechenwerk)
phi = np.linspace(0, 2 * np.pi, 3600, endpoint=False)
kd = 2 * np.pi * 0.25 # Abstand λ/4
# Element 2 sitzt vorn und zündet 90° später:
P = np.abs(1 + np.exp(1j * (kd * np.cos(phi) - np.pi / 2))) ** 2
print(f"vorn (0°): {P[0]:.3f} (Maximum 4 = doppelte Amplitude)")
print(f"hinten (180°): {P[1800]:.2e} — exakte Null")vorn (0°): 4.000 (Maximum 4 = doppelte Amplitude)
hinten (180°): 1.50e-32 — exakte Null
# von oben: phi, P
fig = plt.figure(figsize=(5.2, 4.8))
ax = fig.add_subplot(projection="polar")
ax.plot(phi, P / P.max(), "b-", lw=2)
ax.set_theta_zero_location("E")
ax.set_title("Endfire-Paar: die Kardioide\n(0° = vorn, Strahlrichtung)",
fontsize=10)
plt.show()
Genau dieses Rezept steckt im Herzen jeder Yagi. Aber als Phased Array gebaut bräuchte es zwei Speiseleitungen, einen Leistungsteiler und einen 90°-Phasenschieber — bei 2,4 GHz alles Präzisionsarbeit (Kapitel 22 lässt grüßen). Die geniale Abkürzung von Shintaro Uda und Hidetsugu Yagi (1926): Die zweite Quelle gibt es gratis. Man stellt einfach einen unbeschalteten Metallstab in das Feld des gespeisten Dipols.
Bevor wir klären, wie der Stab zu seiner Phase kommt — hier die Spielwiese zum Endfire-Rezept. Sage vorher: Was passiert bei D_LAMBDA = 0.5, DPHI_GRAD = 180? (Rechne: Umweg \(\lambda/2\) nach vorn und hinten plus halbe Periode Zeitversatz …) Und findest du eine zweite Kombination mit exakter Rückwärts-Null? (Bedingung: \(k d + \Delta\Phi = 180°\) — es gibt unendlich viele.)
24.2 Woher die Phase kommt: der getriebene Resonator
Der Stab ist ein Resonator — das wissen wir seit Kapitel 21: Ein Dipol der Länge \(\approx \lambda/2\) trägt eine Strom-Stehwelle, wie ein Schwingkreis aus verteiltem \(L\) und \(C\) (Kapitel 19). Das Feld des gespeisten Elements wirkt auf ihn wie der Antrieb auf einen Oszillator. Und für getriebene Oszillatoren kennen wir die Regel aus Kapitel 15 und 19: Die Phase der Antwort hängt an der Verstimmung.
- Ist der Stab länger als seine Resonanzlänge, reagiert er induktiv — sein Strom eilt der antreibenden Spannung nach.
- Ist er kürzer, reagiert er kapazitiv — der Strom eilt vor.
- Genau auf Resonanz ist die Antwort am stärksten und in Phase.
Ein paar Prozent Längenunterschied verschieben die Stromphase um Jahrzehnte von Grad — das ist der eingebaute Phasenknopf. Zusammen mit der Laufzeit über den Elementabstand entsteht so (in grober Näherung) das Endfire-Paar von oben: Der Reflektor hinter dem Dipol ist zu lang geraten, der Direktor davor zu kurz — beide Verstimmungen drehen die Phase jeweils in die Richtung, die die Abstrahlung nach vorn sortiert.
Wie groß die Effekte wirklich sind, rechnet kein Daumenargument — dafür holen wir NEC aus Kapitel 11 zurück, das Werkzeug für Drahtantennen. Zuerst die Resonanzlänge selbst. Der Versuchsaufbau: Frage: Bei welcher Länge ist ein einzelner Drahtdipol (Radius 1 mm, frei im Raum, 2450 MHz) resonant — und wie reagiert er daneben? Messgröße: die Eingangsimpedanz \(Z = R + \mathrm{j}X\) für Längen von \(0{,}42\) bis \(0{,}52\,\lambda\); die Resonanz ist der Nulldurchgang des Blindanteils \(X\). Erfolgskriterium: ein sauberer Vorzeichenwechsel von kapazitiv (\(X < 0\)) zu induktiv (\(X > 0\)), deutlich unterhalb der idealen \(0{,}5\,\lambda\) (der Endeffekt — die Dickdraht-Lektion aus Kapitel 21 in Zahlen).
# von oben: nichts Neues — NEC-Bausteine wie in Kap. 11
import necpp
C_LICHT = 299792458.0
F_MHZ = 2450.0
LAM = C_LICHT / (F_MHZ * 1e6) # ≈ 0,122 m
R_DRAHT = 0.001 # 1 mm Drahtradius
SEG = 11 # Segmente pro Element
def dipol_z(l_lambda, seg=SEG):
"""Eingangsimpedanz eines mittengespeisten Einzeldipols."""
ctx = necpp.nec_create()
halb = l_lambda * LAM / 2
necpp.nec_wire(ctx, 1, seg, 0, -halb, 0, 0, halb, 0,
R_DRAHT, 1.0, 1.0)
necpp.nec_geometry_complete(ctx, 0)
necpp.nec_fr_card(ctx, 0, 1, F_MHZ, 0)
necpp.nec_ex_card(ctx, 0, 1, (seg + 1) // 2, 0, 1.0, 0, 0, 0, 0, 0)
# ein Mini-Richtdiagramm (3 Punkte) stößt die Rechnung an
necpp.nec_rp_card(ctx, 0, 1, 3, 0, 5, 0, 0, 90.0, 0.0, 0.0,
180.0, 0.0, 0.0)
z = complex(necpp.nec_impedance_real(ctx, 0),
necpp.nec_impedance_imag(ctx, 0))
necpp.nec_delete(ctx)
return z
laengen = np.arange(0.42, 0.521, 0.01)
z_reihe = np.array([dipol_z(L) for L in laengen])
# Nulldurchgang von X linear interpolieren
X = z_reihe.imag
i = np.flatnonzero(np.diff(np.sign(X)))[0]
L_res = laengen[i] - X[i] * 0.01 / (X[i + 1] - X[i])
print(f"Resonanz: X = 0 bei L = {L_res:.4f} λ "
f"(ideal dünner Draht: 0,5 λ)")Resonanz: X = 0 bei L = 0.4522 λ (ideal dünner Draht: 0,5 λ)
# von oben: laengen, z_reihe, L_res
fig, (a1, a2) = plt.subplots(1, 2, figsize=(7.4, 3.6))
a1.plot(laengen, z_reihe.imag, "bo-")
a1.axhline(0, color="0.6", lw=1)
a1.axvline(L_res, color="tab:red", ls="--", lw=1.2,
label=f"Resonanz {L_res:.3f} λ")
a1.set_xlabel("Dipollänge (λ)")
a1.set_ylabel("Blindanteil X (Ω)")
a1.set_title("kapazitiv ↔ induktiv", fontsize=10)
a1.legend(fontsize=8)
phase = np.degrees(np.arctan2(-z_reihe.imag, z_reihe.real))
a2.plot(laengen, phase, "go-")
a2.axhline(0, color="0.6", lw=1)
a2.axvline(L_res, color="tab:red", ls="--", lw=1.2)
a2.set_xlabel("Dipollänge (λ)")
a2.set_ylabel("Stromphase (°)")
a2.set_title("der eingebaute Phasenknopf", fontsize=10)
fig.tight_layout()
plt.show()
Zwei Befunde nimmt der Entwurf gleich mit. Erstens liegt die Resonanz bei \(0{,}452\,\lambda\), fast zehn Prozent unter dem Ideal \(\lambda/2\) — der Endeffekt: An den Stabenden staut sich Ladung, das wirkt wie eine Zusatzkapazität und verkürzt die Resonanzlänge, und zwar umso stärker, je dicker der Draht (unsere 1-mm-Stäbe sind elektrisch „dick”). Wer einen Dipol nach der reinen \(\lambda/2\)-Formel sägt, baut ihn zu lang. Zweitens: Die Phasenkurve rechts ist steil — der Knopf ist empfindlich. Das erklärt vorab, warum Yagis auf Millimeterfehler reagieren werden.
24.3 Die Umschaltkarte: kurz führt, lang wirft zurück
Jetzt das Kernexperiment des Kapitels. Der Versuchsaufbau: Frage: Macht die Verstimmung den Parasiten wirklich zum Direktor oder Reflektor — und wo genau schaltet es um? Bühne: der gespeiste Dipol (\(0{,}473\,\lambda\)) bei \(x = 0\); ein passiver Stab im Abstand \(0{,}15\,\lambda\) hinter ihm (bei \(-x\)); „vorn” ist \(+x\). Messgrößen: der Gewinn nach vorn und nach hinten, während die Parasitlänge von \(0{,}40\) bis \(0{,}56\,\lambda\) wächst (NEC kann uns die Ströme im Stab nicht direkt verraten — das Fernfeld ist die ehrliche Messgröße). Erfolgskriterium: ein Vorzeichenwechsel der Differenz „vorn minus hinten” in der Nähe der eben gemessenen Resonanzlänge.
Vorhersage-Punkt (PRIMM): Der Stab steht hinter dem Dipol. Wenn er kurz (kapazitiv) ist — zeigt die Keule dann nach vorn oder nach hinten? Beachte: „Direktor” heißt, die Keule zeigt zum Stab hin.
# von oben: dipol_z()-Bausteine, LAM, R_DRAHT, SEG, F_MHZ, necpp
def yagi(design, f_mhz=F_MHZ, seg=SEG, npts=73, driven_tag=2):
"""Drahtreihe (Position in λ, Länge in λ) → (Azimut-dBi, Z).
Element Nummer driven_tag wird in der Mitte gespeist, alle
anderen sind blanke Stäbe. Azimut: 0° = +x (vorn).
"""
ctx = necpp.nec_create()
for i, (xpos, laenge) in enumerate(design):
x, halb = xpos * LAM, laenge * LAM / 2
necpp.nec_wire(ctx, i + 1, seg, x, -halb, 0, x, halb, 0,
R_DRAHT, 1.0, 1.0)
necpp.nec_geometry_complete(ctx, 0)
necpp.nec_fr_card(ctx, 0, 1, float(f_mhz), 0)
necpp.nec_ex_card(ctx, 0, driven_tag, (seg + 1) // 2, 0,
1.0, 0, 0, 0, 0, 0)
necpp.nec_rp_card(ctx, 0, 1, npts, 0, 5, 0, 0, 90.0, 0.0, 0.0,
360.0 / (npts - 1), 0.0, 0.0)
az = np.array([necpp.nec_gain(ctx, 0, 0, j) for j in range(npts)])
z = complex(necpp.nec_impedance_real(ctx, 0),
necpp.nec_impedance_imag(ctx, 0))
necpp.nec_delete(ctx)
return az, z
ABSTAND = 0.15
l_parasit = np.arange(0.40, 0.561, 0.01)
vorn_minus_hinten = []
for L in l_parasit:
az, _ = yagi([(0.0, 0.473), (-ABSTAND, L)], npts=3, driven_tag=1)
vorn_minus_hinten.append(az[0] - az[1]) # 0° minus 180°
vorn_minus_hinten = np.array(vorn_minus_hinten)
i = np.flatnonzero(np.diff(np.sign(vorn_minus_hinten)))[0]
L_um = l_parasit[i] - vorn_minus_hinten[i] * 0.01 \
/ (vorn_minus_hinten[i + 1] - vorn_minus_hinten[i])
print(f"Umschlag bei L = {L_um:.3f} λ "
f"(Einzelresonanz: {L_res:.3f} λ)")Umschlag bei L = 0.437 λ (Einzelresonanz: 0.452 λ)
# von oben: l_parasit, vorn_minus_hinten, L_res, L_um
fig, ax = plt.subplots(figsize=(7.0, 4.2))
ax.plot(l_parasit, vorn_minus_hinten, "bo-", lw=1.4)
ax.axhline(0, color="0.6", lw=1)
ax.axvline(L_res, color="tab:red", ls="--", lw=1.2,
label=f"Einzelresonanz {L_res:.3f} λ")
ax.annotate("kurz = kapazitiv:\nKeule ZUM Stab (Direktor)",
xy=(0.405, -6), fontsize=9, color="tab:blue")
ax.annotate("lang = induktiv:\nKeule WEG vom Stab (Reflektor)",
xy=(0.49, 3), fontsize=9, color="tab:blue")
ax.set_xlabel("Parasitlänge (λ)")
ax.set_ylabel("Gewinn vorn − hinten (dB)")
ax.set_title("Ein Stab, zwei Berufe — die Sägelänge entscheidet")
ax.legend(loc="lower right", fontsize=9)
plt.show()
Die Antwort auf den Vorhersage-Punkt: Der kurze Stab hinter dem Dipol zieht die Keule nach hinten, zu sich hin — er wirkt als Direktor; erst der lange Stab wirft sie nach vorn. Damit ist die Bauanleitung der Yagi vollständig begründet: hinter den Dipol gehört ein langer Stab (Reflektor), vor ihn kurze (Direktoren). Und der Merksatz des Experiments: Kurz führt, lang wirft zurück. Sind versehentlich alle Stäbe zu lang, wirken alle als Reflektoren — die Keule kippt nach hinten (Übung 24.1 zeigt, dass genau das auch beim Betrieb auf zu hoher Frequenz passiert).
24.4 Das Feldbild: die Welle klettert die Leiter entlang
Bevor wir entwerfen, wollen wir den Mechanismus einmal sehen. Dafür wechseln wir kurz zu Meep in die 2D-Welt — mit der Warnung aus der Kapitel-11-Saga im Gepäck: Das 2D-Modell (Metallstreifen statt Drähte) zeigt das Prinzip wunderbar, aber seine Resonanzlänge liegt bei \(\sim 0{,}32\,\lambda\) — ein Artefakt der Flächenwelt. Diese Maße sind nicht baubar; gesägt wird später nach NEC.
Der Versuchsaufbau: Frage: Bündelt die Fünf-Streifen-Anordnung das Feld sichtbar nach vorn, und wie sieht die laufende Welle zwischen den Direktoren aus? Bühne: eine \(14\lambda \times 8\lambda\)-Zelle (1 λ PML); fünf Metallstreifen (Breite \(0{,}03\,\lambda\)) quer zur \(x\)-Achse: Reflektor (\(0{,}37\,\lambda\) lang) bei \(x = -0{,}2\), gespeister Streifen (\(0{,}32\,\lambda\), mit Speisespalt von 3 Gitterzellen — die Kapitel-21-Regel) bei \(x = 0\), drei Direktoren (\(0{,}27\,\lambda\)) davor. Quelle: Dauerstrich \(E_y\) im Spalt, komplexe Felder für Momentanbild und Film aus einem Lauf; die \(y\)-Spiegelsymmetrie (Phase \(-1\) für \(E_y\), Kapitel 21) halbiert die Rechenzeit. Messgrößen: das \(H_z\)-Feld (die natürliche Skalargröße dieser Polarisation) und als absoluter Gesundheitswert \(\max|H_z|\). Erfolgskriterium: sichtbare Bündelung nach vorn; quantitativ wird gleich danach das Fernfeld geprüft.
# von oben: nichts Neues — Meep-Bausteine aus Kap. 11/21/23
import meep as mp
mp.verbosity(0)
W_2D, GAP_2D, RES_2D = 0.03, 0.075, 40
# (x-Position, Länge, gespeist?) — 2D-Lern-Maße, NICHT baubar!
ELEMENTE_2D = [(-0.20, 0.37, False), (0.00, 0.32, True),
(0.28, 0.27, False), (0.56, 0.27, False),
(0.84, 0.27, False)]
def geometrie_2d():
g = []
for x, laenge, gespeist in ELEMENTE_2D:
if gespeist:
arm = laenge / 2 - GAP_2D / 2
yc = GAP_2D / 2 + arm / 2
for vorz in (+1, -1):
g.append(mp.Block(size=mp.Vector3(W_2D, arm, mp.inf),
center=mp.Vector3(x, vorz * yc),
material=mp.metal))
else:
g.append(mp.Block(size=mp.Vector3(W_2D, laenge, mp.inf),
center=mp.Vector3(x, 0),
material=mp.metal))
return g
sim2d = mp.Simulation(
cell_size=mp.Vector3(14, 8), boundary_layers=[mp.PML(1.0)],
sources=[mp.Source(mp.ContinuousSource(frequency=1.0, width=1.0),
component=mp.Ey, center=mp.Vector3())],
resolution=RES_2D, geometry=geometrie_2d(),
symmetries=[mp.Mirror(mp.Y, phase=-1)],
force_complex_fields=True)
sim2d.run(until=30)
hz = sim2d.get_array(center=mp.Vector3(), size=mp.Vector3(14, 8),
component=mp.Hz)# von oben: hz
print(f"Gesundheitscheck: max|Hz| = {np.abs(hz).max():.2f}")Gesundheitscheck: max|Hz| = 12.56
# von oben: hz, ELEMENTE_2D
fig, ax = plt.subplots(figsize=(7.4, 4.3))
re = np.real(hz).T
grenze = np.abs(re).max() * 0.35
ax.imshow(re, origin="lower", extent=(-7, 7, -4, 4), cmap="RdBu_r",
vmin=-grenze, vmax=grenze)
for x, laenge, _ in ELEMENTE_2D:
ax.plot([x, x], [-laenge / 2, laenge / 2], "k-", lw=2.5)
ax.annotate("Keule →", xy=(5.6, 3.2), fontsize=11)
ax.set_xlabel("x in λ (Reflektor links, Direktoren rechts)")
ax.set_ylabel("y in λ")
ax.set_title("Fünf Streifen, ein Kabel: das Feld wird nach vorn "
"sortiert")
plt.show()
Im Film sieht man, wie die Bündelung zustande kommt — eine Periode aus dem komplexen Feld, der \(\mathrm{Re}(H_z e^{-\mathrm{i}\varphi})\)-Trick aus Kapitel 23. Achte auf den Bereich zwischen den Direktoren: Die Welle läuft dort von Stab zu Stab nach rechts, als klettere sie eine Leiter hinauf — jeder Stab reicht sie mit passender Phase an den nächsten weiter. Hinter dem Reflektor dagegen tritt das Feld fast auf der Stelle.
Code der Animation (nur in der HTML-Fassung)
# von oben: hz, ELEMENTE_2D
from matplotlib import animation
from IPython.display import HTML
fig, ax = plt.subplots(figsize=(6.6, 3.9))
grenze = np.abs(hz).max() * 0.35
im = ax.imshow(np.real(hz).T, origin="lower", extent=(-7, 7, -4, 4),
cmap="RdBu_r", vmin=-grenze, vmax=grenze)
for x, laenge, _ in ELEMENTE_2D:
ax.plot([x, x], [-laenge / 2, laenge / 2], "k-", lw=2.5)
ax.set_xticks([]); ax.set_yticks([])
ax.set_title("Die Welle klettert die Direktorenleiter entlang")
phasen = np.linspace(0, 2 * np.pi, 16, endpoint=False)
def bild(i):
im.set_data(np.real(hz * np.exp(-1j * phasen[i])).T)
return [im]
anim = animation.FuncAnimation(fig, bild, frames=len(phasen),
interval=120)
plt.close(fig)
HTML(anim.to_jshtml(default_mode="loop"))Quantitativ bestätigt das Fernfeld die Bündelung — ein Puls-Lauf mit der near2far-Box (Kapitel 14/23), Erfolgsmaß ist das Vor/Rück-Verhältnis:
# von oben: geometrie_2d(), RES_2D
sim2d = mp.Simulation(
cell_size=mp.Vector3(14, 8), boundary_layers=[mp.PML(1.0)],
sources=[mp.Source(mp.GaussianSource(frequency=1.0, fwidth=0.3),
component=mp.Ey, center=mp.Vector3())],
resolution=RES_2D, geometry=geometrie_2d(),
symmetries=[mp.Mirror(mp.Y, phase=-1)])
b = 1.3
n2f_2d = sim2d.add_near2far(
1.0, 0, 1,
mp.Near2FarRegion(mp.Vector3(+b, 0), size=mp.Vector3(0, 2 * b)),
mp.Near2FarRegion(mp.Vector3(-b, 0), size=mp.Vector3(0, 2 * b),
weight=-1),
mp.Near2FarRegion(mp.Vector3(0, +b), size=mp.Vector3(2 * b, 0)),
mp.Near2FarRegion(mp.Vector3(0, -b), size=mp.Vector3(2 * b, 0),
weight=-1))
sim2d.run(until_after_sources=mp.stop_when_fields_decayed(
5, mp.Ey, mp.Vector3(), 1e-4))
def S_fern(dx, dy):
Ex, Ey, Ez, Hx, Hy, Hz = sim2d.get_farfield(
n2f_2d, mp.Vector3(1000.0 * dx, 1000.0 * dy))
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))
return np.hypot(Sx, Sy)
fb_2d = 10 * np.log10(S_fern(1, 0) / S_fern(-1, 0))
print(f"2D-Yagi: Vor/Rück-Verhältnis = {fb_2d:+.1f} dB")2D-Yagi: Vor/Rück-Verhältnis = +9.8 dB
Knapp zehn Dezibel mit fünf Streifen und einem Kabel — das Prinzip steht. Jetzt der echte Entwurf.
24.5 Der Entwurf: Schritt für Schritt zur 5-Element-Yagi
Zurück zu NEC und den echten Drähten. Wir bauen die 2,4-GHz-Yagi des Bauplans Element für Element auf und messen nach jedem Schritt drei Größen: Gewinn nach vorn, Vor/Rück und die Eingangsimpedanz (sie entscheidet über den Kabelanschluss, Kapitel 22). Der Versuchsaufbau steckt in der schon definierten yagi()-Funktion; das Ziel-Design — Längen zwischen \(0{,}43\) und \(0{,}50\,\lambda\), Drahtradius 1 mm — stammt aus dem BAUPLAN des Repos und wurde dort gegen openEMS quergerechnet. Erfolgskriterium der Reihe: Am Ende stehen die Kapitel-11-Werte (knapp 9 dBi, Vor/Rück ≈ 15 dB, \(Z \approx 19\) Ω resonant).
# von oben: yagi()
BASIS = [(0.00, 0.500), # Reflektor: LANG (induktiv)
(0.20, 0.473), # Driven (gespeist)
(0.35, 0.440), # Direktoren: KURZ (kapazitiv)
(0.55, 0.440),
(0.75, 0.430)]
print("Schritt Gewinn Vor/Rück Impedanz")
stufen = [("nur Driven", [BASIS[1]], 1),
("+ Reflektor", BASIS[:2], 2),
("+ Direktor 1", BASIS[:3], 2),
("+ Direktor 2", BASIS[:4], 2),
("+ Direktor 3", BASIS, 2)]
gewinne = []
for name, design, tag in stufen:
az, z = yagi(design, driven_tag=tag)
gewinne.append(az[0])
print(f"{name:14s} {az[0]:5.2f} dBi {az[0] - az[36]:+6.2f} dB"
f" {z.real:5.1f} {z.imag:+6.1f}j Ω")Schritt Gewinn Vor/Rück Impedanz
nur Driven 2.16 dBi +0.00 dB 83.7 +21.4j Ω
+ Reflektor 5.97 dBi +10.11 dB 82.9 +62.2j Ω
+ Direktor 1 9.23 dBi +7.85 dB 10.2 +42.6j Ω
+ Direktor 2 9.76 dBi +10.17 dB 4.3 +21.8j Ω
+ Direktor 3 8.88 dBi +14.64 dB 19.0 +1.2j Ω
Diese Tabelle ist der ganze Yagi-Entwurf im Zeitraffer, und sie erzählt drei Geschichten:
- Der Reflektor bringt den ersten großen Sprung: +3,8 dB und zehn Dezibel Vor/Rück — das Endfire-Paar vom Kapitelanfang, in Hardware.
- Die Direktoren heben den Gewinn weiter (auf fast 10 dBi), aber sieh dir die Impedanzspalte an: Jedes neue Element wirkt auf das gespeiste zurück und drückt dessen Wirkwiderstand in den Keller (\(83 \to 10 \to 4\) Ω!) und den Blindanteil ins Induktive. Eine Yagi ist ein verkoppeltes System — nichts lässt sich isoliert einstellen.
- Direktor 3 ist das Abstimm-Element: Er ist bewusst kürzer gewählt (\(0{,}430\) statt \(0{,}440\,\lambda\)) und kostet sogar fast ein Dezibel Gewinn — aber er holt das Vor/Rück-Verhältnis auf \(+14{,}6\) dB und vor allem die Impedanz auf \(19 + 1{,}2\mathrm{j}\) Ω: praktisch reiner Wirkwiderstand, die Antenne ist resonant und anpassbar. Ein Yagi-Entwurf optimiert nie nur den Gewinn, sondern immer das Dreieck Gewinn / Vor-Rück / Impedanz.
24.5.1 Mehr Direktoren, mehr Gewinn?
Vorhersage-Punkt (PRIMM): Der Bauplan verspricht in §7 „jedes weitere Element etwa +1 dB”. Wir hängen jetzt stumpf weitere \(0{,}435\,\lambda\)-Direktoren im \(0{,}2\,\lambda\)-Raster an. Steigt der Gewinn um +1 dB pro Stück?
# von oben: yagi(), BASIS
print("Direktoren Boom(λ) Gewinn")
for n_dir in range(1, 7):
design = BASIS[:2] + [(0.35 + 0.20 * k, 0.435)
for k in range(n_dir)]
az, _ = yagi(design)
print(f" {n_dir} {design[-1][0]:.2f} "
f"{az[0]:5.2f} dBi")Direktoren Boom(λ) Gewinn
1 0.35 9.18 dBi
2 0.55 9.88 dBi
3 0.75 9.56 dBi
4 0.95 8.20 dBi
5 1.15 7.36 dBi
6 1.35 5.80 dBi
Er steigt nicht — er bricht ein, ab dem dritten Klon geht es steil bergab. Die Erklärung liefert das Feldbild von oben: Die Direktorenkette führt eine Welle, die von Stab zu Stab weitergereicht wird. Das funktioniert nur, solange jeder Stab mit der passenden Phase weiterreicht — die Kette ist ein Wellenleiter, und ihre „Sprosse” müssen zum Tempo der geführten Welle passen. Stumpf geklonte Glieder geraten außer Tritt, die Phasenfehler summieren sich entlang der Kette. Wer länger bauen will, muss nachstimmen — und dann geht es tatsächlich weiter aufwärts:
# von oben: yagi(), BASIS
az, _ = yagi(BASIS[:2] + [(0.35 + 0.30 * k, 0.40) for k in range(6)])
print(f"6 Direktoren, nachgestimmt (0,40 λ kurz, 0,3-λ-Raster): "
f"{az[0]:.2f} dBi bei Boom 1,85 λ")6 Direktoren, nachgestimmt (0,40 λ kurz, 0,3-λ-Raster): 12.77 dBi bei Boom 1,85 λ
Fast 13 dBi — vier Dezibel mehr als das 5-Element-Design, für den zweieinhalbfachen Boom. Die Faustregel der Yagi-Welt lautet denn auch nicht „pro Element”, sondern: Der Gewinn wächst mit der Boom-Länge (grob logarithmisch), und lange Ketten brauchen kürzere, weiter auseinandergezogene Glieder. Professionelle Langyagi-Entwürfe (etwa die DL6WU-Reihen) variieren Länge und Abstand jedes einzelnen Direktors.
Das Wechselspiel kannst du am Kapitel-23-Zeigermodell selbst erleben: eine Endfire-Kette aus \(N\) Strahlern, jeder zündet um \(k\,d\) später als sein Hintermann (die „mitlaufende” Phase — exakt synchron zur Welle). Die Stellschraube FEHLER_GRAD gibt jedem Glied zusätzlich eine feste Extra-Nacheilung mit — wie ein verstimmter Direktor. Vorhersage-Punkt: Jede Abweichung vom Synchrontakt sollte doch schaden — oder? Probiere 20°, und staune: Die Direktivität steigt (von 4,9 auf 7,5). Eine moderate Extra-Nacheilung verschärft die Endfire-Keule — in der Antennentechnik heißt das die Hansen-Woodyard-Bedingung, und es ist genau der Grund, warum die nachgestimmte Yagi-Kette ihre Direktoren kürzer haben will: Die von ihnen geführte Welle läuft etwas langsamer als das Licht, die Glieder eilen also gewollt ein wenig nach. Erst Übertreibung bestraft das Modell — bei 60° pro Glied zerfällt die Keule.
24.6 Wie genau ist diese Rechnung? Die Methodengrenze
Kapitel 10 verlangt vor dem Vertrauen den Konvergenztest: Diskretisierung verfeinern, prüfen, ob die Antwort stehen bleibt. Die Diskretisierung der Momentenmethode ist die Zahl der Stromsegmente pro Draht. Also verfeinern wir — von 5 bis 41 Segmenten — und tragen mit, wie lang ein Segment dabei im Verhältnis zum Drahtradius wird:
# von oben: yagi(), BASIS, LAM
print("SEG Segmentlänge Gewinn Impedanz")
for seg in (5, 7, 9, 11, 15, 21, 41):
az, z = yagi(BASIS, seg=seg)
sl_mm = 0.473 * LAM * 1000 / seg
print(f"{seg:3d} {sl_mm:5.2f} mm = {sl_mm:4.1f} R "
f"{az[0]:5.2f} dBi {z.real:5.1f} {z.imag:+6.1f}j Ω")SEG Segmentlänge Gewinn Impedanz
5 11.58 mm = 11.6 R 9.48 dBi 56.9 +3.6j Ω
7 8.27 mm = 8.3 R 9.21 dBi 35.1 -5.1j Ω
9 6.43 mm = 6.4 R 9.02 dBi 24.2 -2.0j Ω
11 5.26 mm = 5.3 R 8.88 dBi 19.0 +1.2j Ω
15 3.86 mm = 3.9 R 8.67 dBi 14.2 +5.8j Ω
21 2.76 mm = 2.8 R 8.41 dBi 10.7 +10.5j Ω
41 1.41 mm = 1.4 R 7.45 dBi 5.7 +21.9j Ω
Das ist keine Konvergenz — und die Tabelle ist damit lehrreicher als jede brave. Zwei Dinge passieren hier gleichzeitig. Erstens reagieren die Größen verschieden empfindlich: Der Gewinn bewegt sich um ein gutes halbes Dezibel, solange die Segmentierung vernünftig ist — das Fernfeld ist eine gutmütige, über die ganze Struktur gemittelte Größe. Die Impedanz dagegen hängt am Strom in einem einzigen Segment (dem Speisesegment) und wandert um einen Faktor drei. Zweitens — und das ist der eigentliche Punkt — hat das Verfeinern hier eine Grenze: NEC modelliert Drähte mit der Dünnsegment-Näherung, die Segmente verlangt, die deutlich länger sind als der Drahtradius (Faustregel: Segmentlänge \(\gtrsim 4\) Radien). Bei SEG = 41 ist ein Segment nur noch 1,4 Radien lang — die Rechnung verlässt das Gültigkeitsfenster ihrer eigenen Näherung, und „feiner” wird ab da falscher, nicht besser.
Für den Bauplan heißt das konkret: Den Fernfeld-Versprechen (Keule, ≈ 9 dBi, Vor/Rück) darf man glauben — zwei Verfahren bestätigen sie. Die Impedanz ist eine Größenordnungsangabe („um 20 Ω, jedenfalls weit unter 50”): Anpassung ist sicher nötig, ihr Feinabgleich gehört ans gebaute Gerät. Genau deshalb sieht der Bauplan einen verschiebbaren Halter und eine SWR-Messung vor — nicht als Misstrauen gegen die Simulation, sondern als ihr ehrliches Gegenstück.
24.7 Bandbreite: schmal — und nach oben kippt sie
Eine Antenne aus lauter Resonatoren ist zwangsläufig schmalbandig (endlich scharf = endlich lang, Kapitel 15). Wie schmal, zeigt ein Frequenz-Sweep: Wir rechnen das volle Design von 2300 bis 2600 MHz durch und tragen das SWR am 50-Ω-Kabel auf — mit der komplexen Reflexionsformel aus Kapitel 22, \(r = (Z - Z_0)/(Z + Z_0)\), denn abseits der Resonanz hat \(Z\) einen kräftigen Blindanteil:
# von oben: yagi(), BASIS
frequenzen = np.arange(2300, 2601, 25)
swr, gewinn_f = [], []
for f in frequenzen:
az, z = yagi(BASIS, f_mhz=float(f))
r = (z - 50) / (z + 50) # komplexes r (Kap. 22)
swr.append((1 + abs(r)) / (1 - abs(r)))
gewinn_f.append(az[0])
swr, gewinn_f = np.array(swr), np.array(gewinn_f)
i0 = np.argmin(np.abs(frequenzen - 2450))
print(f"SWR bei 2450 MHz: {swr[i0]:.2f} "
f"(die 2,63 = 50/19 aus Kapitel 22)")
print(f"bei 2500 MHz: SWR {swr[np.argmin(np.abs(frequenzen - 2500))]:.0f},"
f" Gewinn {gewinn_f[np.argmin(np.abs(frequenzen - 2500))]:+.1f} dBi")SWR bei 2450 MHz: 2.63 (die 2,63 = 50/19 aus Kapitel 22)
bei 2500 MHz: SWR 38, Gewinn -7.2 dBi
# von oben: frequenzen, swr, gewinn_f
fig, (a1, a2) = plt.subplots(2, 1, figsize=(7.0, 5.2), sharex=True)
# semilogy: logarithmische y-Achse — das SWR springt über Dekaden
a1.semilogy(frequenzen, swr, "b.-")
a1.axvspan(2400, 2483, color="tab:green", alpha=0.15,
label="WLAN-Band")
a1.axhline(2.63, color="0.6", ls=":", lw=1)
a1.set_ylabel("SWR am 50-Ω-Kabel")
a1.set_title("Schmalbandig — und oberhalb der Entwurfsfrequenz "
"kippt sie")
a1.legend(fontsize=9)
a2.plot(frequenzen, gewinn_f, "g.-")
a2.axvspan(2400, 2483, color="tab:green", alpha=0.15)
a2.axhline(0, color="0.6", lw=1)
a2.set_xlabel("Frequenz (MHz)")
a2.set_ylabel("Gewinn vorn (dBi)")
fig.tight_layout()
plt.show()
Die Asymmetrie ist kein Zufall, sondern die Umschaltkarte in Aktion: Ob ein Stab Direktor oder Reflektor ist, entscheidet seine Länge in Wellenlängen. Höhere Frequenz = kürzeres \(\lambda\) = alle Stäbe elektrisch länger; schon zwei Prozent reichen, und die Direktoren rutschen über die Resonanz auf die Reflektor-Seite — die Yagi schießt nach hinten. Tiefere Frequenzen schieben alle Stäbe tiefer in den Direktor-/Kapazitiv-Bereich, das verschmerzt sie deutlich länger. Merke für den Bau: Im Zweifel lieber etwas zu kurz sägen als zu lang — und nach dem gleichen Argument kippt eine zu lang geratene Yagi komplett (Übung 24.1).
24.7.1 Anpassung: die 19 Ω ans 50-Ω-Kabel
Bleibt der Anschluss. \(19\) Ω an \(50\) Ω heißt SWR \(2{,}6\) — es funkt (80 % der Leistung kommen an, Kapitel 22), aber gut ist es nicht. Der Bauplan nennt drei Praxislösungen, die sich alle mit Kapitel-22-Vokabular lesen lassen:
- Hairpin-Anpassung: Das gespeiste Element wird 1–2 mm gekürzt (wird kapazitiv — die Umschaltkarte als Stellschraube!), dann kompensiert eine kleine Drahtschleife parallel zum Speisepunkt als Induktivität: zusammen ein L-Glied, das 19 Ω auf 50 Ω hebt.
- Gamma-Anpassung: Das Element bleibt ein durchgehender Stab (kein Speisespalt!); ein kurzer Parallelstab mit Serienkondensator greift die Spannung ein Stück neben der Mitte ab — dort, wo die Strom-Stehwelle (Kapitel 21) den passenden Impedanzpegel bietet. Bonus: braucht keinen Balun.
- Faltdipol: Das gespeiste Element als geschlossene Schleife vervierfacht die Impedanz (\(19 \to 76\) Ω) — passend fürs 75-Ω-Fernsehkabel aus Übung 22.1.
Dazu gehört die Symmetrierung: Der Dipol ist symmetrisch, das Koaxkabel nicht — ohne Gegenmaßnahme fließt ein Strom außen auf dem Kabelschirm mit, und der Mantel strahlt (Kapitel 22, Kleingedrucktes). Bei 2,4 GHz hilft eine λ/4-Mantelhülse: ein etwa 31 mm langes Metallröhrchen über dem Kabel, am antennenfernen Ende mit dem Schirm verlötet. Das ist wörtlich ein Kapitel-22-Trick — eine am Ende kurzgeschlossene \(\lambda/4\)-Leitung (zwischen Hülse und Schirm) transformiert ihren Kurzschluss in einen Leerlauf am offenen Ende und sperrt so den Mantelstrom.
24.8 Der Bauplan
Damit ist alles begründet, was im Bauplan steht. Die Stückliste kommt direkt aus dem Design — Millimeter, zum Sägen:
# von oben: BASIS, LAM
namen = ["Reflektor", "Driven", "Direktor 1", "Direktor 2",
"Direktor 3"]
print(f"f = 2450 MHz, λ = {LAM * 1000:.2f} mm — Kupferstab Ø 2 mm")
print("Element Länge Boom-Position")
for name, (xpos, laenge) in zip(namen, BASIS):
print(f"{name:11s} {laenge * LAM * 1000:5.1f} mm "
f"{xpos * LAM * 1000:5.1f} mm")f = 2450 MHz, λ = 122.36 mm — Kupferstab Ø 2 mm
Element Länge Boom-Position
Reflektor 61.2 mm 0.0 mm
Driven 57.9 mm 24.5 mm
Direktor 1 53.8 mm 42.8 mm
Direktor 2 53.8 mm 67.3 mm
Direktor 3 52.6 mm 91.8 mm
# von oben: BASIS, LAM, namen
fig, ax = plt.subplots(figsize=(7.2, 3.4))
for name, (xpos, laenge) in zip(namen, BASIS):
x_mm = xpos * LAM * 1000
l_mm = laenge * LAM * 1000
farbe = "tab:blue" if name == "Driven" else "k"
ax.plot([x_mm, x_mm], [-l_mm / 2, l_mm / 2], color=farbe, lw=3.5)
ax.annotate(f"{l_mm:.1f}", xy=(x_mm, l_mm / 2 + 2), ha="center",
fontsize=8)
ax.annotate(f"{x_mm:.1f}", xy=(x_mm, -l_mm / 2 - 5), ha="center",
fontsize=8, color="0.4")
ax.plot([-6, 98], [0, 0], color="0.7", lw=5, zorder=0) # der Boom
ax.annotate("Strahlrichtung →", xy=(70, 25), fontsize=11)
ax.annotate("Speisespalt + Kabel", xy=(24.5, -38),
ha="center", fontsize=8, color="tab:blue")
ax.set_xlim(-15, 110)
ax.set_ylim(-45, 42)
ax.set_aspect("equal")
ax.set_xlabel("Boom-Position (mm); Zahlen über den Stäben: Länge (mm)")
ax.set_yticks([])
ax.set_title("Bauskizze: fünf Stäbe, ein Kabel, 8,9 dBi")
plt.show()
Zum fertigen Gerät fehlen drei Handgriffe, alle aus dem Bauplan des Repos (BAUPLAN_yagi_2.4GHz.md):
- Boom drucken: ein flacher PLA/PETG-Steg mit Ø-2-mm-Bohrungen an den fünf Positionen; für das gespeiste Element zwei Bohrungen mit 2–3 mm Mittelspalt. Profi-Tipp aus der Methodengrenzen-Diskussion: einen kleinen verschiebbaren Halter (±2 mm) vorsehen — der Feinabgleich ist eingeplant, nicht eingestanden.
- Abgleichen: Resonanz und SWR mit einem NanoVNA messen (für das 2,4-GHz-Band gibt es sie günstig); erst die Driven-Länge auf Resonanz trimmen, dann die Anpassung auf minimales SWR.
- Richtwirkung testen: die Signalstärke (RSSI) eines WLAN-Zugangspunkts in Strahlrichtung gegen die Rückrichtung vergleichen — der Unterschied sollte um die 10–15 dB liegen, das gemessene Vor/Rück-Verhältnis.
Und damit ist die Fallstudie geschlossen, deren Anfang Kapitel 11 erzählt hat: Prinzip im 2D-Feldbild, Entwurf mit dem Werkzeug, das zur Geometrie passt, Vertrauen aus Konvergenz-Verständnis plus unabhängiger Querrechnung — und ein Gerät, das man am Ende in die Hand nehmen kann.
24.9 Das Kapitel-Programm
programme/kap24/kap24_fallstudie_yagi.py bündelt alle Befunde eigenständig und mit assert-Schranken: die exakte Rückwärts-Null der Kardioide (\(< 10^{-20}\)), die Einzeldipol-Resonanz (\(0{,}44 < L < 0{,}47\,\lambda\)), die Umschaltkarte (klare Vorzeichen an beiden Enden), die Aufbau-Reihe (Endwerte in engen Fenstern um 8,9 dBi / 14,6 dB / 19 Ω), den Einbruch der naiven Direktorenklone und die nachgestimmten \(> 12\) dBi, den Frequenz-Kipp (SWR > 20 und negativer Gewinn bei 2500 MHz) und das 2D-Vor/Rück (\(+9{,}8\) dB). Läuft in wenigen Sekunden.
Roter Faden
Dieses Kapitel hat die Fäden von drei Teilen des Buchs verknotet: das Zeiger-Rechenwerk und „Umweg = Vorsprung” aus Kapitel 14/23 (Endfire statt Breitseite), den getriebenen Resonator samt Phasengang aus Kapitel 15/19, das Knick-Argument („beschleunigte Ladung strahlt — auch ohne Kabel”) aus Kapitel 21, die Spiegelformel, das SWR und den λ/4-Trick aus Kapitel 22 und die Validierungs-Checkliste aus Kapitel 10 — verschärft um die Lektion, dass jedes Verfahren ein Gültigkeitsfenster hat (Kapitel 11: die Saga; hier: ihre Vermessung). Nach vorn: Kapitel 25 fragt, warum die 50-Hz-Steckdose mit denselben Drahtlängen nicht funkt (die elektrisch kleine Antenne), und die Wellenleiter-Natur der Direktorenkette kehrt in Kapitel 26/27 wieder, wenn periodische Strukturen Wellen führen und sperren.
Übungen
Ü 24.1 (Verstehen). Ein Bastler sägt alle fünf Stäbe versehentlich 4 % zu lang. Was passiert mit der Keule — wird sie nur etwas schwächer? Begründe mit der Umschaltkarte, und stütze die Antwort mit dem Frequenz-Sweep: Welcher Messpunkt dort entspricht „alle Stäbe 2 % zu lang”?
Zu lange Stäbe sind elektrisch in Richtung „induktiv” verschoben. Die Direktoren liegen im Entwurf nur wenige Prozent unter der Resonanz — 4 % Zugabe schiebt sie über den Umschlagpunkt: Aus Direktoren werden Reflektoren, und die Keule kippt nach hinten, sie wird nicht bloß schwächer. Im Frequenz-Sweep steckt dasselbe Experiment, denn es zählt nur die Länge in Wellenlängen: Betrieb bei 2500 MHz statt 2450 macht alle Stäbe elektrisch \(2500/2450 - 1 \approx 2\,\%\) länger — und genau dort bricht der Sweep zusammen (SWR 38, Gewinn nach vorn negativ). Eine Yagi verzeiht „zu kurz” viel eher als „zu lang”.
Ü 24.2 (Verändern). Baue die 7-Element-Yagi: Hänge an das BASIS-Design zwei weitere Direktoren im \(0{,}25\,\lambda\)- Abstand an und suche ihre beste gemeinsame Länge zwischen \(0{,}39\) und \(0{,}44\,\lambda\) (in 0,01er-Schritten). Wie viel Gewinn bringt der längere Boom — und was macht das Vor/Rück- Verhältnis?
# von oben: yagi(), BASIS
print("L_dir Gewinn Vor/Rück")
for L_dir in np.arange(0.39, 0.441, 0.01):
design = BASIS + [(0.75 + 0.25 * (k + 1), L_dir)
for k in range(2)]
az, _ = yagi(design)
print(f"{L_dir:.2f} {az[0]:6.2f} dBi {az[0] - az[36]:+6.2f} dB")L_dir Gewinn Vor/Rück
0.39 10.10 dBi +16.87 dB
0.40 10.09 dBi +17.48 dB
0.41 9.99 dBi +19.73 dB
0.42 9.61 dBi +33.07 dB
0.43 7.98 dBi +13.07 dB
0.44 0.83 dBi -2.38 dB
Die zwei Zusatzdirektoren wollen kürzer sein als die Bestandskette (das Optimum liegt hier um \(0{,}40\)–\(0{,}42\, \lambda\)) und bringen dann rund ein bis anderthalb Dezibel — weniger als „+1 dB pro Element”, der Zuwachs nimmt mit der Kettenlänge ab. Das Vor/Rück-Verhältnis verschiebt sich dabei je nach Länge spürbar: Wer es maximal will, optimiert wieder das ganze Dreieck, nicht eine Zahl. (Und die Impedanz hat sich natürlich auch wieder verschoben — nachprüfen!)
Ü 24.3 (Übertragen). Skaliere die Yagi auf 433 MHz (das 70-cm-Funkband): Alle Längen und Abstände wachsen um den Faktor \(2450/433 \approx 5{,}66\) — aber dein Stabmaterial bleibt 2 mm dick. Maxwell ist skaleninvariant (Kapitel 11): Ist die skalierte Antenne trotzdem exakt gleichwertig? Prüfe mit dipol_z bei 433 MHz, ob ein auf \(0{,}452\,\lambda\) geschnittener Einzeldipol dort noch resonant ist, und erkläre den Unterschied.
# von oben: dipol_z()-Bauweise, necpp — eigene Version für 433 MHz
F2 = 433.0
LAM2 = C_LICHT / (F2 * 1e6)
def dipol_z_433(l_lambda):
ctx = necpp.nec_create()
halb = l_lambda * LAM2 / 2
necpp.nec_wire(ctx, 1, SEG, 0, -halb, 0, 0, halb, 0,
0.001, 1.0, 1.0) # Radius bleibt 1 mm!
necpp.nec_geometry_complete(ctx, 0)
necpp.nec_fr_card(ctx, 0, 1, F2, 0)
necpp.nec_ex_card(ctx, 0, 1, (SEG + 1) // 2, 0, 1.0, 0, 0, 0, 0, 0)
necpp.nec_rp_card(ctx, 0, 1, 3, 0, 5, 0, 0, 90.0, 0.0, 0.0,
180.0, 0.0, 0.0)
z = complex(necpp.nec_impedance_real(ctx, 0),
necpp.nec_impedance_imag(ctx, 0))
necpp.nec_delete(ctx)
return z
print(f"bei 2450 MHz: Z(0,452 λ) = {dipol_z(0.452):.1f} Ω")
print(f"bei 433 MHz: Z(0,452 λ) = {dipol_z_433(0.452):.1f} Ω")
for L in (0.46, 0.47, 0.48):
print(f"bei 433 MHz: Z({L} λ) = {dipol_z_433(L):.1f} Ω")bei 2450 MHz: Z(0,452 λ) = 72.4-0.2j Ω
bei 433 MHz: Z(0,452 λ) = 63.1-35.2j Ω
bei 433 MHz: Z(0.46 λ) = 66.3-21.4j Ω
bei 433 MHz: Z(0.47 λ) = 70.6-4.2j Ω
bei 433 MHz: Z(0.48 λ) = 75.2+13.1j Ω
Nicht exakt gleichwertig: Bei 433 MHz ist der \(0{,}452\,\lambda\)-Dipol noch deutlich kapazitiv — die Resonanz liegt jetzt höher, um \(0{,}47\,\lambda\). Skaleninvarianz gilt nur, wenn alles mitskaliert, auch der Drahtradius; unser 2-mm-Stab ist bei 433 MHz (λ = 69 cm) elektrisch viel dünner als bei 2,4 GHz, und dünnere Dipole haben weniger Endeffekt-Verkürzung (näher an \(0{,}5\, \lambda\)). Wer skaliert, muss also nachstimmen — alle Elementlängen ein bis zwei Prozent strecken — oder gleich einen 11-mm-Stab nehmen. Genau deshalb geben seriöse Baupläne immer den Drahtdurchmesser mit an.
Ü 24.4 (Übertragen). Schließe den Kreis zu Kapitel 23: Baue das Endfire-Paar vom Kapitelanfang als gespeistes Phased Array in NEC — zwei resonante Dipole (\(0{,}452\,\lambda\)) im Abstand \(\lambda/4\), der vordere mit \(-90°\) Speisephase (NEC zählt die Phase in \(e^{+\mathrm{j}\omega t}\)-Konvention, Kapitel 23). Miss das Vor/Rück-Verhältnis und vergleiche mit der parasitären Lösung (Driven + Reflektor aus der Aufbau-Reihe): Wer unterdrückt rückwärts besser, und warum erreicht keiner die exakte Kardioiden-Null?
# von oben: yagi()-Bauweise, necpp, LAM, R_DRAHT, SEG
ctx = necpp.nec_create()
for i, x in enumerate((0.0, 0.25)):
halb = 0.452 * LAM / 2
necpp.nec_wire(ctx, i + 1, SEG, x * LAM, -halb, 0,
x * LAM, halb, 0, R_DRAHT, 1.0, 1.0)
necpp.nec_geometry_complete(ctx, 0)
necpp.nec_fr_card(ctx, 0, 1, F_MHZ, 0)
necpp.nec_ex_card(ctx, 0, 1, (SEG + 1) // 2, 0, 1.0, 0.0, 0, 0, 0, 0)
necpp.nec_ex_card(ctx, 0, 2, (SEG + 1) // 2, 0,
np.cos(-np.pi / 2), np.sin(-np.pi / 2), 0, 0, 0, 0)
necpp.nec_rp_card(ctx, 0, 1, 3, 0, 5, 0, 0, 90.0, 0.0, 0.0,
180.0, 0.0, 0.0)
g_v = necpp.nec_gain(ctx, 0, 0, 0)
g_h = necpp.nec_gain(ctx, 0, 0, 1)
necpp.nec_delete(ctx)
print(f"gespeistes Endfire-Paar: vorn {g_v:.2f} dBi, "
f"hinten {g_h:.2f} dBi → F/B {g_v - g_h:+.1f} dB")
az, _ = yagi(BASIS[:2])
print(f"parasitäres Paar (Driven + Reflektor): "
f"F/B {az[0] - az[36]:+.1f} dB")gespeistes Endfire-Paar: vorn 5.64 dBi, hinten 2.25 dBi → F/B +3.4 dB
parasitäres Paar (Driven + Reflektor): F/B +10.1 dB
Das gespeiste Paar gewinnt deutlich (um die 20 dB Vor/Rück gegen gut 10 dB parasitär) — sein Phasenknopf ist exakt, während der parasitäre Strom in Phase und Stärke vom Verkopplungs-Kompromiss diktiert wird. Die ideale Kardioiden-Null erreicht aber keiner von beiden: Die Herleitung galt für zwei Punktquellen mit gleich starken Strömen — echte Dipole sind ausgedehnt, und schon ein kleiner Amplitudenunterschied lässt die Auslöschung unvollständig (zwei Zeiger löschen sich nur bei exakt gleicher Länge aus). Der Yagi-Trick bleibt trotzdem der Gewinner der Praxis: null zusätzliche Speisetechnik für immer noch über 10 dB Rückwärts-Unterdrückung — und mit der Direktorenkette skaliert er, was das gespeiste Paar nicht kann.
Das Kleingedruckte
Die Verkopplung formal. Was wir über Fernfelder gemessen haben, fasst die Antennentheorie in Gegenimpedanzen: Für zwei Antennen gilt \(U_1 = Z_{11} I_1 + Z_{12} I_2\) (und symmetrisch für 2). Beim Parasiten ist \(U_2 = 0\) (kurzgeschlossen), also \(I_2 = -Z_{21} I_1 / Z_{22}\) — Betrag und Phase des parasitären Stroms folgen aus Eigen- (\(Z_{22}\), die Verstimmung) und Gegenimpedanz (\(Z_{21}\), der Abstand). Unsere Umschaltkarte ist die Fernfeld-Spur genau dieser Formel.
Moderne Entwürfe überlassen das Dreieck Gewinn/Vor-Rück/Impedanz Optimierern (genetische Algorithmen, Partikelschwärme), die NEC tausendfach aufrufen — die Fitnessfunktion ist die Kunst. Kapitel 31 nimmt den Faden auf (inverses Design).
Warum kürzer besser führt: Dass die nachgestimmte Kette ihre Direktoren kürzer will, hat einen ehrwürdigen Namen — die Hansen-Woodyard-Bedingung (1938): Eine Endfire-Reihe erreicht ihre maximale Direktivität nicht im exakten Synchrontakt mit der Lichtgeschwindigkeit, sondern mit einer gezielten Extra-Nacheilung von insgesamt etwa \(\pi\) über die Kettenlänge. Physikalisch: Die Direktorenkette führt eine Oberflächenwelle, die etwas langsamer als \(c\) läuft — und kürzere (kapazitive) Glieder stellen genau diese Verzögerung ein. Zu viel davon kippt den Effekt wieder.
Lange Yagis werden zunehmend toleranzempfindlich: Je schärfer die geführte Welle auf die Kette abgestimmt ist, desto kleiner die Bandbreite und desto härter schlagen Fertigungsfehler durch — die 12,8-dBi-Kette von oben ist spürbar zickiger als das gutmütige 5-Element-Design. Auch das Wetter redet mit: Ein Regen- oder Eisfilm verstimmt die Stäbe (Wasser hat \(\varepsilon_r \approx 80\), Kapitel 1!) — Langyagi-Entwürfe rechnen Reserve ein.
Der Boom. Unsere Rechnung lässt die Stäbe frei schweben; ein Kunststoffboom ändert daran fast nichts. Ein Metallboom dagegen, durch den die Elemente hindurchgehen, verkürzt sie elektrisch — Praxis-Korrekturformeln (nach DL6WU) schlagen je nach Boomdurchmesser einige Prozent Länge auf. Wer Metall baut, korrigiert oder isoliert.
Und die Geschichte: Shintaro Uda publizierte die Antenne 1926 auf Japanisch, sein Professor Hidetsugu Yagi machte sie auf Englisch bekannt — weshalb die Welt bis heute meist nur den halben Namen nennt. Ihre erste große Bühne hatte die „Yagi” ausgerechnet im Zweiten Weltkrieg als Radarantenne — auf allen Seiten.