AHU-HoloLab / HoloLib-MATLAB

计算机生成全息图(CGH)MATLAB函数库
GNU General Public License v3.0
58 stars 17 forks source link

使用范例里面——菲涅尔全息图中的文件FresnelHologram.m #9

Open westail opened 7 months ago

westail commented 7 months ago

我把FresnelHologram.m中的波长,距离等都设置好,就像代码中的那样,调用了库函数souces中的iterFresnel.m ;propDFFT.m ;recFresnel.m等,显示也是没有问题的,比如我输入黑字白底的“A”,我把iterFresnel.m 中的代码res_angle1 = mod(angle(H),2*pi)改成了相位256级或者8级的灰度(目的是我想把迭代的纯相位带到仿真软件中,比如CST中,每一个相位有一个独一无二的模型结构相对应); Matlab得出的也是“A”相位等级越多越清晰。但是放在CST仿真软件中,在相同的z处,相同的波长照射,相同的单元尺寸,和与纯相位相近的相位(但是振幅不严格相等,最大和最小透射率为60%和35%),就是仿真看不到“A”的类似结果,我现在也尝试了很多办法还是解决不了。 我就是想确认一下这几个菲涅尔迭代的程序没有问题吗,这些完整程序的来源是师兄自己编写的还是哪些课题组验证过的?我本人比较菜就是能看懂部分内容,有的比如DFFT傅里叶二次算法我是真搞不懂,您的回答要是肯定,我就把注意力集中到其他方面,非常感谢您的回答

XuRulin commented 3 months ago

不好意思这么久看到你的issues,我离开课题有年了。二次傅里叶变换算法是经过验证的没有发现问题。我之前将DFFT算法生成的相位图去构建超表面,在Lumerical FDTD Solutions(现在应该叫Ansys Lumerical了吧)中也验证过。我建议你先试试iterFourier.m,在CST中远场位置观察一下是否有图像,因为DFFT算法也是有一些近似关系在里面,不一定能在你设置的位置看到(和你的调制单元结构尺寸有一些关系)

westail commented 3 months ago

首先感谢师兄的回答。这期间我又试了基于PB相位理论的超表面,简单来说就是超表面结构可以严格满足透射振幅相等,相位连续可调。而且我又把师兄propDFFT.m中菲涅尔传播-两次傅里叶计算法方法,改成了“基于菲涅尔衍射积分的光场传输具体来说是瑞利-索墨菲积分公式 (计算结果较准确,但计算速度较慢),这个公式可以在近场有好的效果(倾斜因子可以不是1),在MATLAB中效果很好,但是同样放在CST中仿真,真是一点效果也没有,虽然我不是主要研究这个课题,但是大毕业论文用超表面实现这个可以是一小部分内容,有点崩溃,我看别人的文章中也有用FDTD实现超表面对GS全息图的验证的,我真不知道该怎么办了,最近这个还带了一个本科毕业论文也是其中一部分内容,课题组没人做过这个,就是没实验条件没有空间光调制器验证,只能仿真验证,但是电脑内存不足,尺寸中等的超表面也仿真不了,小的又完全对不上。自己能力也有限,我只能网上找资料再改部分程序,所以现在我不知道是CST不适合仿真这种,还是真的代码哪里有问题,心里难受

westail commented 3 months ago

另外师兄说的迭代傅里叶远场是不是无穷远观察面,如果需要近距离观察,需要一个透镜组成2f光路观察;另一个问题是,师兄所在课题组一般验证这些是不是绝大部份都用的空间光调制器。如果空间光调制器和观察平距离比较远比如3-10m,这个时候用迭代傅里叶还是迭代菲涅尔比较好?因为通过您的程序和我改动的都发现迭代菲涅尔算不远不近距离复现图像效果较好,太远反而效果不好;如果是GS傅里叶,这么远的距离,实验上,中间还需要加一个傅里叶透镜吗?我看B站上面有一些做实验的比如索雷博空间光调制器实验光路中间就没有透镜,距离大效果也不错

XuRulin commented 3 months ago

另外师兄说的迭代傅里叶远场是不是无穷远观察面,如果需要近距离观察,需要一个透镜组成2f光路观察;另一个问题是,师兄所在课题组一般验证这些是不是绝大部份都用的空间光调制器。如果空间光调制器和观察平距离比较远比如3-10m,这个时候用迭代傅里叶还是迭代菲涅尔比较好?因为通过您的程序和我改动的都发现迭代菲涅尔算不远不近距离复现图像效果较好,太远反而效果不好;如果是GS傅里叶,这么远的距离,实验上,中间还需要加一个傅里叶透镜吗?我看B站上面有一些做实验的比如索雷博空间光调制器实验光路中间就没有透镜,距离大效果也不错

你说的很对!用SLM(空间光调制器)想在近距离,远场观察道远场的像,需要增加一个透镜,组成2f光路。比如当时我用的SLM像素尺寸大概3μm左右,远场大概在1600m,太远了不现实,所以通过一个透镜实现傅里叶变换(如果距离足够远不需要透镜也没有问题)。远场观察要用迭代傅里叶算法。迭代菲涅尔有一个距离参数,可以不需要透镜就可以在你设置的距离上成像(近场)。

XuRulin commented 3 months ago

首先感谢师兄的回答。这期间我又试了基于PB相位理论的超表面,简单来说就是超表面结构可以严格满足透射振幅相等,相位连续可调。而且我又把师兄propDFFT.m中菲涅尔传播-两次傅里叶计算法方法,改成了“基于菲涅尔衍射积分的光场传输具体来说是瑞利-索墨菲积分公式 (计算结果较准确,但计算速度较慢),这个公式可以在近场有好的效果(倾斜因子可以不是1),在MATLAB中效果很好,但是同样放在CST中仿真,真是一点效果也没有,虽然我不是主要研究这个课题,但是大毕业论文用超表面实现这个可以是一小部分内容,有点崩溃,我看别人的文章中也有用FDTD实现超表面对GS全息图的验证的,我真不知道该怎么办了,最近这个还带了一个本科毕业论文也是其中一部分内容,课题组没人做过这个,就是没实验条件没有空间光调制器验证,只能仿真验证,但是电脑内存不足,尺寸中等的超表面也仿真不了,小的又完全对不上。自己能力也有限,我只能网上找资料再改部分程序,所以现在我不知道是CST不适合仿真这种,还是真的代码哪里有问题,心里难受

这个问题一开始我也遇到过,我们课题组把计算机升级内存到128GB问题得到缓解,但是太大的超表面也是无法仿真。我建议可以把原图设的小一点简单一点,比如16×16pix,图像就是一个白点。 #FDTD-Solutions-Script-Library我用的这个代码构建FDTD超表面仿真文件,CST应该可以借鉴一下,相信自己别灰心多试试,我看过用CST仿真全息超表面的。