1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4% Erstellt das Hologramm für den Gerchberg-Saxton-Algorithmus.
8%Letzte Änderung: 28.09.2022
9%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22%Anpassung des Target-Image an die Berechnung
26if(
Hologram.gs_startPhase == "random")
27 %Start mit Zufallsphase
29elseif(
Hologram.gs_startPhase == "quadratic")
30 %Start mit quadratischer Phase
31 hologramPhaseStart =
Hologram.gs_quadraticParameter *
Hologram.distanceFromCenter().^2*2*pi;
33 disp("ERROR -Unknown GS-Start Phase");
37hologramPlaneModified = inputAmplitude.*exp(1i*hologramPhaseStart);
39konvergenz = single(zeros(
Hologram.gs_iteration,1)); %Speicherplatz reservieren für Fehler
44 imagePlane = fftshift(fft2(fftshift(hologramPlaneModified))); %Transformieren in die Bildebene
45 imagePlaneModified = abs(targetAmplitude).*exp(1i*angle(imagePlane));%Phase behalten, Amplitude durch Bild ersetzen
47 hologramPlane = fftshift(ifft2(fftshift(imagePlaneModified))); %Transformieren in die
SLM-Ebene
48 hologramPlaneModified = abs(inputAmplitude).*exp(1i*angle(hologramPlane)); %Phase behalten, Amplitude durch Gauss ersetzen
51 result = abs(imagePlane(:,:));
52 result_max =
max(
max(result));
53 result = result./(ones(size(result)).*result_max);
54 konvergenz(n)=single(sum(sum(abs((result-targetAmplitude(:,:)).^2))));
56 %Zwischenausgabe Berechnungsfortschritt
57 if(evalin('base','
Hologram.displayProgress'))
58 if(mod(n/
Hologram.gs_iteration*100,10)==0)
59 disp(strcat(
string(n/
Hologram.gs_iteration*100),"%"));
69 %Fehler über Iterationen plotten
74%Ausgabe als Komplexe Matrix
75image = exp(1i*angle(hologramPlane));
function Gerchberg_Saxton()
Erstellt das Hologramm für den Gerchberg-Saxton-Algorithmus.
Hologramme werden als Objekte vom Typ Hologram dargestellt.
function prepImage(in path, in x, in y, in resizeMode, in color, in limitGrayLevel, in invert)
function setWS(in field, in param, in value)