MATLAB实现计算全息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用MATLAB 软件和液晶光阀实现傅立叶变换计算全息制作及其再现
姚雪灿
指导教师 阎晓娜
(上海大学理学院物理系,上海 200444)
摘要:利用MATLAB 语言制作了一个迂回相位编码的傅立叶变换全息图,使用电寻址的液晶光阀作为全息图的实时记录介质对得到的傅立叶计算全息图进行光学再现,并对编码过程中加随机相位和不加随机相位后的再现图进行了比较讨论。
关键词:计算全息 傅立叶变换全息 MATLAB 液晶光阀 迂回相位编码
全息制作包括二种方式,光学全息和计算全息。光学全息用光学干涉原理制作,计算全息是用计算机对物波场的数学描述进行抽样、计算、编码而制作。计算全息可以制作已存在物体的全息图,也可以制作不存在物体的全息图,只要物光波场可以用数学描述出来。制作的计算全息图要以适合光学再现的尺寸和方式来输出。由于计算全息图上每个抽样单元的尺寸在微米量级,需要专门的光学缩微照相系统或微光刻系统。在要求较低情况下也可用照相机将显示在计算机屏幕或打印输出的计算全息原图缩拍到高分辨感光胶片上,通过显影、定影等处理得到可用于光学再现的全息图。由于记录介质是照相胶片,这就限制了它在实时处理中的应用。 近年来,随着高分辨电寻址空间光调制器的发展,像元尺寸在微米量级,像素数超过100万的振幅型或相位型空间光调制器已经完全实用化。其中最具代表性的是液晶光阀,电寻址的液晶光阀是由驱动电路驱动的LCD ,根据寻址电信号改变每一液晶像素的透过率,从而把电信号转换成空间的光强分布。液晶光阀可以作为实时的信号处理和显示器件,代替全息干板可进行实现计算全息图的实时输出和再现。
本文提出一种利用电寻址液晶光阀作为实时记录介质的计算机制全息图的产生方法,实验结果证明了这种方法的可行性。
1 用Matlab 软件实现傅立叶变换计算全息图
傅立叶变换全息记录的复数波面是物光波的傅立叶变换。计算傅立叶变换全息图的制作包括:对物光波抽样、离散傅立叶变换、编码、画图、图像的输出。在制作全息图的过程中,编码是最关键的一步,通过编码把二维光场的复振幅分布变换为全息图的二维透过率分布。本文以迂回相位编码来介绍编码过程。
设抽样后物光波的复振幅经过离散傅里叶变换后的频谱分布为复数F(m,n), 记为
F(m,n) = R(m,n)+iI(m,n), F(m,n) = A(m,n)·exp[i φ(m,n)] (1)
其中, A(m,n)和φ(m,n)分别代表全息图上各点的幅值和相位,
A(m,n) =),(),(22n m I n m R +, φ(m,n) =arctg[I(m,n)/R(m,n)] (2)
由于光学模板的最大透过率为1,所以在编码前还应对A(m,n)的值进行归一化,使其最大值为
1。假定将物面分为N×N 个抽样单元, 抽样间距为δx 和δy, 其间距要遵循Nyquist 判据。采用罗曼Ⅲ型编码方法,通过改变每个抽样单元内通光孔径的面积来编码振幅,通过改变通光孔径中心与抽样单元中心的位置来编码相位。最后每个像素用一个矩形孔表示,矩形孔的宽度为Wδx, 其中W 为一常数。矩形孔径的高度为Lmnδy,与归一化振幅成正比, Pmnδx 是孔径中心与单元中心的距离,并与抽样点的位相成正比。孔径参数与复值函数的关系如下,
mn L =mn A , mn P =mn φ/2πK (3)
经过计算,取W =1/2, K =1。
根据以上二元傅里叶变换全息图的实现原理,采用以下的算法思想在MATLAB 中进行二元傅里叶变换计算全息图的制作,采用罗曼Ⅲ型编码方式且以字母K 为例。其编码如下: b=zeros(128,128); %采样点阵为128X128。
b(8:120,24:40)=1;
for M=0:56
b(8+M,(96-M):(112-M))=1;
end
for N=1:56
b(64+N,(40+N):(56+N))=1;
end
%K图形用矩阵表示如上。也可选取简单图形F表示。
A=b;a=rand(128,128);
aa=exp(i*2*pi.*a);
%给矩阵图K一个随机相位,随机相位因子的作用是平滑傅立叶频谱。
AA=double(A).*aa;
Afft2=fft2(AA);
%用matlab工具箱对带有随机相位因子的K图进行快速傅立叶变换。
A1=abs(Afft2);
B2=angle(Afft2)/(2*pi);%对频谱的相位进行归一化
A1max=max(max(A1));
A1=A1/A1max; %对频谱的幅值进行归一化
s=1; %设定正方形单元的边长
figure;
axis([0 128 0 128]);
hold on;
for J=1:128
y0=s/2+(J-1)*s;
for I=1:128
x0=s/2+(I-1)*s; %计算抽样单元的中心位置
H=A1(J,I)*s; %矩形高度直接等于归一化的频谱幅值
F1=B2(J,I)*s; %偏离单元中心的量
W=s/2; %矩形宽度
if abs (F1)<=s/4
x2=x0-W/2; x3=x0+W/2; y2=y0-H/2; y3=y0+H/2;
fill([x2,x2,x3,x3],[y2,y3,y3,y2],'k');
else if F1>s/4
x22=x0+F1-W/2;x33=x0+s/2;
y22=y0-H/2;y33=y0+H/2;
fill([x22,x22,x33,x33],[y22,y33,y33,y22],'k');
x222=x0-s/2;x333=x0+F1+W/2-s;
fill([x222,x222,x333,x333],[y22,y33,y33,y22],'k');
%根据迂回相位编码原理,对φ<π/2,则直接用单元的高度表达频谱的幅值,偏移中心量表达频谱的相位。
else x22=x0-s/2;x33=x0+F1+W/2;
y2=y0-H/2;y3=y0+H/2;
fill([x22,x22,x33,x33],[y2,y3,y3,y2],'k');
x222=x0+F1-W/2+s;x333=x0+s/2;
fill([x222,x222,x333,x333],[y2,y3,y3,y2],'k');
%对开孔矩形的位置偏离中心超过,则在进行位相编码时,当φ>π/2时,为了防止与邻近的矩形
%孔发生重叠而造成全息图再现时产生失真,依据光栅衍射理论,在程序中采用了“模式溢出校%正法”,即将溢出部分移至本抽样单元的另一侧。
end
end