RP Photonics logo
RP Photonics
Modellierungs-Software
Technische Beratung zu Lasern, nichtlineare Optik, Faseroptik etc.
profitieren Sie vom Wissen und der Erfahrung eines Top-Experten!
Leistungsfähige Simulations- und Design-Software.
Nutzen Sie Computermodelle, um Ihre Laser umfassend zu verstehen!
Erfolg resultiert aus Verständnis – in der Wissenschaft wie in der industriellen Entwicklung.
Die berühmte Encyclopedia of Laser Physics and Technology – online kostenlos verfügbar!
Der ideale Ort, um Anbieter für Photonik-Produkte zu finden.
Anbieter: stellen Sie sicher, dass Ihre Produkte hier gezeigt werden!
für die effiziente Laserentwicklung und Forschung
Diese Seite gibt Ihnen einen Überblick über unsere Softwareprodukte.
RP Fiber Calculator ist ein praktisches Tool für Berechnungen zu optischen Fasern.
RP Fiber Power ist ein extrem flexibles Tool für das Design und die Optimierung für Faserlasern, Verstärkern und auch passiven Fasern.
RP Resonator ist ein besonders flexibles Tool für die Entwicklung von Laserresonatoren.
RP ProPulse kann die Pulsausbreitung in modengekoppelten Lasern und synchron gepumpten OPOs simulieren.
RP Coating ist ein besonders flexibles Designwerkzeug für dielektrische Vielschichtsysteme.
RP Q-switch kann die Entwicklung optischer Leistungen in gütegeschalteten Lasern simulieren.
Die meisten unserer Softwareprodukte bieten eine leistungsfähige Skriptsprache, die Ihnen ein ungewöhnliches Maß von Flexibilität gibt.
Hier erfahren Sie über die Software Lizenzbedingungen, Updates und Upgrades etc.
Kompetente technische Unterstützung ist eine der Schlüsselqualitäten der Software von RP Photonics.
RP Photonics hat Distributoren in verschiedenen Ländern.
Die RP Photonics Software News informieren Sie über aktuelle Entwicklungen und geben den Nutzern interessante Hinweise.
Hier können Sie Anfragen absenden, z. B. betreffend technische Details, Preise und Angebote.
en | de

RP Coating – das Software-Werkzeug für das
Design optischer Vielschichtstrukturen

Beispiel: Rugate-Filter

Wir entwickeln ein Rugate-Filter, bei dem der Brechungsindex in der Struktur kontinuierlich variiert wird. Ein solches Filter kann beispielsweise hergestellt werden, indem man ein variables Gemisch von SiO2 und Nb2O5 aufdampft.

Für die numerische Modellierung beschreiben wir die Struktur als eine Folge vieler sehr dünner Schichten. Wenn hierbei genügend kleine Schritte gewählt werden, sind die Indexschritte so klein, dass die Resultate sehr genau sind.

Das Filter soll nur Wellenlängen nahe 1000 nm reflektieren und keine Seiten-Peaks in der Reflektivität aufweisen, wie es bei gewöhnlichen Bragg-Spiegeln der Fall wäre. Wir können dies mit einer sinusförmigen Oszillation des Brechungsindex erreichen, wenn wir zwei andere Dinge dabei beachten:

  • Wir müssen zusätzliche Reflexionen an Indexsprüngen an den Enden vermeiden, indem wir z. B. kontinuierliche Übergänge erzeugen.
  • Wir müssen außerdem die Struktur apodisieren, d. h. die Oszillation gegen die Enden abklingen lassen.

Insgesamt führt dieser Ansatz zu einer etwas komplizierten Struktur, die wir sicher nicht in Form von hunderten von vorberechneten Indexwerten eingeben wollten. Stattdessen möchten wir die ganze Struktur mit wenigen Parametern beschreiben, aus denen dann alles berechnet wird.

Zuerst definieren wir nur das Substrat und das Superstrate – momentan in der Annahme, dass beiden aus BK7-Glas bestehen:

beam from superstrate
substrate: BK7
; no layers defined yet
superstrate: BK7

(Später werden wir das Superstrate durch Luft ersetzen.)

Wir nehmen an, dass nur Brechungsindizes größer als die von BK7 erreicht werden können. Deswegen definieren wir einen erhöhten Indexwert n0, um den wir später die Oszillation durchführen können. Wir müssen dann zwei Anpassungsregionen um die reflektierende Region herum platzieren, in denen der Brechungsindex sanft vom dem von BK7 auf n0 ansteigt und später wieder abfällt:

l_ref := 1000  { reference wavelength }
 
n_s := n(-1, l_ref)  { substrate index }
n0 := n_s + 0.3  { medium index in reflecting region }
 
n_rug(l, x) := n_BK7(l) + x  { rugate material, e.g. realized as SiO2 mixed with Nb2O5 }
 
; Parameters of the index matching regions:
z_m := 1000  { thickness }
dz_m := 20  { resolution }
x_m(z) := (n0 - n_s) * (10 * z^3 - 15 * z^4 + 6 * z^5)
 
