
RP Coating – das Software-Werkzeug für das Design optischer Vielschichtstrukturen
| Überblick | Anwendung | Modell | Benutzung | Demos | Versionen |
Beispiel: Gires–Tournois-Interferometer (GTI)
Hier analysieren wir die Funktion eines Gires–Tournois-Interferometers, das z. B. für die Dispersionkompensation in einem modengekoppelten Laser eingesetzt werden könnte. Es besteht aus einem Bragg-Spiegel, einer dickeren Schicht und einer weiteren dünnen Schicht an der Oberfläche. Effektiv ist es ähnlich einem Fabry–Pérot-Interferometer, welches aber einen hoch reflektierenden hinteren Spiegel hat und in Reflexion betrieben wird. Die gesamte Reflektivität ist dann hoch in einem gewissen Wellenlängenbereich, kaum beeinflusst von den Resonanzen. Durch die Interferenzeffekte erhält man aber eine periodische Variation der Reflexionsphase und daher chromatische Dispersion.
Wir beschreiben zunächst die Struktur:
d_units: nm
l_units: nm
l_Bragg := 1000 { Bragg wavelength }
N_Bragg := 10 { number of layer pairs }
d_t := 3.25 * l_Bragg / n_SiO2(l_Bragg * l_units) { thickness of thick SiO2 layer }
beam from superstrate
substrate: BK7
for j := 1 to N_Bragg do
begin
* TiO2, l / 4 at l_Bragg
* SiO2, l / 4 at l_Bragg
end
* SiO2, d = d_t
* TiO2, l / 4 at l_Bragg
superstrate: air
Das erste Diagramm zeigt das spektrale Profil der Reflektivität:
diagram 1:
"Reflectivity Profile"
x: 800, 1200
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
cs: frame, hx, hy
f: 100 * R(x), color = red, width = 3, step = 1
Das zweite Diagramm zeigt die Gruppenverzögerung als Funktion der Wellenlänge. Sie ist auf den Resonanzen am höchsten:
diagram 2:
"Group Delay in Reflection"
x: 800, 1200
"wavelength (nm)", @x
y: -150, +150
"T_g (fs)", @y
cs: frame, hx, hy, clip
f: T_g_r(x) / fs, color = green, width = 3
f: CS_y1 + R(x) * (CS_y2 - CS_y1), style = dotted
f: 0
Das dritte Diagramm zeigt die Gruppenverzögerungsdispersion (group delay dispersion, GDD) als Funktion der Wellenlänge.
diagram 3:
"Group Delay Dispersion"
x: 800, 1200
"wavelength (nm)", @x
y: -4000, +4000
"GDD (fs^2)", @y
y2: 0, 1
frame
f: GDD_r(x) / fs^2,
color = blue,
width = cwidth,
step = 1,
maxconnect = 1
f: R(x),
yscale = 2,
style = dotted
f: 0
Als Nächstes betrachten wir die Intensitätsmuster bei verschiedenen Wellenlängen:
diagram 4:
x: 800, 1200
"wavelength (nm)", @x
y: -500, d_tot + 1500
"depth in the mirror structure (nm)", @y
frame
! begin { show the color scale }
var x1, x2;
x1 := CS_x2 + 0.02 * (CS_x2 - CS_x1);
x2 := CS_x2 + 0.04 * (CS_x2 - CS_x1);
for y := CS_y1 to CS_y2 step (CS_y2 - CS_y1) / 500 do
begin
setcolor(colorscale((y - CS_y1) / (CS_y2 - CS_y1)));
line(x1 + i * y,x2 + i * y);
end;
setcolor(black);
end
! (set_dir(1); R(lambda_t))
cp: colorscale((R(x); E2(y) / 4)) { color plot }
; Show the layer boundaries:
f: get_z(j), style = solid, color = lightgray, for j := 1 to nolayers()
f: 0
f: get_z(nolayers() + 1)
"substrate", 200c, (-200)c
"superstrate", 150, (d_tot + 200)c
Schließlich simulieren wir, was mit ultrakurzen Pulsen bei der Reflexion am GTI geschieht. Obwohl RP Coating nicht explizit Funktionen hierfür hat, können wir dies mit ein paar Zeilen Skriptcode tun. Wir definieren Felder für die zeit- und frequenzabhängigen komplexen Amplituden, ebenfalls eines für die komplexen elektrischen Feldstärken in der Struktur für alle optischen Frequenzen (für spätere Benutzung). Dann machen wir die eigentliche Berechnung und zeigen den reflektierten Puls an:
diagram 5:
"Reflection of Ultrashort Pulse"
x: -50, +200
"time (fs)", @x
y: -1, 1
"electric field strength (a. u.)", @y
cs: frame, hx, hy
; Parameters of the test pulse:
A0 := 0.9 { peak amplitude }
tau0 := 10 fs { FWHM duration }
l0 := 1000 nm { center wavelength }
f0 := c / l0 { center frequency }
A0%(t) := A0 / cosh(1.7627 * t / tau0) { complex amplitude in time domain }
E0(t) := Re(A0%(t) * expi(-2pi * f0 * t)) { electric field }
["l0 = ", l0:d3:"(n)m",
", tau0 = ", tau0:d3:"s",
", T_g = ", T_g_r(l0 / l_units):d3:"s",
", GDD = ", GDD_r(l0 / l_units) / fs^2:f0:"fs^2"]
; Numerical parameters:
T := 3000 fs
N := 2^10
dt := T / N
t1 := -T / 2 + dt
t2 := T / 2
df := 1 / T
f2 := (N / 2) * df
f1 := -f2 + df
f_max := 1 / dt - df
defarray A%[0, T - dt, dt] (periodic) { amplitudes in time domain }
z_max := d_tot * d_units + 3 um
dz := 30 nm
dz := z_max / round(z_max / dz)
defarray E%[0, z_max, dz; f1, f2, df]
calc
{ Calculate reflected time-domain amplitudes A%[]
and electric field E%[] inside the structure }
begin
for t := t1 to t2 step dt do A%[t] := A0%(t);
A0_f%[] := FFT(A%[], -1);
A_f%[] := A0_f%[];
for f := f1 to f2 step df do
begin
A_f%[f] := A_f%[f] * r%(c / (f0 + f) / l_units);
for z := 0 to z_max step dz do
E%[z, f] := E_plus%(z / d_units) + E_minus%(z / d_units);
end;
A%[] := FFT(A_f%[], +1); {}
end
A%(t) := A%~[t] { final amplitude }
E(t) := Re(A%(t) * expi(-2pi * f0 * t))
f: E0(x * fs), color = lightgray, step = 1
f: E(x * fs), color = blue, step = 1
f: abs(A0%(x * fs)), color = lightgray, step = 1 { envelope of initial pulse }
f: -abs(A0%(x * fs)), color = lightgray, step = 1
f: abs(A%(x * fs)), color = blue, step = 1 { envelope of final pulse }
f: -abs(A%(x * fs)), color = blue, step = 1
Da der gewählte Puls (graue Kurve) ziemlich kurz ist, erhalten wir eine Folge von Pulsen in Reflexion:
Für das letzte Diagramm benötigen wir das zeitabhängige Feld an allen Positionen in der Struktur. Für jede Position liefert eine schnelle Fourier-Transformation (FFT) die komplexen Amplituden für alle Zeiten. Das ist weitaus schneller, als für jeden Punkt des Diagramms die Beiträge aller Frequenzkomponenten explizit aufzusummieren. Wir verwenden Zero-Padding im Frequenzbereich, d. h. einen erweiterten Frequenzbereich mit zusätzlichen Amplituden vom Wert null, um eine feinere zeitliche Auflösung zu erhalten. Zwischen den gespeicherten Werten interpoliert die Funktion I(z, t):
pad := 4 { zero padding factor }
dt_p := dt / pad { temporal resolution }
t_p1 := -(round(50 fs / dt_p) + 1) * dt_p { stored time range }
t_p2 := +(round(100 fs / dt_p) + 1) * dt_p
defarray Ez_f%[0, pad / dt - df, df] (periodic) { spectrum at one position }
defarray Ez%[0, T - dt_p, dt_p] (periodic) { time-domain amplitudes at one position }
defarray Et%[0, z_max, dz; t_p1, t_p2, dt_p]
calc
{ Calculate Et%[z, t]: time-dependent field in the structure }
begin
I_max := 0;
for z := 0 to z_max step dz do
begin
for f := f1 to f2 step df do
Ez_f%[f] := A0_f%[f] * E%[z, f];
FFT(Ez_f%[], Ez%[], +1);
for t := t_p1 to t_p2 step dt_p do
Et%[z, t] := Ez%[t];
I_max := maxr(I_max, abs2(Et%[z, 0]));
end;
end
I(z, t) := abs2(Et%~[z, t]) / I_max
{ normalized intensity at position z and time t, interpolated }
Damit zeigt das letzte Diagramm die zeitaufgelöste Feldintensitätsverteilung:
diagram 6:
"Ultrashort Pulse in the GTI Structure"
x: -50, +100
"t (fs)", @x
y: 0, z_max / um
"z (µm)", @y
cs: frame, hx, hy
cp: colorscale(I(y * um, x * fs))
"air", 100, (d_tot * nm / um + 0.3)c
f: d_tot * nm / um { indicate the surface of the GTI }
"GTI", 100, (d_tot * nm / um - 0.3)c
Man kann erkennen, wie der einfallende Puls (oben links) zunächst einen an der Oberfläche reflektierten Puls erzeugt, dann einen intensiveren Puls durch Reflexion am Bragg-Spiegel, und schließlich schwächere Pulse, die mehrere Umläufe in der Struktur machen. Für den gegebenen sehr kurzen Puls bleiben die reflektierten Pulse zeitlich klar getrennt. Normalerweise würde ein GTI aber mit viel längeren Pulsen betrieben werden, so dass die reflektierten Pulse zeitlich stark überlappen. In dieser Situation wäre die Bandbreite des Pulses kleiner als die Bandbreite der Resonanzen des GTIs.
