2019年12月26日
本人第三篇博客终于出来了!撒花庆祝。。。。。。
最近在学习傅里叶光学相关知识,将近期整理的知识点做一记录。主要围绕随机散斑,因为主要为自己记录,加之才疏学浅,实在难以做到表述严谨,面面俱到,还望见谅。
这一篇将从以下几个方面来整理,:
在这里,我将“随机散斑”定义为具有随机位相的结构光散斑,区别于有特定光学分布形式的散斑,例如哈达玛(Hadamard)散斑、小波散斑等等,在实际实验中,随机散斑则为激光通过毛玻璃后,相位被随即调制过的散斑样式。
其具有一下特性:
我们将随机散斑的生成过程简单做图:
如图,激光经过小孔约束后,照射到毛玻璃G.G.上,经过毛玻璃叠加上随即相位,再投影到远处。
在这里我们有输入参数:
波长 lambda
孔径 w
传播距离 z
为了方便描述,我们规定:
Pattern为一张随机散斑图
Speckle为一张图中的一个散斑
Pattern的像素大小为 M = 1024,对应真实长度为 L1 = 1m
那么我们通过计算可得:
单个像素对应真实长度为 dx1 = L1/M 米
Speckle的真实尺寸 s = lambda*z/w 米
则随机散斑产生过程可以拆分为:
那么我们接下来就按照这几步进行数学推导。我们先来复习一下傅里叶变换公式:
请记住这个数学形式。
接下来,我们来看一下弗朗禾费传播,因为在傅里叶光学中,远场传播遵从弗朗禾费传播条件:
距离远大于源场的平方
则夫琅禾费传播公式为:
经过变量替换:
表达式可以理解为带有变量替换的源场的傅里叶变换。
尺寸对应关系:
由上式可得,根据源面参数求得观测面边长和采样间隔:
观测平面坐标为:
由此,我们可以开始我们对随机散斑的matlab仿真:
这个就不多说了,直接整!
%% Generate the Pattern
M = 1024;
Pattern_a = Create_speckels(650,0.1,0.32);
Pattern = Pattern_a(:,:)/max(max(Pattern_a(:,:)));
figure(1);imagesc(Pattern);colormap('gray');title('Patterns');
其中M是分辨率,650,0.1,0.32分别对应波长,孔径和传播距离。
函数Create_speckles附在代码的下边即可。
function [I2]=test_speckels(lam_value,w,z)
L1=1;
M=1024;
dx1=L1/M;
x1=-L1/2:dx1:L1/2-dx1;
y1=x1;
lambda=lam_value*10^-9;
k=2*pi/lambda;
s = lambda*z/w;
[X1,Y1] = meshgrid(x1,y1);
u1 = circle_(X1/(2*w),Y1/(2*w)).*exp(1j*2*pi*rand(M));
[u2]=propFF(u1,L1,lambda,z);
I2=abs(u2.^2);
关于弗朗禾费的仿真函数,大家可以参考我给参考书籍,在本文最后的链接部分,如果大家懒得查阅书籍,可以从我给的连接中自行下载我写好的代码,直接粘贴到主体代码下边,就可以直接运行出结果,而且代码有注释方便阅读。不过需要少量下载币,但是肯定是可以运行的,知识无价,还望谅解。
最终得到的散斑图像为:
看到这里,第三篇博客就结束了,主要在理论和仿真层面介绍了随机散斑,还望批评指正。
参考书籍:《傅里叶光学导论》Joseph,W,Goodman https://item.jd.com/12004623.html
代码下载链接:https://download.csdn.net/download/weixin_40678482/12055524