首页/文章/ 详情

2-61 双缝、薄膜到多光束,怎样在一个 MATLAB GUI 里观察不同光学干涉条纹?

14分钟前浏览0

MATLAB GUI + 光程差/相位差 + Jones 偏振矢量 光学干涉仿真程序

一句话介绍: 这套 MATLAB 光学干涉仿真程序把杨氏双缝、平行平板等倾干涉、楔形平板/牛顿环/球形平板/柱形平板等厚干涉,以及 2~7 束和自定义多光束三维干涉放进同一套 GUI 中;用户修改波长、几何尺寸、折射率、入射角、偏振、相位、光束方向和计算网格后,可以直接观察干涉条纹、光强曲线、条纹间距、对比度以及三维等光强面。

先看它解决什么问题

物理光学中的干涉公式并不复杂,真正不直观的是:

参数稍微变化以后,条纹到底会怎样变化?

例如:

双缝距离增大,杨氏条纹会变密还是变疏?

平行平板厚度、折射率和入射角改变后,等倾条纹怎样移动?

空气楔、牛顿环和曲面薄膜为什么会形成完全不同的等厚条纹?

从两束光增加到三束、四束甚至七束光以后,空间光强分布会变成什么样?

如果各束光的传播方向、偏振、初始相位和振幅都可以改变,三维干涉结构又会怎样变化?

当前程序把这些问题统一成一条很清楚的仿真链:

输入波长与结构/光束参数 → 计算光程差或复电场 → 转换为相位关系 → 求空间光强 → 绘制二维条纹/曲线或三维等光强面

因此它并不是只有一张固定干涉图,而是一套可以直接调参数观察变化规律的:

物理光学干涉现象教学与参数实验 GUI。

1. 当前工程里真正包含哪些干涉模块?

主入口是 Start.m。

从这个界面可以进入四条主线:


主模块

当前程序中的具体内容

杨氏双缝干涉

波长、缝屏距离、双缝间距可调,输出条纹、光强分布、条纹间距和对比度

等倾干涉

平行平板干涉,平板厚度、波长、折射率、入射光强、最大入射角和反射率可调

等厚干涉

继续分成楔形平板、牛顿环、球形平板、柱形平板四种结构

任意光束干涉

包含 2~7 光束预设,以及传播方向、偏振、相位、振幅和三维网格均可设置的计算界面

对应的核心程序并不是全部挤在一个脚本中,而是采用 GUI 与计算函数分离的方式。

其中最重要的几组文件是:


文件

作用

Start.m

总入口和四个干涉模块导航

test8.m、call_back8.m

杨氏双缝 GUI 与计算

test1.m、call_back1.m

平行平板等倾干涉

test6.m

等厚干涉四种结构的选择界面

test2.m~test5.m

四种等厚干涉 GUI

call_back2.m~call_back5.m

对应的光程差和光强计算

softn.m、three.m

多光束三维干涉参数界面与核心计算

Interplot.m、Interplot1.m

三维等光强面显示

Intensity_two.mat~Intensity_seven.mat

工程自带的 2~7 光束预计算结果

这也是当前工程最明显的特点:

二维经典干涉现象 + 三维多光束空间干涉都包含在同一个项目中。

2. 不同干涉模块背后,其实共用什么计算思路?

虽然双缝、薄膜、牛顿环和多光束看起来差别很大,但前几类经典干涉在程序里都围绕同一个核心关系展开:

光程差 δ → 相位差 Φ → 光强 I

相位差与光程差之间满足:

Φ = 2πδ / λ

其中 λ 是波长。

只要空间位置改变以后两束光的光程差发生变化,相位差就会跟着变化,于是出现明暗相间的干涉条纹。

程序还统一使用条纹对比度:

K = (Imax - Imin) / (Imax + Imin)

所以二维模块除了画条纹,通常还会进一步给出:

最大光强;最小光强;条纹对比度;部分模型中的条纹间距;

光强随角度、半径或位置的变化曲线。

多光束模块则把这一思路继续扩展为:

先分别建立每束光的复电场,再把所有光束相干叠加,最后求三维空间中的总光强。

3. 杨氏双缝模块怎样从三个参数生成条纹?

杨氏双缝对应 test8.m 和 call_back8.m。

GUI 打开后的主要输入是:


参数

初始值

入射波长 λ

632.8 nm

缝到屏幕距离 D

3 m

双缝距离 d

2 mm

当前程序并不是直接使用一阶近似求每个位置的相位,而是先计算观察点到两个缝的实际距离:

L₁ = √[(x - d/2)² + D²]

L₂ = √[(x + d/2)² + D²]

再得到:

Φ = 2π(L₂ - L₁) / λ

最终使用:

I = 4cos²(Φ/2)

形成屏幕上的明暗条纹。

另一方面,GUI 单独输出条纹间距:

