Jedes Lichtfeld kann als Summe ebener Wellen ausgedrückt werden. Ein solches Ensemble ebener Wellen nennt man das ebene Wellenspektrum des Lichtfeldes. Das ebene Wellenspektrum ist die Fourier-Transformierte des Lichtfeldes in der Realraumdarstellung.
Da dies eine so grundlegende Technik ist, frage ich mich, ob es ein Standardwerkzeug gibt, vorzugsweise Open Source, mit einer einfachen Schnittstelle über Python, Matlab oder ähnliches, um Folgendes (numerisch) zu tun:
Rechnerisch ist lediglich eine Bibliothek zur Durchführung der FFT erforderlich. Ich suche nach einem Rahmen, der dies zusammen mit einigen physikalischen Konzepten umschließt.
Der Grund dafür, dass diese Arten von Bibliotheken nicht existieren, liegt darin, dass der spezielle Algorithmus, den Sie für die Berechnung verwenden, von den genauen Details des Lichtfelds und den Eingabe- und Ausgabeebenen abhängt, die Sie zu berechnen versuchen.
Lassen Sie mich zum Beispiel den einfachsten Fall für diese Art der Berechnung skizzieren:
In diesem Fall können Sie einfach die Methode der Winkelspektrumausbreitung (ASP) mit FFTs verwenden, um Ihre propagierte Wellenfront schnell zu berechnen. Sie scheinen die grundlegende Skalarbeugung zu verstehen, aber um andere Leser zu verdeutlichen, bedeutet dies, dass Sie Folgendes berechnen:
Wo ist die Fourier-Transformation von räumlichen Koordinaten zu Raumfrequenzkoordinaten , Und ist der Ausbreitungskern für die Entfernung . In Zukunft werde ich Großbuchstaben einfach die Fourier-Transformation entsprechender Kleinbuchstaben bezeichnen lassen. Typischerweise definieren wir für ASP:
Wo ist die Wellenlänge.
Dies fällt jedoch schnell auseinander, wenn eine der oben genannten Bedingungen nicht erfüllt ist. Wenn das Eingabefeld zu schnell variiert (oder umgekehrt, wenn das Berechnungsgitter nicht fein genug ist, um diese Variationen mit Nyquist abzutasten), kommt es zu starkem Aliasing in den Fourier-Transformationen, und Ihr Ergebnis wird beschädigt. Wenn die Eingabe- und Ausgabeebenen nicht parallel sind, können Sie diese Methode einfach nicht so verwenden, wie sie formuliert ist. Wenn das Ausgangsgitter anders als das Eingangsgitter abgetastet werden muss, funktioniert ein FFT-Algorithmus nicht mehr, da der wesentliche Kompromiss, den Sie für die Geschwindigkeit einer FFT eingehen, darin besteht, dass Sie keine beliebigen Punkte zur Berechnung in Fourier auswählen können Raum.
Es gibt natürlich auch andere Vermehrungstechniken. Angenommen, Sie haben einen konvergierenden Strahl, z. B. unmittelbar nach einer Fokussierlinse. Abgesehen von einem extrem feinen Berechnungsgitterabstand oder einem Objektiv mit sehr langer Brennweite wird ASP scheitern, weil wird schlecht aliasiert. Dies ist das Lehrbuchbeispiel für die Anwendbarkeit der Fresnel-Beugung :
Wo sind Raumkoordinaten in der Eingabeebene.
Betrachten wir das Eingabefeld aus dem Produkt einer quadratischen Phasenfront zusammengesetzt sein (repräsentiert die Phase der Brennweite der Sammellinse ) und eine verbleibende flache Komponente , können wir sehen, dass über einen gewissen Bereich von Ausbreitungsentfernungen der quadratische Phasenterm innerhalb der Fourier-Transformation so wirkt, dass er die transformierte Funktion "abflacht", so dass kein Aliasing auftritt. In der Tat, wann Das transformierte Feld entspricht dem ungefähr flachen ! In diesem Fall ist die resultierende Berechnung im Wesentlichen identisch mit noch einer anderen Ausbreitungstechnik, der Fraunhofer-Beugung , wobei das kleinere Detail des quadratischen Phasenterms außerhalb der Fourier-Transformation in der Fresnel-Beugung und eine Skalierung von Winkelkoordinaten zu räumlichen Koordinaten vernachlässigt werden.
Auch bei der Fresnel/Fraunhoffer-Beugung stoßen wir immer noch auf Probleme, wenn die Ausbreitungsdistanz zu klein ist. Beachten Sie, dass der Begriff wird eine sehr hohe Krümmung haben, wenn klein ist, was wiederum Aliasing-Probleme in der Fourier-Transformation erzeugt. Typischerweise besteht die Lösung dafür darin, das Feld zweimal zu verbreiten; zunächst ein Stück vorwärts , dann rückwärts vorbei so dass die Gesamtausbreitungsdistanz ist , aber zu erkennen, dass dies notwendig ist und dass diese (oder jede andere) bestimmte Lösung anwendbar ist, ist nicht trivial.
Was ist nun, wenn Ihr Eingabefeld erheblich geneigt ist (dh es breitet sich nicht parallel zur z-Achse aus)? Sie möchten, dass Ihr Berechnungsgitter das Ausgangsfeld enthält, aber der Großteil der Energie befindet sich möglicherweise weit vom Ursprung entfernt Koordinatensystem. Sie könnten Ihr Raster groß genug machen, um dies aufzunehmen, aber idealerweise würden Sie einen Teil der Ausgabeebene außerhalb der Achse berechnen. Wieder einmal brauchen Sie einen neuen Algorithmus!
Bedenken Sie, dass manche Leute im Allgemeinen komplizierte optische Felder auf nicht parallele Ebenen oder gekrümmte Oberflächen ausbreiten müssen, um den Gitterabstand in der Ausgangsebene zu ändern, oder was auch immer für eine andere Komplikation Sie sich vorstellen können, und Sie werden sehen, wie viel Entscheidungsfindung und Komplexität können bei der Auswahl eines Ausbreitungsalgorithmus beteiligt sein. Dies auf automatisierte Weise zu tun, ist nicht unbedingt unmöglich, aber sehr wahrscheinlichschwierig, und es gibt einfach niemanden, der es sich zur Aufgabe gemacht hat, dafür eine Open-Source-Bibliothek zu schreiben. Ich vermute, dass ein solcher Code in proprietären Softwarepaketen wie CodeV oder anderer Linsendesign-Software vorhanden ist, aber denken Sie daran, dass es für die Entwicklung einer Bibliothek jemanden geben muss, der gleichzeitig interessiert (oder ausreichend bezahlt), qualifiziert und die Zeit zum Produzieren hat solch eine Sache. Denken Sie auch daran, dass das Publikum dafür auf optische Ingenieure und Forscher beschränkt wäre, so dass es wenig Belohnung gibt.
Du könntest MEEP ausprobieren . Es ist ein Open-Source-Tool zur Lichtmanipulation. Es führt automatisch alle FFTs durch und hat eine eingebaute Gaußsche Quelle und erzeugt auch schöne Diagramme von numerischen 1D-, 2D- und 3D-Simulationen. Es hat auch einen Python-Wrapper .
Ich verwende pylab numpy scipy matplotlib (und matplotlib.mlab)
Beispiele fi hier und doc und nette Referenz hier
oder verwende die online integrierte Python-Umgebung sagenb.org (Konto eröffnen oder Paket herunterladen, Dateien hochladen und überall arbeiten)
nice plots ...
um digitale Filter zu machen, stöbern Sie im Online-Buch The Scientist and Engineer's Guide to Digital Signal Processing
und sehen Sie sich die Videos (30 Lektionen) "Lineare Systeme und Optimierung der Fourier-Transformation und ihre Anwendungen" von stanford.edu an.
Wenn Sie eine gute Grafikkarte haben, können Sie OPENCL, pyOpenCL, pyfft (einfacher in der Linux-Box) installieren und die fft- und alle Array-Operationen beschleunigen.
BEARBEITEN hinzufügen
SCIAO -- :
SciAO ist eine quelloffene, plattformübergreifende und benutzerfreundliche Toolbox, die auf der Scilab/Scicos-Umgebung zur Modellierung und Simulation von Wellenoptik, insbesondere des adaptiven Optiksystems, basiert
Evan54