2014. augusztus 25., hétfő

OAM numerikusan

         A Szabadtéri információátvitel az EMhullámok pálya-impulzusnyomatékával című bejegyzés a csavarodott és összefonódott fázisszerkezetű hullámokról való kommunikációról szólt. Bebizonyosodott, hogy minden olyan nyaláb, mely radiális és azimztális koordinátákkal rendelkezik, $\pm \hbar$ értékű OAM (Orbital Angular Momentum – pálya-impulzusmomentum) állapotot tartalmaz fotononként. 1992-ben észrevették, hogy a magas rendű Laguerre-Gauss (LG) hullámok pontosan ilyenek. Ha a monokromatikus hullámoknál paraxiális közelítésben számítjuk ki az impulzusmomentumokat, akkor kiderül, hogy a spin-impulzusmomentum kifejezésében ott az ellipticitás, mely értéke a polarizációval függ össze, és értelmezhető a síkhullámokra is. A pálya-impulzusmomentum viszont a terjedési irányra merőleges síkon vett intenzitás- és fáziseloszlással hozható kapcsolatba. Míg a SAM (Spin Angular Momentum – spin-impulzusmomentum) két lehetséges értéke a két ellentétes irányú körpolarizáció, addig az OAM értékeit az ortogonális lineáris polarizációk adják. A SAM értékeire a kvantumelmélet spinoperátorokat vezetett be, melyek $\hbar$ egységekben a következők:


\[\text{Balra:}\left\{\frac{1}{\sqrt{2}},\frac{i}{\sqrt{2}}\right\}\text{sajátállapot: +1 sajátérték}\]
\[\text{Jobbra:}\left\{\frac{1}{\sqrt{2}},\frac{-i}{\sqrt{2}}\right\}\text{sajátállapot: -1 sajátérték}\]

Az OAM értékei (sajátállapotai) a Laguerre-Gauss módusok. Nyilván más módusok is rendelkeznek OAM-el (Bessel, Mathieu,…), ám ezzel könnyebb dolgozni. Az LG hullámok általánosított képlete a következő:


\[\xi_{p,l}(\rho,\varphi,z)=\frac{A}{\omega(z)}\cdot\left(\frac{\sqrt{2}\rho}{\omega(z)}\right)^l\cdot L_p^l \left(\frac{2\rho^2}{\omega^2(z)}\right)\cdot e^{-\frac{\rho^2}{\omega^2(z)}}\cdot e^{\frac{ik\rho^2}{2R(z)}}\cdot e^{-i\varphi(z)}\cdot e^{il\theta}\] 