e = λD / d

按照当前默认值:

λ = 632.8 nm,D = 3 m,d = 2 mm

复算得到:e ≈ 0.9492 mm

也就是说,程序默认参数下相邻条纹的理论间隔约为 0.95 mm。

当前 101 个计算位置覆盖中心两侧约 5 个条纹间距,同时给出二维条纹图和光强随屏幕位置变化的曲线。

理想模型下最大、最小光强接近 4 和 0,因此默认条纹对比度接近:K ≈ 1

这正对应理想等强相干双光束能够形成非常清晰的明暗条纹。

4. 平行平板的等倾干涉为什么会形成环状条纹?

等倾干涉对应 test1.m 和 call_back1.m。

GUI 初始参数包括:


参数

初始值

平板厚度

0.25 mm

波长

632.8 nm

折射率 n

1.5

入射光强

1

最大入射角

8.59°

反射率 R

0.8

程序还固定设置:

观察透镜焦距 f = 0.2 m

对于焦平面上的每个位置,程序先由半径 r 得到对应入射倾角关系,再计算平板中的光程差:

δ = 2nh / √(1 + r²/f²)

随后:

Φ = 2πδ / λ

由于同一个半径上的点对应相同倾角,也就对应相同光程差,因此结果自然表现为:

以中心为对称轴的等倾干涉环。

源码内部同时计算了一个包含反射率影响的 B,但当前实际显示的条纹、光强曲线以及对比度使用的是 Ba:

Ba = 4R·Im·sin²(Φ/2)

因此阅读当前结果时应以源码实际绘制的Ba分布为准,而不能把界面直接理解成完整的多光束 Fabry–Pérot 强度计算。

5. “等厚干涉”为什么还要继续分成四种结构?

点击主界面的“等厚干涉”后,test6.m 会继续提供四种模型:

楔形平板 → 牛顿环 → 球形平板 → 柱形平板

它们都属于等厚干涉,是因为条纹位置主要由局部薄膜厚度决定。

区别在于:不同几何表面产生了不同的厚度分布,所以最终条纹形状不同。

当前程序可以概括为:


模型

厚度怎样变化

主要条纹特征

楔形平板

沿一个方向近似线性变化

近似等间距直条纹

牛顿环

厚度随离中心半径变化

同心圆环

球形平板

二维球面几何形成厚度变化

二维曲面干涉分布

柱形平板

主要沿一个截面方向改变

一维方向明显变化的条纹

因此这里真正被比较的不是四套完全不同的干涉理论,而是:

同一套薄膜光程差关系,在四种几何厚度函数下会形成什么图案。

6. 楔形平板为什么会出现近似等间距条纹?

楔形平板对应 test2.m 和 call_back2.m。

界面初始输入为:

波长:548 nm;入射光强:1;折射率:1.5;楔角输入:0.5;最小厚度:0。

程序先根据楔角计算相邻条纹的理论间距:

e = λ / (2nα)

再沿楔面建立 101 个位置,利用局部厚度计算:

δ = 2n(h + Hmin) + λ/2

最后得到:

I = 4Im·cos²(Φ/2)

因为理想楔面的厚度基本随位置线性增加,所以满足相同光程差条件的位置也近似等距离排列,于是形成规则直条纹。

这里有一个使用时需要特别注意的源码细节:

界面把楔角标为“角度”,但call_back2.m内部对楔角采用了额外的1000×10⁻⁵/60换算;同时函数返回的e没有再乘 1000,而界面结果旁标注的是 mm。

因此这一模块非常适合观察:

楔角、波长和折射率改变以后条纹疏密怎样变化

但如果要把界面中的条纹间距直接作为严格工程尺寸使用,建议先统一楔角与条纹间距的单位定义。

7. 牛顿环在当前程序里是怎样算出来的?

牛顿环对应 test3.m 和 call_back3.m。

GUI 文本框打开后的主要参数为:

波长:500 nm;最小介质层厚度:5 mm;曲率半径:5 m;介质折射率:1.5。

程序建立一个:

200 × 200的二维网格,x、y 均覆盖约:-5 mm~5 mm

然后根据离中心距离得到球面与平面之间的厚度变化:

h(r) = h₀ + R - √(R² - r²)

对应光程差为:

δ = 2nh(r) + λ/2

再转换成:

I = cos²(Φ/2)

因为 h 只和半径 r 有关,而与圆周方向的位置无关,所以:

相同半径 → 相同厚度 → 相同光程差 → 相同光强

这就是程序最终形成同心环的直接原因。

除了二维牛顿环图,程序还绘制:

光强随条纹半径变化的曲线

因此它不只是看“环长什么样”,还可以直接观察半径方向的周期性明暗变化。

8. 球形平板和柱形平板改变的到底是什么?

test4.m / call_back4.m 模拟球形平板,test5.m / call_back5.m 模拟柱形平板。

