Im letzten Beitrag zu cocoaNEC haben wir ein erstes Modell eines Dipols berechnet, mit dem Ergebnis waren wir aber noch nicht zufrieden: Das SWR war nicht gut genug – das heißt, die Antenne ist so noch nicht richtig abgestimmt. Wir könnten uns, wie gesagt, durch Probieren langsam an die richtige Länge herantasten – aber viel besser und schneller ist es, das den Computer machen zu lassen. NC bietet dazu die Möglichkeit, die Berechnung öfters zu wiederholen, um auf einen bestimmten Wert hin zu optimieren. Dies geschieht mit der bereits vordefinierten Funktion control(). Das könnte dann so aussehen.
// Modellierung Dipol mit Optimierung real v ; // Verkürzungsfaktor model ( "dipole" ) // am Modell selber ändern wir nichts { real h, l, f, r, lambda; element dipol ; f = 144; lambda = 300 / f ; h = 2.0 ; l = lambda / 4 * v ; r = 0.0025 ; dipol = wire( 0, 0, h+l, 0, 0, h-l, r, 21 ) ; voltageFeed( dipol, 1.0, 0.0 ) ; setFrequency (f); freespace(); } control() { // Funktion, mit der wir die mehrmalige Berechnung steuern // wir brauchen ein paar Variable, um uns Ergebnisse zu merken real swr, voriges_swr, delta_v; v = 1; // wir beginnen wieder mit 1 delta_v = - 0.02; // wir beginnen in Schritten von 2 % voriges_swr = 999.0; // wir gehen von sehr schlechtem SWR aus swr = 900.0; // um einen ersten Durchlauf zu erzwingen printf("Start\n"); // Start auf der Konsole ausgeben // solange der Absolutwert der Differenz der letzten beiden // Berechnungen größer ist als ein vorgegebener Schwellwert, // wiederholen wir die Berechnung: while (fabs(swr - voriges_swr) > 0.001) { voriges_swr = swr; // das erreichte SWR merken runModel(); // Modell mit neuem v berechnen swr = vswr(1); // und SWR speichern printf("SWR = %f, v = %f\n", swr, v); // Ausgabe von SWR und v // auf Konsole if (swr > voriges_swr) // Verschlechterung! delta_v = - delta_v/2; // daher Schrittweite halbieren // und Richtung umdrehen v = v + delta_v; // neues v berechnen } printf("Stop\n"); }
Rufen wir die Konsolenansicht (im Editorfenster) auf, sehen wir das Ergebnis unserer Berechnungen:
Start
SWR = 2.452013, v = 1.000000
SWR = 1.954132, v = 0.980000
SWR = 1.579521, v = 0.960000
SWR = 1.424159, v = 0.940000
SWR = 1.620440, v = 0.920000
SWR = 1.479025, v = 0.930000
SWR = 1.424159, v = 0.940000
SWR = 1.463551, v = 0.950000
SWR = 1.432652, v = 0.945000
SWR = 1.424159, v = 0.940000
SWR = 1.439748, v = 0.935000
SWR = 1.428923, v = 0.937500
SWR = 1.424159, v = 0.940000
SWR = 1.425461, v = 0.942500
SWR = 1.424060, v = 0.941250
SWR = 1.424159, v = 0.940000
Stop
Wir sehen, wie das Ergebnis sehr rasch Richtung v=0.94 konvergiert- der niedrigste SWR-Wert ist immer einer der letzten Einträge. Damit könnten wir schon einen brauchbaren Dipol bauen.
Bisher gingen wir davon aus, dass sich die Antenne im freien Raum befindet, was natürlich unrealistisch ist. Wir können aber auch berechnen, wie sich die Antenne 2m über dem Boden (bei durchschnittlichen Bodenverhältnissen) verhalten wird. Dazu müssen wir nur die Zeile
freespace();
ersetzen durch:
averageGround();
Beim SWR ändert sich nicht sehr viel (der optimale Wert ist nun 1.415854, bei einem v von 0.9425 – die Antennenimpedanz liegt bei 70 Ohm, praktisch ohne Blindanteil, was ja auch dem Lehrbuch entspricht),
aber das vertikale Strahlungsdiagramm (Abb. 1) zeigt eine gravierende Veränderung: die Strahlung erfolgt zum größten Teil bei einem Erhebungswinkel von 10° über dem Horizont, mit einem zweiten Maximum bei etwa 30°. Vergrößern wir die Höhe, zeigen sich zwei Effekte: die Anzahl der Nebenmaxima wird größer, dabei werden sie aber immer schwächer, und der Erhebungswinkel der Hauptkeule sinkt (aber wir wussten ja schon vorher, dass man Antennen am besten möglichst hoch montiert). Siehe Abb. 2, wo wir von 15 m Höhe ausgehen).
[…] Link zum Artikel: Erste Schritte mit cocoaNEC – 2. Teil: Optimierung. […]