\[\text{Ahol: }\left\{\begin{array}{l l}p - \text{radiális index (sugárirányú csomópontok száma)}\\l - \text{azimutális index (2}\pi\text{ periódusok száma a kerület mentén)}\\ \rho,\varphi,z - \text{hengeres koordináták, melyek kapcsolata a kartezián koordinátákkal:}\left\{\begin{array}{l l}\rho= \sqrt{x^2+y^2}\\\varphi=\tan^{-1}\frac{x}{y}\\z=z\end{array}\right.\ \\A - \text{konstnas szorzó:} A= p!\cdot\sqrt{\frac{2}{\pi p!(|l|+p)!}} \\ \omega(z) - \text{nyalábátmérő (nyalábnyak): } \omega(z)=\omega_0 \sqrt{\frac{z^2+z_R^2}{z_R^2}} \text{, ahol } z_R \text{ a Rayleigh hossz}\\L_p^l - \text{általánosított Laguerre-polinom: } L_p^l(x)=\sum_{m=0}^p -1^m\binom{p+l}{n-m}\frac{z^m}{m!}\\R(z) - \text{a nyaláb hullámfrontjainak görbületi sugara: } R(z)=z+\frac{z_R}{z}=z\cdot\left[1+\left(\frac{\pi\omega_0^2}{\lambda z}\right)^2\right] \\ \varphi - \text{Gouy fázis: } \varphi(z)=(2p+|l|+1)\tan^-1\frac{z}{z_R}\end{array}\right.\] 


A képlet vizuális átfordítására alkalmas például a Matlab. A hengeres koordinátarenszer:






A hullámfront a nyaláb keresztmetszetére vonatkozik, ahol nincs szükség $z$ tengely menti kiterjedésre $(z=0)$. Ennek következményei egy igen egyszerű LG képlethez vezetnek:
\[z=0 \implies \left\{\begin{array}{l l} \omega(0)=\omega_0\sqrt{\frac{0^2+z_R^2}{z_R^2}}=\omega_0 \\ R(0)=0 \cdot \left[ 1+ \left( \frac{\pi \omega_0^2}{\lambda z}\right)^2\right]=0 \\ \varphi(0)=(2p+|l|+1)\tan^{-1}\frac{0}{z_R}=0 \text{, tehát} \varphi \text{ nem számít} \end{array}\right.\]

\[\xi_{p,l}(\rho,z=0)=\frac{A}{\omega_0} \cdot \left(\frac{\sqrt{2}\rho}{\omega_0}\right)^2 \cdot L_p^l\left(\frac{2\rho^2}{\omega_0^2}\right)\cdot e^{-\frac{\rho^2}{\omega_0^2}}\cdot e^{il\theta}\]



Ez az öt szorzótagból álló képlet Matlabban a következőképp írható fel:




z = (A(p,l)./w0).* ...             
    (((sqrt(2).*r)./w0).^abs(l)).* ...        
    (Lpl(p,l,((2.*r.^2)./w0.^2))).* ...
    (exp((-r.^2)./w0.^2)).* ...
    (exp((-1)*1i*l.*theta));

A három pont az egyenlet folytatását jelenti a következő sorban, a pontok a műveleti jelek előtt pedig azt, hogy a számhalmaz összes elemére el kell végezni a műveletet. Számhalmazt jelent például a hengeres koordinátarendszer 3 tengelye (ebben az esetben csak egy, mert $z=0$ és $\varphi$ nem számít):




$\rho: $ ro=linspace(0,1); % 100 érték 0 és 1 között (felbontás)




Mivel nem számít sem a Gouy-fázis, sem a hullámhossz (ehhez egyedül a Rayleigh-hossz kapcsolódott), ezért normalizálhatjuk az értékeket 0 és 1 közé. A linespace(a,b,n) parancs ezt teszi, a és b közé n darab értéket vesz fel egyenletes eloszlással (ha az n paramétert kihagyjuk, akkor azt 100-nak értelmezi).

$\theta: $ theta=linspace(0,2*pi); % 100 érték 0 és 2pi között (radián fázisszög)

Theta a jel fázisa, mely szintén egyenletesen oszlik el $0$ és $2\pi$ között. Bár most $z=0$, de igazából $z=l\cdot\lambda$ hullámhossz távolság megtétele alatt tolódna el a fázis 0-tól 360 fokig. A programban radiánban dolgozunk.


[theta, ro]=meshgrid(theta,ro); % vektorból mátrix (a kirajzoláshoz)

Theta és ro két számhalmaz, melyekből két [Theta x ro] nagyságú mátrix lesz. Ez tulajdonképpen a kirajzolandó felület x-y koordinátája. A z koordinátákat az LG képlete adja.

[x, y]=pol2cart(theta,ro); % a polár koordinátákat kartezián koordinátákká alakítja

Mivel a Matlab beépített polar függvénye csak theta (a sugárvektor és az x-tengely közti szög) és ro (a sugárvektor hossza) paramétereket ismeri, kénytelenek vagyunk a kartezián koordinátarendszerben dolgozni.

A = @(p,l) sqrt((2*factorial(p))/(pi*factorial(p+abs(l)))); % sqrt(...) helyett A(p,l)

A képletben szereplő A konstanst, mely p és l paraméterektől függ, a fenti módszerrel lehet deklarálni. A teljes forráskód a következő:


function [] = LG(p,l,w0)
%{
    p = radiális index
    l = azimutális index
    w0 = nyalábnyak
%}

ro=linspace(0,1);               % 100 érték 0 és 1 között (felbontás)
theta=linspace(0,2*pi);         % 100 érték 0 és 2pi között (radián fázisszög)
[theta, ro]=meshgrid(theta,ro); % vektorból mátrix (a kirajzoláshoz)
[x, y]=pol2cart(theta,ro);      % a polár koordinátákat kartezián koordinátákká alakítja
A = @(p,l) sqrt((2*factorial(p))/(pi*factorial(p+abs(l)))); % sqrt(...) helyett A(p,l)

z = (A(p,l)./w0).* ...             
    (((sqrt(2).*ro)./w0).^abs(l)).* ...        
    (Lpl(p,l,((2.*ro.^2)./w0.^2))).* ...
    (exp((-ro.^2)./w0.^2)).* ...
    (exp((-1)*1i*l.*theta));

surf(x,y,abs(z).^2);
end

Az Lpl Laguerre polinom alakja bonyolultabb mint $A$ konstansé, ezért neki külön függvény jár:



\[L_p^l(z)=\sum_{m=0}^p -1^m \binom{p+l}{p-m}\frac{z^m}{m!} \text{, ahol} \binom{p+l}{p-m}=\frac{(p+l)!}{(p-m)!\cdot(l+m)!}\text{ binomiális együttható}\]


function out = Lpl(p,l,z)
   LL=0;
   for m=0:p
        LL = LL+((-1)^m)*...
            (factorial(p+abs(l))/(factorial(p-m)*factorial(abs(l)+m)))*...
            (z.^m)/factorial(m);
   end
   out = LL;
end

Az LG függvényben a surf kirajzolja 3D-ben az (x,y,z) mátrixokat. A z mátrix méretének ugyanakkorának kell lennie mint x vagy y esetében, és ez teljesül is, hiszen z egyenletében szerepelnek a theta és ro mátrixok. Az egyetlen kikötés, hogy valós, és ne komplex számok szerepeljenek a mátrixokban. Ha az LG függvényt lefuttatjuk, az LG(0,3,0.5) paranccsal, akkor a következő ábra jelenik meg:


Ez a forma az LG nyaláb hullámfrontja. Bár a kép forgatható és simítható manuálisan is, de ha a surf és az end közé a következő parancsokat írjuk, akkor azok elvégzik:

view([0 90]);   % felülnézet
axis('square'); % négyzetes forma
lighting phong; % fényes felület
shading interp; % a négyzetrács eltüntetése

Ezek után a programot különböző paraméterekkel futtatva, az alábbi eredmények születnek:


Látható, hogy az intenzitásgyűrű nem csupán az azimutális index csökkenésével lesz egyre kisebb, de a nyalábnyak csökkenésével, vagy a radiális index növelésével is zsugorodik. Az interferenciát is ugyanezzel a módszerrel lehet megjeleníteni, a programon annyit kell változtatni, hogy megduplázzuk z egyenletét és a két z függvényt összeadjuk kirajzolás előtt. Feltételezve, hogy csak az azimtuális index a változó, a két z függvény csak ebben fog különbözni egymástól:

function [] = LG(p,l,l1,w0)
(...)

z1 = (A(p,l1)./w0).* ...             
    (((sqrt(2).*ro)./w0).^abs(l1)).* ...        
    (Lpl(p,l1,((2.*ro.^2)./w0.^2))).* ...
    (exp((-ro.^2)./w0.^2)).* ...
    (exp((-1)*1i*l1.*theta));

zi = z+z1;
surf(x,y,abs(zi).^2);

(...)
end


A háromdimenziós spirális fázisfront kialakításához az LG hullámok szerkezetét kell megvizsgálni.


A feladat kör alakban eltolni a szinusz hullámokat $l$ függvényében. Az LG hullámoknál ezt az azimutális indexet tartalmazó exponens szorzó valósítja meg:

\[\text{Az exponenciális jel: }e^{i\omega t}=\cos{\omega t}+i\cdot\sin{\omega t}\]
\[\text{Az exponenciális jel beszorozva a fázistolóval: }\] \[e^{i\omega t}\cdot e^{il\theta}=e^{i\omega t + l\theta}=\cos{(\omega t+l\theta)}+i\cdot\sin{(\omega t+l\theta)}\]


Theta jelenti a fázist, mely egy konstans szám, de függ a hullámok számától. A fenti ábrán például 13 szinusz hullám van, ezért a köztük lévő fázistolás 360/13=27.7° azaz 0.48 radián. A hullámok theta $l$-szeresére tolódnak el.

function [] = OAMwaves(l,rad,n,N)
%{
    l = azimutális index
    rad = a legnagyobb kör sugara
    n = körök száma
    N = hullámok száma egy körben
%}
   Fs = 4000;                   % Mintavételezési frekvencia [minta/sec]
   Ts = 1/Fs;                   % Mintavételezési periódusidő [sec/minta]
   range=0.2;                   % Kirajzoláshoz: a megjelenített intervallum
   t = (0:Ts:range);            % Kirajzoláshoz: az intervallumban lévő lépések halmaza
   F = 10;                      % Frekvencia
   A = 1;                       % Amplitúdó
  
%% -------------------------------Hullámok----------------------------------
    zerok=zeros(1,length(t));           % Kirajzoláshoz: y-tengely dimenziója
    Ps=l*((2*pi)/N);                    % Fázistolás = l*theta
    for r=rad:-(rad/n):(rad/n)          % Lépkedés a középcentrikus körök között
        P=Ps;                           % A fázistolás kezdeti értéke
        for ang=(2*pi/N):(2*pi/N):2*pi; % Lépkedés a kört alkotó hullámok között (0-360)
           xp=r*cos(ang);               % A kört formáló x-koordináta
           yp=r*sin(ang);               % A kört formáló y-koordináta
           x=A*cos(2*pi*F*t+P);         % A jel, melynek fázisa tolódik minden lépésben
           clinep(t,zerok+yp,x+xp,x,2); % Rajzolás: clinep(X,Y,Z,Szín,Vonalvastagság);
           P=P+Ps;                      % A fázis tolása
        end
    end
   
    grid on;                                % rácsozás
    axis square;                            % négyzetes forma
    xlabel('X'); ylabel('Y'); zlabel('Z');  % tengelynevek
    axis([0 range -rad rad -rad-A rad+A]);  % tengelykorlátok
    view(40,20);                            % nézőszög
end

A fenti program kör alakban koszinusz hullámokat rajzol, melyek fázisai szerre el vannak tolva. A nyaláb tömörségét a hullámkörök és az őket alkotó hullámok számával lehet növelni. A clinep függvény a mathworks adatbázisról volt letöltve, mely annyiban különbözik a plot3 függvénytől, hogy a megrajzolt vonalak külön-külön színezhetőek.


Ha az azonos fázispontokat, például az intenzitásmaximumokat összekötjük, akkor jobban kivehetővé válik a fázisszerkezet összefonódott alakja.  Az alábbi kódrészletet a for end-je és a grid on közé lehet illeszteni.

        %% -----------------------Fázispontok---------------------------------
        if(l==0)                         % mikor nincs csavart fáziszserkezet
            hold on;                     % rárajzolás az előző rajzra
            angle=0:(2*pi/N):2*pi;       % Lépkedés a kört alkotó hullámok között (0-360)
            xp=r*cos(angle);             % A kört formáló x-koordináta
            yp=r*sin(angle);             % A kört formáló x-koordináta
            zerok=zeros(length(xp));     % Kirajzoláshoz: x-tengely dimenziója
            for i=0:(1/F):range          % Lépkedés periódusonként (0-tól azaz max-tól)
               maxpoint=ceil(length(0:Ts:i)); % a maxpontok helye az időtengelyen
               plot3(zerok+t(maxpoint),yp,A+xp,'r','LineWidth',3); % rárajzolás
            end
            hold off;
        else                                    % mikor a fázisszerkezet csavarodott
            hold on;                            % rárajzolás az előző rajzra
            F_uj=F/l;                           % a spirálok lépéstávolsága l-el nő
            for i=1:l                           % l az összefonódott spirálok száma
                Px=i*(2*pi)/l;                  % a spirálok fázistolása x irányban
                Py=Px+pi/2;                     % a spirálok fázistolása y irányban
                y = r*A*cos(2*pi*F_uj*t+Py);    % x-hullám
                x = r*A*cos(2*pi*F_uj*t+Px);    % y-hullám, ezek együttese a spirál
                plot3(t,y,x+A,'r','LineWidth',3); % rárajzolás
            end
            hold off;
        end


A középső ábrán már-már kibontakozni látszik a fázisszerkezet a fázisvonalak mentén. Ha kommentárba rakjuk a hullámok kirajzolását, akkor:


A Matlab képes ennél szebb felületek megjelenítésére is. Ebben az esetben nem számít a körök, vagy a hullámok száma, sem a legnagyobb kör sugara, csupán az azimutális index:

function [] = PhaseStruct(l)
   F = 10;                      % Frekvencia
   A = 1;                       % Amplitúdó
   Fs = 4000;                   % Mintavételezési frekvencia [minta/sec]
   Ts = 1/Fs;                   % Mintavételezési periódusidő [sec/minta]
   range=0.2;                   % Kirajzoláshoz: a megjelenített intervallum
   t = (0:Ts:range);            % Kirajzoláshoz: az intervallumban lévő lépések halmaza

%%-----------------------------Fázisszerkezet------------------------------
hold on;                        % Az összefonódások egy ábrára rajzolása
if(l==0)                        % mikor nincs csavart fáziszserkezet
  y = A*sin(2*pi*F*t);          % x-hullám
  x = A*cos(2*pi*F*t);          % y-hullám, ezek együttese a körlemez
  zerok=zeros(1,length(t));     % Kirajzoláshoz: t darab nulla
  Y=[zerok(:),y(:)];            % y-hullám az x-tengely 0 pontjába
  Z=[zerok(:),x(:)];            % x-hullám az y-tengely 0 pontjába
  for j=0:(1/F):range           % Lépkedés periódusonként (0-tól azaz max-tól)
    X=[j+zerok(:),j+zerok(:)];  % Az x-tengely feltöltése 0-val periódusonként
    surf(X,Y,Z);                % Kirajzolás
  end
else                              % mikor a fázisszerkezet csavarodott
  zerok=zeros(1,length(t));
  X=[t(:),t(:)];                  % X-tengely értékei = időtengely értékei
  F_uj=F/l;                       % a spirálok lépéstávolsága l-el nő
  for i=1:l                       % l az összefonódott spirálok száma
    Px=i*(2*pi)/l;                % a spirálok fázistolása x irányban
    Py=Px+pi/2;                   % a spirálok fázistolása y irányban
    y = A*cos(2*pi*F_uj*t+Py);    % x-hullám
    x = A*cos(2*pi*F_uj*t+Px);    % y-hullám, ezek együttese a spirál
    Y=[zerok(:),y(:)];            % y-hullám az x-tengely 0 pontjába
    Z=[zerok(:),x(:)];            % x-hullám az y-tengely 0 pontjába
    surf(X,Y,Z);                  % Kirajzolás
  end
end
  hold off;
  grid on;                                % rácsozás
  axis square;                            % négyzetes forma
  xlabel('X'); ylabel('Y'); zlabel('Z');  % tengelynevek
  axis([0 range -A A -A A]);              % tengelykorlátok
  view(40,20);                            % nézőszög
end


Az l=0 eseteket mindig külön kell tárgyalni a fázisszerkezetnél, mert a nullával való osztás nem lehetséges. Minden körívnél és görbületnél a program alapból megrácsozza a felületet, minél több van belőlük annál sűrűbb a rácsozat. A következő parancsokat a view(40,20) és az end közé lehet írni:

  shading interp;       % a négyzetrács eltüntetése
  colormap copper;      % rézszínű felület
  set(light,'Style','infinite','position',[1 1 1]);    %1. fényforrás
  set(light,'Style','infinite','position',[-1 -1 -1]); %2. fényforrás
  material shiny;       % csillogás


A fázisfrontok megjelenítéséhez szemből-nézet view(90,0) kell és másféle színezés.  Az előbb megadott színező parancsok kommentárba tétele után javítsuk ki:
  • az l=0 kirajzolását: surf(X,Y,Z, 'FaceColor','blue','EdgeColor','none');
  • az l<>0 kirajzolását:   C=[t(:),zerok(:)];
                  surf(X,Y,Z,C,'EdgeColor','none'); % Kirajzolás

                     caxis([0,range*l]);

Továbbá a range változót állítsuk 1 periódusra, azaz 1/F-re, hogy látszódjék egy hullámhossz alatt mennyit változik a fázis.


Az első esetben nincs fázisváltozás. A másodiknál egy hullámhosszon l=1-szer tolódik el a fázis 180 fokot (kéktől a pirosig). Az utolsó ábrán a fázis csak keveset változik, pontosan 180/7=25.71 fokot. Ez azt jelenti, hogy a keresztmetszet bármely két pontján mérünk, ennél nagyobb fáziskülönbséget nem fogunk tapasztalni. Ahhoz, hogy teljesen körbeforduljon, 7 hullámhossznyi távolságig kell rajzolni:


A hullámfront intenzitásgyűrűit és az interferenciákat a NEC (Numerical Electromagnetics Code – 4nec2) programmal is szimulálni lehet. Ahogyan a Matlab-ban a hullámokat kör alakba csoportosítva felépíthető az LG hullám, ugyanúgy a NEC-ben is elvégezhető ugyanez. Egyszerűen annyi a feladat, hogy negyed hullámhosszúságú antennákat helyezünk el kör formában, úgy, hogy mindenik ugyanabban a polarizációban (irányban) legyen. Ezt Matlabban úgy lehet elképzelni, mint mikor a hullámszerkezetet szemből nézzük (view(90,0);)


Mindenik antennára eltolva adjuk rá a jelt. Mivel a NEC egy nagyon régi program, ezért sokat kell kézzel írogatni az antennák koordinátáit. Erre a célra érdemes Matlabban programot készíteni ami létrehozza a .nec kiterjesztésű fájlt, hogy azt csak be kelljen majd tallózni a NEC-be. Először vizsgáljuk meg a .nec fájlt szerkezetét: készítsünk egy két elemből álló fázisrácsot. A Frekvencia legyen 1GHz, tehát az antennák hossza 30cm/4=7.5cm és legyen fél hullámhossz a két antenna közti távolság. Az antenna átmérője minél kisebb annál jobb, itt 1mm-re állítottam.


Mivel a két antenna éppen fél hullámhosszra van egymástól, az egymás irányába kisugárzott jelek kioltják egymást. Ha az egyik jelet eltoljuk fél hullámhosszal (180 fokkal), akkor a fordítottja történik, a jelek felerősítik egymást. A generált fájl (2elemu.nec) tartalma tulajdonképpen a kézzel kitöltögetett táblázatokat foglalja magába:


CM Cardioid, converted with 4nec2 on 31-mei-05 21:01

CE

GW   1    10   0    -0.075     0    0    -0.075     0.075 1e-3

GW   2    10   0    0.075 0    0    0.075 0.075 1e-3

GE   0

GN   -1 

EK

EX   0    1    2    0    1    0    0

EX   0    2    2    0    -1   1.22e-16   0    0

FR   0    0    0    0    1000 0

EN



Látható, hogy a fázist nem fokokban, hanem komplex formában tárolja:



\[Re+jIm=Magn(\cos{\theta}+j\sin{\theta})\]


function [] = Antennak(l,h,N,rad)
%{
    l = azimutális index
    h = antenna hosszúság
    N = antennaszám
    rad = kör sugár
%}
  clf; clc;                     % az ábrák és a paranccsor kiürítése

%% --------------------------- Kör koordináták ----------------------------
  angle=(2*pi/N):(2*pi/N):2*pi; % lépések a kört alkotó antennák között (0-360)
  xp=rad*cos(angle);            % A kört formáló x-koordináta
  yp=rad*sin(angle);            % A kört formáló y-koordináta
 
  hold on;                      % A kör koordinátái egy ábrán
  for i=1:N                     % Lépkedés az antennák között
     plot(xp(i),yp(i),'.');     % az antenna alja
     plot(xp(i),yp(i)+h,'.');   % az antenna teteje
  end
  axis([-(rad*2) rad*2 -(rad*2) rad*2]);
  axis square;
  hold off;
 
 %% --------------------------- fájlba íras -------------------------------
  fileID = fopen('Antennak.NEC','w');
  fprintf(fileID,'CM Cardioid, converted with 4nec2 on 31-mei-05 21:01\n');
  fprintf(fileID,'CE\n');
 
  % Első táblázat: Type, Tag, Segs, X1, Y1, Z1, X2, Y2, Z2, Radius
  for i=1:N                                
      fprintf(fileID,'GW    %d  10  %f  %f  %f  %f  %f  %f  1e-3\n'...
          ,i,0,xp(i),yp(i),0,xp(i),yp(i)+h);
  end
 
  fprintf(fileID,'GE    0\n');
  fprintf(fileID,'GN    -1\n'); % Free Space
  fprintf(fileID,'EK\n');
 
  % Második táblázat: Type, Tag, Segs, (opt), Real, Imag, Magn, Phase, (norm)
  Ps=l*((2*pi)/N);
  P=Ps;
  for i=1:N
      fprintf(fileID,'EX    0   %d  2   0   %f  %f  0\n',i,sin(P),cos(P));
      fprintf('A(z) %d. antenna fazisa: %f\n',i,radtodeg(P)); % a parancssorba írás
      P=P+Ps;
  end
 
  fprintf(fileID,'FR    0   0   0   0   1000    0\n'); %Frekvencia
  fprintf(fileID,'EN\n');
  unix2dos('Antennak.NEC'); %konvertálás
 
end

A unix2dos függvényt a mathworks adatbázisból tölthető le. Futtatás után betallózzuk a NEC programban az Antennak.NEC fájlt, ami a függvény könyvtárában jött létre.


A melléklebenyeket el lehet tüntetni, ha belső kört is használunk:


Megoldható, hogy csak a belső körre teszünk jelforrást, és onnan egyenlő hosszúságú kábelekkel összekötjük a külső kör(ök) antennáival. Ha a kábelhosszt nullára állítjuk, akkor a program a két végpont közti fizikai távolságot veszi figyelembe. Ha viszont az egyetlen jelforrásból induló kábelek hosszát változtatjuk (késleltetés, azaz fázistolás gyanánt), akkor az iránykarakterisztikák valamiért nem sikerülnek jól. A következő ábrán a két 1GHz-es (0.3m) antenna a köztük lévő jelforrásból van táplálva,75 ohmos átviteli kábeleken keresztül. Az antennák fél hullámhosszra (0.15m) vannak egymástól.


A rézben lassabban terjednek az elektromágneses hullámok, amit nem vettem figyelembe, de a főablak „Enviroment” részénél látni lehet a kábelek elektromos hosszát fokokban, hogy mennyire tér el a várt értékektől. Míg ki nem derül, hogy a kábelekkel miért csak 360 vagy 180 fokot lehet tolni, addig a több jelforrásos változatot használom. Az előző program módosításával több középcentrikus antennakör építhető, melyek kábelekkel vannak a legbelső körhöz csatlakoztatva. A körök közti fázistolások elkerülése érdekében érdemes a kábelt a hullámhossz egész számú többszörösére méretezni.

function [] = Antennak(l,h,N,rad,n)
%{
    l = azimutális index
    h = antenna hosszúság
    N = antennaszám
    rad = kör sugár
%}
  clf; clc;                     % az ábrák és a paranccsor kiürítése

%% --------------------------- Kör koordináták ----------------------------
  hold on;                            % A kör koordinátái egy ábrán
  i=1;
  for r=rad:-(rad/n):(rad/n)          % Lépkedés a középcentrikus körök között
      for ang=(2*pi/N):(2*pi/N):2*pi; % Lépkedés a kört alkotó hullámok között (0-360)
          xp(i)=r*cos(ang);           % A kört formáló x-koordináta
          yp(i)=r*sin(ang);           % A kört formáló y-koordináta
          plot(xp(i),yp(i),'.');      % az antenna alja
          plot(xp(i),yp(i)+h,'.');    % az antenna teteje
          i=i+1;
      end
  end

  axis([-(rad*2) rad*2 -(rad*2) rad*2]);
  axis square;
  hold off;
 
 %% --------------------------- fájlba íras -------------------------------
  fileID = fopen('Antennak.NEC','w');
  fprintf(fileID,'CM Cardioid, converted with 4nec2 on 31-mei-05 21:01\n');
  fprintf(fileID,'CE\n');
 
  % Elso táblázat: Type, Tag, Segs, X1, Y1, Z1, X2, Y2, Z2, Radius
  for i=1:N*n                                
      fprintf(fileID,'GW    %d  10  %f  %f  %f  %f  %f  %f  1e-3\n'...
          ,i,0,xp(i),yp(i),0,xp(i),yp(i)+h);
  end
 
  fprintf(fileID,'GE    0\n');
  fprintf(fileID,'GN    -1\n'); % Free Space
  fprintf(fileID,'EK\n');
 
  % Második táblázat: Type, Tag, Segs, (opt), Real, Imag, Magn, Phase, (norm)
  Ps=l*((2*pi)/N);
  P=Ps;
  for i=(n-1)*N+1:n*N     % csak a legbelső körre tegyen jelt
      fprintf(fileID,'EX    0   %d  2   0   %f  %f  0\n',i,sin(P),cos(P));
      fprintf('A(z) %d. antenna fazisa: %f\n',i,radtodeg(P)); % a parancssorba írás
      P=P+Ps;
  end
 
  % Harmadik táblázat: kábelek
  for i=1:(n-1)*N
      fprintf(fileID,'TL    %d  1   %d  1   75  0.3\n',i,i+N); %lambda hosszú
  end

  fprintf(fileID,'FR    0   0   0   0   1000    0\n'); %Frekvencia
  fprintf(fileID,'EN\n');
  unix2dos('Antennak.NEC'); %konvertálás
 
end


Látható, hogy nagyobb körökkel és több antennával a főlebenyek nyílásszöge sokkal kisebb, a hullámok párhuzamosabbak, nem divergálnak szét. Ennek köszönhetően az antenna nyeresége is nagyobb lesz (a decibel skála maximumai alapján). Két vagy több kört tartalmazó antennarács esetén a körök között terjedő jelek kiolthatják vagy felerősíthetik egymást, ezért nem mindegy, hogy a belső kör milyen távol van a külsőtől. A fenti baloldali példában nagyobbik kör sugara 30cm, azaz 1 hullámhossz, a belsőé pedig ennek fele. Ezért ugyanaz történik, mint a két antennaelemes példában, a belső kör antennáinak jelei pontosan 180 fokos fáziskülönbséggel érkeznek a külső kör antennáihoz, ezért az összegük nulla amplitúdót eredményez.
A körök sugarának csökkenése az iránykarakterisztika kinyílásához vezet olyannyira, hogy egy adott ponton már teljesen oldalirányba tartanak a hullámok. Ez hasonló az optikai tartományban lévő nyalábnyak- és/vagy apertúra-megszorításoknak, melyek korlátozzák a felismerhető lehetséges OAM-ek számát. Hogy mégjobban növeljük az antenna nyereségét a sugárzási irányban, reflektorokat helyezhetünk az antennák mögé:


Amint az a skálán is látszik, az antenna nyeresége 1.82dBi-ről 5.3dBi-re nőtt. A reflektorok megrajzolásához illesszük az alábbi kódot az első táblázatot kirajzoló for-ciklus után:

  for i=1:N   %reflektor                             
      fprintf(fileID,’GW    %d  10  %f  %f  %f  %f  %f  %f  1e-3\n’...
          ,i+N,-h,xp(i),yp(i)-h/2,-h,xp(i),yp(i)+h+h/2);
  end


 Az iránykarakterisztika szögletességét a kevés antenna okozza. Az antennák száma ugyanakkor a lehetséges OAM-ek számát is korlátozza. Az antennaszám kifejezés jobban talál ide, mint a hullámszám (ami egyébként a periódusok számát jelenti egy adott térbeli távolságban), ugyanis ez többnyire a formált nyaláb felbontásával van kapcsolatban. Ha a vevő tudja, hogy az adó mennyi antennával generálja az OAM hullámokat, akkor azt is tudja, hogy mennyi lehetséges érték közül válogathat.


Bár nem találtam sehol matematikai minimumot az antennák számára, a fentiekből az derül ki, hogy a minimális érték $2l$. Ha ennél nagyobb, akkor tükör szimmetrikusan alakulnak az OAM értékek, 10 antennás gyűrűnél $l=5$-től felfele a gyűrűk átmérője csökkenni kezd, $l=10$-nél az iránykarakterisztika már eléri az $l=0$-hoz tartozó formát. Az $l=10$-től felfele ismét nő gyűrű átmérője. Ez azért történhet, mert a magas OAM értékű nyalábok esetén az antennakör elemei közé is járna fázisérték, de az antennahiány miatt ezeket kihagyja a program és csak a létező antennák pozíciójára adja meg az értékeket. Ezek viszont megegyezhetnek, azaz rátevődhetnek egy alacsonyabb rendű OAM értékeire, így a kialakuló iránykarakterisztika ennek az OAM-nek az alakját formálja. Az alábbi ábrán a 8 és a 12 értékű OAM négy fázispontja rátevődik az OAM=4 négy fázispontjára.


A Szabadtéri információátvitel az EM hullámok pálya-impulzusnyomatékával című bejegyzésben szó esett arról, hogy mennyire nagyon hasonlít az OAM-et hordozó nyalábok viselkedése az optikai és a rádiós tartományban. Ebben a bejegyzésben újabb korlátok, hasonlóságok merültek fel:
  • A melléklebenyek csökkenthetőek belső antennakörök használatával
  • Több antennakör esetén elég csak a legkisebb kört táplálni, hiszen a fázisok nem változnak a külső körök felé haladva. A külső körök antennáit fázistolás nélkül kell a belső körre csatlakoztatni.
  • A kör sugarának, valamint a körök és az antennák számának növelése javít az iránykarakterisztikán: csökkenti a főlebenyek nyílásszögét ezáltal megnöveli a nyereséget is. Továbbá növeli a kialakítató OAM állapotok számát.
    • Ha a kör sugara kicsi, akkor a nagy OAM állapotú hullámok intenzitásgyűrűje nagyon széttartó hullámokból alakul ki
    • Ha a körök száma kicsi, akkor melléklebenyek jelennek meg és ezzel csökken az antennarendszer nyeresége
    • Ha az antennák száma kicsi, akkor a nagy OAM iránykarakterisztikájának formája egy kisebb OAM-ével egyező alakot ölthet. A minimum antennaszám $2l$.