两者仍然遵循:

局部厚度 → 光程差 → 相位差 → 光强

真正变化的是局部厚度函数。

球形平板默认采用:

λ = 632.8 nm;n = 1.5;半径 R = 5 mm;最小厚度 Hmin = 5 mm;入射光强 = 1。

程序在二维区域中根据球面几何得到 h,再计算:

δ = 2nh + λ/2

最终形成二维干涉条纹。

柱形平板默认采用:

λ = 632.8 nm;n = 1.5;曲率半径 R = 6 mm;最小厚度 Hmin = 5 mm;入射光强 = 1。

它使用 5000 个位置描述一个截面的曲面高度,并输出条纹图以及光强随中心距离的变化。

简单理解:

球面结构主要表现为二维径向厚度变化,而柱面结构更强调一个截面方向上的曲率变化,所以最终条纹空间形态也不同。

9. 任意光束干涉为什么比前面的模块复杂得多?

前面的双缝和薄膜模块,本质上都是针对特定几何结构直接写出光程差。

softn.m 和 three.m 做的事情不同:

它不再预先规定“必须是双缝”或“必须是某种薄膜”,而是直接从每束光的传播方向、偏振和相位出发,在三维空间中叠加电场。

界面可以输入:

干涉波长;光束数目;Phi;Gamma;与 z 轴夹角;初始相位;

xy 平面投影角;各束光电场强度;三个方向的计算格点数;

三个方向的空间分辨率;三维等光强面的显示阈值。

其中 Phi 和 Gamma 被用于构造每束光的 Jones 偏振矢量。

程序先建立局部偏振矢量,再根据光束方向旋转到统一三维坐标系,因此不仅考虑:光传播方向

还考虑:不同光束之间的偏振关系。

这也是它与前面二维经典实验模块最大的区别。

10. 多光束在三维空间里具体怎样叠加?

对于前 N-1 束光,程序根据与 z 轴夹角和 xy 平面投影角构造传播方向:

kⱼ = [sinθⱼcosφⱼ, sinθⱼsinφⱼ, cosθⱼ]

同时由 Phi、Gamma 构造 Jones 偏振状态,并通过旋转矩阵转换到全局坐标系,得到每束光的偏振矢量 eⱼ。

单束光在空间位置 r 上可以概括为:

Eⱼ(r) = Aⱼeⱼ·exp[-i(2πkⱼ·r/λ + δⱼ)]

然后:

Etotal(r) = ΣⱼEⱼ(r)

总光强取决于总复电场与其共轭的乘积。

当前 three.m 并没有先把所有电场相加再求平方,而是直接使用两层 k/l 循环展开所有光束之间的互相关项。

于是每一个三维格点都需要经历:

遍历全部光束对 → 计算相位 → 计算偏振内积 → 累加光强

如果有 N 束光,一个空间点上的光束组合计算量大致随:N²增加。

再叠加 Nx×Ny×Nz 个三维格点后,计算量自然明显高于前面的二维经典干涉模块。

11. “任意光束”实际上有没有内部约定?

从当前真正被 softn.m 调用的 three.m 来看,程序对最后一束光做了特殊处理:

最后一束光的传播方向固定为 z 轴;

偏振使用 [1, i, 0] 形式的圆偏振中心光束;

前面的 N-1 束光才按用户输入的空间角度和 Jones 参数建立。

因此当前“任意光束干涉”更准确的理解是:

多束可调入射光 + 一束沿 z 轴传播的中心参考光。

另外,源码虽然计算了:del1 = del·π/180

但真正进入复指数计算的仍是原始 del,并没有使用 del1。

这意味着:

当初始相位全部为 0 时没有影响;一旦输入非零初始相位,界面参数的“度/弧度”语义需要先统一。

如果后续希望用它进行严格的非零相位定量实验,这一点值得优先修正。

12. 工程自带的 2~7 光束结果实际是什么规模?

工程不是只留下源码,还附带了 2~7 光束的 .mat 三维结果,可由“示例”菜单直接加载。

读取当前文件得到:


示例

三维矩阵规模

保存结果实部范围

双光束

41×41×41

0.586~3.414

三光束

41×41×41

1.000~4.995

四光束

21×21×41

0.109~8.375

五光束

21×21×41

0.181~9.172

六光束

21×21×41

1.035~19.241

七光束

21×21×41

0.501~18.340

这些数据的虚部最大只有约 10⁻¹⁵ 数量级,可以视为浮点计算留下的数值误差,因此保存矩阵实际表现为实数光强场。

这里的强度属于程序内部的相对光强量,并没有经过实验功率、探测器响应等物理标定。

Intensity.mat 还保存了一组 21×21×41 的计算结果,实部约为:0.041~6.575

当用户从任意情况界面重新点击 Run 时,当前结果会继续以变量 mInten 保存到 Intensity.mat。

