首頁  技術文章  用液晶空間光調製器(SLM)產生全息圖的GS算法範例

用液晶空間光調製器(SLM)產生全息圖的GS算法範例

發布時間:2020-05-15 11:18:25 瀏覽量:8711 作者:Paul

摘要

GS算法(Gerchberg-Saxton algorithm)是一種迭代方法,當輸入和輸出端的各自光強分布已知時,可以通過光學傳(chuan) 播函數,例如

傅裏葉變化,來恢複光束的相位分布。


正文



一束激光可以分為(wei) 兩(liang) 部分,一部分是相位,另一部分是光斑光強分布,他們(men) 是相互關(guan) 聯的,可以通過改變光束的相位部分,對光斑進行

整形。上述GS算法就是其中的一種方法。


主要分為(wei) 四步

1.假設入射光斑是均勻光強,相位因為(wei) 是未知的,可以用一個(ge) 隨機相位替代,或者通過Target Intensity的IFFT變化求得

2.然後經過FFT變化後,得到的是焦距是的光斑分布,光強與(yu) Target Intensity比較近似,但是不夠理想

3.替換上述步驟的光強分布,保留相位分布,得到新的一束激光

4.經過IFFT變化後保留光斑的相位,作為(wei) 下一次迭代的初始相位


通過上述步驟的反複迭代,會(hui) 不斷改善Approximation to target intensity的光斑。


Matlab代碼參考:

%% 數據初始化

pic = 'test.jpg';           % 輸入圖片

file = 'phase.bmp';         % 圖片保存位置

num = 1000;                 % GS迭代次數


%% 讀取圖片 

im = imread(pic);       

im = rgb2gray(im);

im = im2double(im);


%% GS算法

im = mat2gray(im);

light = gpuArray(im);               % 加入CUDA,提高計算速度

light = ifft2(light);               % 計算初始相位


for n = 1:num

    phase = angle(light);

    light  = 1.*exp(1i*phase);      % 1. 均勻光強入射光

    light = fft2(light);            % 2. 聚焦麵上的光強

    phase = angle(light);    

    light = im.*exp(1i*phase);      % 3. 理想光斑替換

    light = ifft2(light);           % 4. 傅裏葉逆運算

end


% 均勻光入射後再做一次傅裏葉變化

phase = angle(light);

light  = 1.*exp(1i*phase);

light = fft2(light);

intensity = mat2gray(abs(light));

imshow(intensity);


%% 保存相位圖

phase = gather(phase);              % 將phase返回到內(nei) 存中

imwrite(mat2gray(phase), file)


備注:

1. CUDA可以提高運算的速度,例如上述過程,當上述1000此循環,沒有CUDA的時候,循環過程保持在8秒以上,當啟用CUDA後,一般在1.1秒左右。

2. 隨著迭代次數的增加,恢複後的光強越來越清晰

3.通過對比原始圖和經過迭代後的圖片,可以判斷觀察後圖片的恢複程度


您可以通過我們(men) 的官方網站了解更多的国产欧美在线信息,或直接來電谘詢4006-888-532