%
%
%1. Antennenbeschreibung %<'FontWeight',MSVTITLWEIGHT,'FontSize',MSVTITLSIZE,'Color',MSVTITLCOLOR>
%
%
% Eine Antennenbeschreibungssprache besitzt folgende Beschreibungselemente:
%
% (1)  \bfBasiselemente
%       Dies sind gerade Drhte, ebene Metallflchen, evt. Wendeln, Feed-Leitungen u..
%
% (2)  \bfKonstruktion von Antennen aus Basiselementen
%       Sprachelemente zum Zasammenfgen verschiedener Basiselemente
%
% (3)  \bfSprachkonstrukte fr die Vervielfltigung
%       Einfache Formulierungen fr die mehrfache Anordnung derselben Struktur
%
% (4)  \bfSprachkonstrukte zur rumlichen Verschiebung und Drehung
%
%
% \bfBasiselemente
%
% Die in diesem Skript vorgestellte Matlab Antenna Design Language {\bfMADL} benutzt 
% Matlab-Funktionen als Basiselemente.  Diese Funktionen erzeugen beim Aufruf mit 
% passenden Parametern wie z.B. rumliche Koordinaten der Endpunkte eines Drahtes 
% als Resultat ein Matlab-CellArray.  Die Beschreibungen durch CellArrays stellen 
% eine Zwischensprache dar zwischen der Beschreibung mit Matlab-Funktionen und der 
% Eingabebeschreibung fr die NEC-Programme.  Bei der Nutzung dieses Skriptes ist 
% weder die Kenntnis der Zwischensprache noch die der NEC-Sprache notwendig.  
% Hilfreich und fr Optimierungen nach eigenen Kriterien auch erforderlich ist ein 
% Basiswissen ber die Programmierung in Matlab.  Die Datenstruktur der Zwischensprache 
% ist im Anhang dokumentiert.
%
% Wichtigstes Basiselement der Antennenbeschreibungen ist das passive gerade Drahtstck. 
% Dies wird beschrieben mit der Funktion  {\fontname{Courier}wire} :
%
parameterhelp wire
%
% Neben den unmittelbar verstndlichen Parametern fr die Koordinaten der Endpunkte des 
% Drahtes gibt es den Parameter  {\fontname{Courier}m} , der die Anzahl der Segmente angibt, durch die 
% der Draht bei der numerischen Behandlung innerhalb des NEC2-Programms modelliert werden 
% soll.  Ein grosses  {\fontname{Courier}m}  erhht die Genauigkeit, bedeutet bei komplizierten Antennengebilden aber 
% auch ein sehr schnelles Ansteigen der Rechenzeit.  Die Lnge eines Segments sollte immer 
% kleiner sein als  {\fontname{Courier}\lambda/10} , wo  {\fontname{Courier}\lambda}  die Wellenlnge ist.   {\fontname{Courier}m = 7}  fr einen Dipol ist ausreichend. 
% Im Falle paralleler Drhte sollten die Segmente nicht lnger als der Abstand der Drhte sein.
% Als guter Wert wird meist  {\fontname{Courier}m = 11} verwendet.
%
% Soll ein Drahtstck im Mittelpunkt gespeist werden, so ist die Funktion  exwire  
% anstelle von  wire  zu nehmen:
%
parameterhelp exwire
%
% Mit der Funktion  {\fontname{Courier}exwire}  kann man schon einfache Drahtantennen modellieren.  Wir hngen 
% eine  {\fontname{Courier}42 m}  lange Antenne aus  {\fontname{Courier}3 mm}  starkem Draht in der Hhe  {\fontname{Courier}z = 15 m}  lngs der  {\fontname{Courier}y}-Achse 
% so auf, dass ihr Mittelpunkt ber dem Ursprung liegt.  Als Anzahl von Segmenten geben 
% wir  {\fontname{Courier}31}  an.  Das ist ausreichend, solange der Draht bis 15 MHz benutzt wird.
%
ant = exwire([0 -21 15],[0 +21 15],0.003,31,1);
%
% Eine alternative Methode der Speisung bietet die Funktion  {\fontname{Courier}excitation} .  Als Parameter gibt 
% man die Koordinaten des Mittelpunktes eines mit  {\fontname{Courier}wire}  definierten Drahtes an:
%
parameterhelp excitation
%
% Man muss dann allerdings beides, nmlich die  {\fontname{Courier}wire-}Anweisung und die  {\fontname{Courier}excitation-}Anweisung 
% noch mit der weiter unten beschriebenen Funktion  {\fontname{Courier}construct}  zusammenbinden.
%
% Ein 3D-Bild einer beschriebenen Antenne erhlt man mit der Funktion  {\fontname{Courier}antgraph} :
%
parameterhelp antgraph
%
% Wir probieren die Darstellung der eben definierten Antenne  {\fontname{Courier}ant} :
%
ant = exwire([0 -21 15],[0 +21 15],0.003,31,1);
antgraph(ant);
%
% Die Darstellung eines simplen gespeisten Drahtes ist natrlich nicht besonders spannend.
%
% Ein wesentlicher Vorteil der Beschreibung in Matlab ist die Mglichkeit von variablen 
% Parametern.  Man knnte also auch schreiben
%
freq   = 14100000;    % Frequenz in Hz
c      = 299792458;   % Lichtgeschwindigkeit m/s
lambda = c/freq;      % Wellenlnge in m
hoehe  = 15;          % Hhe in m
laenge = 42;          % Lnge der Drahtantenne
draht  = 0.003;       % Strke des Drahtes in m
nsegm  = 2*ceil(5*laenge/lambda) + 1; % Anzahl der Segmente
ant    = exwire([0 -laenge/2 hoehe],[0 +laenge/2 hoehe],draht,nsegm,1);
%
%
% Da die Drahtstrke fr jeden Draht angegeben wird, modelliert man mit  {\fontname{Courier}wire}  auch 
% Rhren und Stbe, solange die Dicke kleiner als die Lnge der Segmente bleibt.  
% Andernfalls muss man das Basiselement  {\fontname{Courier}patch}  fr die Modellierung von Metallflchen 
% einsetzen.  Fr Yagi-Antennen gengt die Modellierung mit  {\fontname{Courier}wire}  immer.
%
% Bisweilen bentigt man gebogene Leiter, z.B. fr VHF-Faltdipole.  Solche Bgen werden 
% mit der Funktion  arc  modelliert:
%
parameterhelp arc
%
% Mit  arc  lassen sich Bgen bis knapp unter  180  beschreiben:
%
bogen = arc([1 0 0],[0 1 0],[0 0 0],0.01,30);
antgraph(bogen);
%
bogen = arc([0 0 2],[2 2 2],[1 1 2-0.0001],0.05,30);
antgraph(bogen);
%
% Bei  180  liegen  a, b  und  c  auf einer Linie, so dass die Ebene des Bogens 
% unbestimmt ist.  Man behilft sich leicht durch Angabe der richtigen Endpunkte, 
% aber eines sehr gering verschobenen Mittelpunkts wie im letzen Beispiel gezeigt. 
% 
%% Die Beschreibung weiterer Basiselemente wie  rlcpar ,  rlcser ,  patch  und  helix  folgt im Kapitel 5.
%
%
%
% \bfKonstruktion von Antennen aus Basiselementen
%
% Das Zusammenfgen mehrerer Antennenelemente erfolgt mithilfe der Funktion  {\fontname{Courier}construct} :
%
parameterhelp construct
%
% Die zusammenzufgenden Basiselemente wie z.B. mit der Funktion  {\fontname{Courier}wire}  definierte 
% Drhte werden als Parameter von  {\fontname{Courier}construct}  in beliebiger Reihenfolge eingetragen. 
% Elemente, die sich aufgrund der Geometrie berhren oder durchdringen, haben 
% elektrischen Kontakt.  Eine einfache Quad-Antenne kann man deshalb durch die vier 
% Seitendrhte eines Quadrats modellieren.  Der bersichtlichkeit halber definieren 
% wir die vier Drhte zunchst getrennt und fhren die Konstruktion erst in der 
% letzten Zeile durch:
%
%
%
%
%
%
%
%
%
%
a = 5;      % Seitenlnge der Quad
h = 8;      % Hhe des Speisepunktes
du = exwire([0 -a/2 h],[0 +a/2 h],  0.002,7,1); % unterer Draht mit Speisung
dr = wire([0 -a/2 h],  [0 -a/2 h+a],0.002,7);   % seitlicher Draht
dl = wire([0 +a/2 h],  [0 +a/2 h+a],0.002,7);   % seitlicher Draht
do = wire([0 -a/2 h+a],[0 +a/2 h+a],0.002,7);   % oberer Draht
quad = construct(du,dr,dl,do);                  % Zusammenfgen
antgraph(quad);                                 % Darstellung                         
%
%
% Die Kombination von Generierung passiver Drhte und ihrer Zusammenfgung bieten zwei  
% Funktionen  {\fontname{Courier}wires}  und  {\fontname{Courier}polygon} :
%
parameterhelp wires
%
parameterhelp polygon
%
% Das Beispiel der Quad sieht dann unter Benutzung von  {\fontname{Courier}wires}  z.B. wie folgt aus:
%
a = 5;                                          % Seitenlnge der Quad
h = 8;                                          % Hhe des Speisepunktes
p1 = [0 -a/2 h;   0 +a/2 h;   0 -a/2 h+a];      % erstes Ende der Drhte
p2 = [0 -a/2 h+a; 0 +a/2 h+a; 0 +a/2 h+a];      % zweites Ende der Drhte
ww = wires(p1,p2,0.002,7);                      % Konstruktion
du = exwire([0 -a/2 h],[0 +a/2 h],  0.002,7,1); % unterer Draht mit Speisung
quad2 = construct(du,ww);                       % Zusammenfgen
antgraph(quad2);                                % Darstellung                         
%
% Und mit  {\fontname{Courier}polygon} :
%
a = 5;                                          % Seitenlnge der Quad
h = 8;                                          % Hhe des Speisepunktes
p = [0 -a/2 h; 0 -a/2 h+a; 0 +a/2 h+a; 0 +a/2 h; 0 -a/2 h]; % Punkte der Quad
w = polygon(p,0.002,7);                         % Konstruktion
e = excitation([0 0 h],1);                      % Speisung in der Mitte des unteren Drahtes
quad3 = construct(w,e);                         % Zusammenfgen
antgraph(quad3);                                % Darstellung                         
%
% Mit diesen Funktionen kann man schon relativ komplexe Antennen einfach beschreiben.  
% Ntzlich ist dabei ein Basiswissen in Matlab.  Ein Beispiel ist die Beschreibung einer  
% 7-Element-Yagi fr  {\fontname{Courier}145 MHz} :
%
openext yagi7.txt
%% Hier bitte nichts ndern
%
%
%
% \bfSprachkonstrukt fr die Vervielfltigung
%
% Hufig werden Antennen aus mehreren schon ihrerseits komplexen Konstruktionen 
% zusammengesetzt.  Ein Beispiel dafr sind Yagi-Arrays.  Die erfolgt mit der Funktion  
% {\fontname{Courier}group} :
%
parameterhelp group
%
% Ein Beispiel gibt folgende auf hohen Gewinn optimierte Yagi-Gruppe:
%
yg = group(yagi7,[0; 1.1; 3.0; 5.3]);
antgraph(yg);
%
% Natrlich kann eine Gruppe wiederum gruppiert werden:
%
drei = group(yagi7,[0; 3; 6]);
g4x3 = group(drei,[-4 0; -2 0; +2 0; +4 0]);
antgraph(g4x3);
%
% Wir fgen an geeigneter Stelle noch Mast und Gestnge ein:
%
drei = group(yagi7,[0; 3; 6]);
vr   = wire([0 0 -0.05],[0 0 6.05],0.04,29);    % Antennentrger
drg  = construct(drei,vr);                      % drei Antennen
g4x3 = group(drg,[-4 0; -2 0; +2 0; +4 0]);
hr1  = wire([0 -4.1 1.5],[0 +4.1 1.5],0.05,80); % unteres Horizontalrohr
hr2  = wire([0 -4.1 4.5],[0 +4.1 4.5],0.05,80); % oberes Horizontalrohr
mast = wire([0 0 -2],[0 0 +5],0.1);             % Mast
g84  = construct(g4x3,hr1,hr2,mast);
antgraph(g84);
%
% Natrlich kann man auch alles in einer Zeile schreiben, was aber nicht bersichtlicher ist:
%
antgraph(construct(group(construct(group(yagi7,[0; 3; 6]),wire([0 0 -0.05],[0 0 6.05],0.04,29)),[-4 0; -2 0; +2 0; +4 0]),wire([0 -4.1 1.5],[0 +4.1 1.5],0.05,80),wire([0 -4.1 4.5],[0 +4.1 4.5],0.05,80),wire([0 0 -2],[0 0 +5],0.1)));
%
% Damit kann man auf einfache Weise seine Trume verwirklichen.  Hier ein Beispiel:
%
n  = 12;               % Anzahl der Antennen nebeneinander
m  = 6;                % Anzahl der Antennen bereinander
dy = 2.2;              % Horizontalabstand der Yagis
dz = 2.4;              % Vertikalabstand der Yagis
traum = group(group(yagi7,dy*(0:m-1)'),((0:n-1)'*dz-(n-1)/2*dz)*[1 0]);
antgraph(traum);
%
%
% \bfSprachkonstrukte zur rumlichen Verschiebung und Drehung
%
% Die rumliche Verschiebung einer Antennenanordnung erfolgt mit der Funktion  {\fontname{Courier}translation} :
%
parameterhelp translation
%
% Diese Funktion wird in der Funktion  {\fontname{Courier}group}  eingesetzt. 
% 
% Eine Drehung fhrt die Funktion  {\fontname{Courier}rotation}  aus:
%
parameterhelp rotation
%
% Als erstes Beispiel dient die Erzeugung einer Kreuz-Yagi-Antenne, die im fertigen 
% Zustand nochmals um  {\fontname{Courier}45} gedreht wird:
%
ky = rotation( construct( yagi7, rotation(yagi7,[90 0 0]) ), [45 0 0] );
antgraph(ky);
%
% Das zweite Beispiel zeigt den Aufbau einer rotationssymmetrischen Anordnung.  
% Fr die Konstruktion werden weitere Sprachkonstrukte von Matlab benutzt:
%
%% Evtl. erforderlich:  clear workspace (mit Men) 
n = 24;    % Anzahl der Dipole im Kreis
s = 1;     % Dipollnge in m
r = 3;     % Kreisradius in m
traeger  = exwire([r 0 -s/2],[r 0 +s/2],0.01,7,1);
strahler = wire([0 0 0],[r 0 0],0.02,15);
zusammen = construct(traeger,strahler);
for k=1:n,  a{k} = rotation(zusammen,[0 k*360/n 0]); end
ar = construct(a{:});
antgraph(ar);
%
%
% \bfHinzufgung einer Bezeichnung
%
% Man verliert leicht die bersicht, wenn nicht jedes Diagramm und jede Tabelle mit einer 
% passenden Bezeichnung versehen ist.  Deshalb ist es sinnvoll einem Antennenmodell einen 
% Namen zu geben mit der Funktion  {\fontname{Courier}comment} :
%
y7 = comment(yagi7,'7-Element-Yagi');
antgraph(y7);
%
%
% Der Kommentar darf mehrzeilig sein.  Dann sind die Zeilen getrennt in geschweifte Klammern 
% zu setzen:
%
y7 = comment(yagi7,{'7-Element-Yagi';'144 MHz'});
antgraph(y7);
%
% Der Kommentar sollte erst am Ende der Konstruktion gegeben werden, da er bei der Verwendung 
% der Funktion  {\fontname{Courier}construct}  verloren geht.
%