13. 三维干涉结果为什么显示成“空间结构”而不是普通曲线?

three.m 得到的是一个三维矩阵:mInten(x, y, z)

所以已经不能再像杨氏双缝那样只画一条光强曲线。

当前程序先使用 smooth3 对三维光强数据做平滑,然后根据用户设置的阈值 I 提取:

I(x,y,z) = Ithreshold

对应的空间等值面。

阈值越高,显示的是更高强度区域;

阈值降低,则会包含更多空间区域。

这也是为什么 2~7 光束预设分别使用了不同的显示阈值,例如 3、5、6、11 等,而不是所有结果固定使用同一个值。

14. 这套程序适合用在哪里?

物理光学课程教学

它把杨氏双缝、等倾、等厚和多光束干涉放在同一套程序里,而且波长、几何参数和折射率可以直接修改。

因此非常适合用来回答:

“公式中的某个参数改变以后,条纹实际上会怎么动?”

比只看静态教材图更直观。

干涉参数敏感性实验

杨氏双缝中的 λ、D、d,薄膜干涉中的 n、厚度和曲率半径,都已经开放为 GUI 参数。

因此可以方便地做:

改变一个参数 → 重新计算 → 比较条纹疏密、半径和光强变化

这类数值实验。

多光束空间干涉与光学晶格概念演示

任意光束模块进一步考虑了:

光束传播角;xy 投影方向;偏振状态;电场振幅;初始相位;三维计算区域。

它适合用来观察多束相干光叠加后形成的空间周期结构,以及不同光束配置对三维等光强面的影响。

光学干涉算法原理验证

源码把:

光程差法、Jones 偏振描述、复电场叠加和三维等值面显示

都直接写了出来,因此也适合课程设计、物理光学程序实验以及干涉算法的二次开发。

需要说明的是,当前工程属于理想化数值仿真,没有加入实际光源带宽、噪声、像差、探测器响应和实验标定,因此更适合:

教学、离线仿真和方案原理验证

而不是直接作为精密光学测量软件使用。

15. 哪些参数最值得修改?

当前程序中真正值得做对比实验的,是那些会直接改变光程差、相位关系或空间光场结构的参数。


参数

当前示例

为什么值得改

调整后的主要影响

波长 λ

双缝 632.8 nm;多光束 3.82 μm

直接进入相位和条纹周期

波长增大通常使空间条纹尺度增大

双缝 D、d

3 m、2 mm

直接控制杨氏条纹间距

D 增大条纹变疏,d 增大条纹变密

薄膜厚度、n、曲率半径

各模块不同

决定薄膜光程差分布

改变条纹位置、半径和疏密

多光束方向与偏振参数

2~7 束预设

决定各束光的空间相位与偏振耦合

可明显改变三维干涉结构

网格 n、分辨率 s、阈值 I

常见 20/40 格点、0.5 μm

控制计算区域、计算量和显示等值面

网格加密更细致但计算明显变慢;阈值主要改变显示区域

如果做多光束实验,最值得联动修改的是:光束方向 + 偏振 + 相位 + 振幅

因为三维结构来自所有光束的共同相干叠加,而不是由某一个参数单独决定。

16. 怎么运行这套程序?

将压缩包中的 Inerfencece 目录完整保留,并把 MATLAB 当前工作目录切换到该目录。

建议直接运行:Start

主界面出现后即可选择:

杨氏双缝干涉 / 等倾干涉 / 等厚干涉 / 任意光束干涉

杨氏、等倾和各等厚模块中,修改参数后点击 Run 即可重新计算。

等厚干涉会先进入 test6.m 的结构选择页,再进入楔形平板、牛顿环、球形平板或柱形平板。

17. 一句话看懂这个项目

这是一个光学干涉 GUI 仿真系统:主界面同时包含杨氏双缝、平行平板等倾干涉、楔形平板/牛顿环/球形平板/柱形平板等厚干涉和多光束三维干涉;二维模块主要按“几何结构 → 光程差 δ → 相位差 Φ → 光强 I”生成条纹,并可输出对比度和部分模型的条纹间距,其中杨氏双缝在 λ=632.8 nm、D=3 m、d=2 mm 时条纹间距约为 0.9492 mm;多光束模块则利用 Jones 偏振矢量、三维传播方向和复电场相干叠加计算空间光强,工程还自带 2~7 光束三维结果文件,可通过等光强面直接观察空间干涉结构,因此整套程序尤其适合物理光学教学、参数敏感性实验、多光束干涉原理演示和课程设计二次开发。


来源:MATLAB学习与应用
二次开发光学MATLAB电场理论控制曲面
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-11-12
最近编辑:14分钟前
explicit-z
硕士 工种号:MATLAB学习与应用
获赞 215粉丝 79文章 348课程 6
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