; Parameters of the reflecting region:
z_r := 10000  { approximate thickness }
dz_r := 25  { resolution }
Lambda := l_ref / (2 * n0)  { oscillation period }
z_r := Lambda * round(z_r / Lambda)  { thickness correction }
W(x) := exp(-15 * (x - 0.5)^2)  { window function }
si(x) := if sin(x) >= 0 then 1 else -1
x_r(z) := (n0 - n_s) * (1 + sin(2pi * z / Lambda) * W(z / z_r))
 
MakeStructure() := 
  { Make the coating structure based on the parameters above }
  begin
    while nolayers() > 0 do remove_layer(1);
      { allow repeated application: remove all already existing layers }
    { index matching region }
    for z := 0 to z_m step dz_m do
      add_layer(nolayers() + 1, "rug", x_m(z / z_m), dz_m, 0, 0);
    { reflecting part }
    for z := 0 to z_r step dz_r do
      add_layer(nolayers() + 1, "rug", x_r(z), dz_r, 0, 0);
    { index matching region }
    for z := 0 to z_m step dz_m do
      add_layer(nolayers() + 1, "rug", x_m(1 - z / z_m), dz_m, 0, 0);
  end
 
calc MakeStructure()
 
show "Thickness: ", get_d(0) * d_units:d3:"m"

Wir möchten nun zuerst das erzeugte Indexprofil anzeigen:

diagram 1:
 
"Refractive Index Profile"
 
x: -100, get_d(0) + 100
"position (nm)", @x
y: 0, 3
"refractive index", @y
frame
hx
hy
 
f: n(x,1000), color = blue, step = 1
 
! begin
    setcolor(gray);
    line(0,i * CS_y2);
    line(z := z_m,z + i * CS_y2);
    line(z := z_m + z_r,z + i * CS_y2);
    line(z := get_d(0),z + i * CS_y2);
  end
refractive index profile of a rugate filter

Dann möchten wir das erhaltene Reflektivitätsspektrum sehen:

diagram 2:
 
"Reflection Spectrum"
 
x: 600, 1400
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
frame
hx
hy
 
f: 100 * R(x), color = red, step = 1, maxconnect = 1
reflectivity spectrum of a rugate filter

Dies funktioniert in der Tat gut. Wir können die verbleibenden Seitenpeaks mit einer logarithmischen Skala besser untersuchen:

diagram 3:
 
"Reflection Spectrum"
 
x: 600, 1400
"wavelength (nm)", @x
y: -60, 0
"reflectivity (dB)", @y
frame
hx
hy
 
f: 10 * lg(R(x)), color = red, step = 1, maxconnect = 1
reflectivity spectrum of a rugate filter

Als nächstes möchten wir die Struktur so ändern, dass das Superstrate nun Luft ist. Wenn wir sonst nichts ändern, erhalten wir wegen der Fresnel-Reflexion an der Oberfläche ein verschlechtertes Verhalten des Filters:

diagram 4:
 
"Reflection Spectrum Against Air"
 
x: 600, 1400
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
frame
hx
hy
 
! set_layer(nolayers() + 1, "air", 0, 0, 0, 0)
 
f: 100 * R(x), color = red, step = 1, maxconnect = 1
reflectivity spectrum of a rugate filter

Dies können wir verbessern, indem wir zunächst die obere Anpassungsregion wieder entfernen und dann stattdessen eine Anti-Reflex-Struktur aufbringen. Als die einfachste Lösung verwenden wir eine einzige Schicht:

diagram 5:
 
"Reflection Spectrum Against Air"
 
"with an anti-reflection coating"
 
x: 600, 1400
"wavelength (nm)", @x
y: 0, 100
"reflectivity (%)", @y
frame
hx
hy
 
! for z := 0 to z_m step dz_m do remove_layer(nolayers())
  { remove the top index-matching region }
 
! begin  { add a single-layer AR coating }
    n_ar := sqrt(n0);  { refractive index of anti-reflection layer }
    x_ar := n_ar - n_fsilica(l_ref * l_units);  { corresponding x value }
    add_layer(nolayers() + 1, "rug", x_ar, l_ref / 4 / n_ar, 0, 0);
  end
 
f: 100 * R(x), color = red, step = 1, maxconnect = 1
reflectivity spectrum of a rugate filter

Für eine bessere Performance können wir ein Multischicht-System einsetzen, welches anderswo optimiert wurde:

! begin  { add previously calcultaed AR coating, optimized for n0 = 1.8075 }
    add_layer(nolayers() + 1, "TiO2", 0, 34.6, 0, 0);
    add_layer(nolayers() + 1, "SiO2", 0, 23.7, 0, 0);
    add_layer(nolayers() + 1, "TiO2", 0, 127.8, 0, 0);
    add_layer(nolayers() + 1, "SiO2", 0, 20.8, 0, 0);
    add_layer(nolayers() + 1, "TiO2", 0, 42.6, 0, 0);
    add_layer(nolayers() + 1, "SiO2", 0, 151.9, 0, 0);
  end
reflectivity spectrum of a rugate filter

Das schlussendlich erhaltene Indexprofil sieht so aus:

refractive index profile of a rugate filter

Schließlich betrachten wir noch das Eindringen des elektrischen Felds:

field penetration in a rugate filter
arrow