全息图像学习记录(1)——SFFT算法

全息图像学习记录(1)——SFFT算法

  • (第一次写作)
    • 编程环境
    • 具体代码
    • 小结

(第一次写作)

   最近开始搞全息图的模拟,现在以这种方式记录下来。
   在光学里,菲涅耳衍射(Fresnel diffraction)指的是光波在近场区域的衍射。菲涅耳衍射积分式可以用来计算光波在近场区域的传播,因法国物理学者奥古斯丁·菲涅耳而命名,是基尔霍夫衍射公式的近似。

编程环境

win10 专业版
全息图像学习记录(1)——SFFT算法_第1张图片
软件环境:matlab r2016b

具体代码

r=512,c=r; %给出衍射面上的抽样数
a=zeros(r,c); %预设衍射面
a(r/2-r/4:r/2+r/4,c/2-c/4:c/2+c/4)=1; %生成衍射孔
lamda=632810^(-10);k=2pi/lamda; %赋值波长、波数
L0=510^(-3); %赋值衍射面尺寸,单位:米
d=0.1; %赋值观察屏到衍射面的距离,单位:米
x0=linspace(-L0/2,L0/2,c); %生成衍射面x轴坐标
y0=linspace(-L0/2,L0/2,r); %生成衍射面y轴坐标
[x0,y0]=meshgrid(x0,y0); %生成衍射面二维坐标网格
L=r
lamdad/L0, %给出观察屏的尺寸,单位:米
x=linspace(-L/2,L/2,c); %生成观察屏x轴坐标
y=linspace(-L/2,L/2,r); %生成观察屏y轴坐标
[x,y]=meshgrid(x,y); %生成观察屏二维坐标网格
%下面开始用式(3-4)计算衍射积分
F0=exp(j
kd)/(jlamdad)exp(jk/2/d(x.2+y.2)); % 赋值exp(ikd)/(iλd)exp[ik(x2+y2) /2d]
F=exp(jk/2/d(x0.2+y0.2)); %赋值exp[ik (x02+y02) /2d]
a=a.*F; %赋值U0(x0,y0)exp[ik (x02+y02) /2d]
Ff=fftshift(fft2(a)); %完成U0(x0,y0)exp[ik (x02+y02) /2d]的傅里叶变换
Fuf=F0.*Ff; %得到观察屏上的光场分布U (x,y)
I=Fuf.*conj(Fuf); %计算观察屏上的光强分布
figure,
subplot(1,2,1),imshow(I,[0,max(max(I))]),colormap(gray)
subplot(1,2,2),imshow(max(max(I))-I,[]),colormap(gray)

小结

欠采样造成计算失真。

你可能感兴趣的:(全息图像学习记录(1)——SFFT算法)