☰
MATLAB仿真钠黄双线F-P干涉:从多光束干涉公式到条纹拍频可视化
2026/10/16 15:19:39 网站建设 项目流程

简介:这份资源面向光电信息科学与工程、物理光学方向的学生与教师,用MATLAB复现法布里-泊罗干涉实验,重点呈现钠黄双线(D1、D2)在F-P平板中形成的复杂干涉图样,对应物理光学教材图4.7。压缩包共7个文件,约280KB,包含2个m脚本、3张jpg干涉图、1份docx分析文档和1份txt说明,脚本负责参数控制与干涉场绘制,图片直观展示不同设置下的条纹变化,文档则梳理理论背景与结果分析。已有1439人学习下载,说明该案例在教学与自学中较受关注。读者可借此理解多光束干涉原理、双波长叠加对条纹的影响,并掌握用MATLAB进行光学仿真的基本流程,适合作为课程实验的替代或补充方案。

1. 钠黄双线为什么让 F-P 干涉条纹“越走越糊”

如果你在物理光学实验里调过法布里-珀罗干涉仪,大概率见过这样一个现象:用钠光灯做光源,刚开始中心视场条纹清晰锐利,可当两面平板间距逐渐拉大,条纹对比度肉眼可见地往下掉,到某个间距之后干脆糊成一片。这不是你镜子没调平,也不是隔振没做好,而是钠黄双线在 F-P 多光束干涉里给出的必然结果——它恰好是检验干涉仪分辨极限的经典样本。

这个标题要做的,就是用 MATLAB 把 F-P 平板(Fabry-Perot etalon)在钠黄双线照射下的透射干涉图样算出来、画出来,复现物理光学教材里那张“双线逐渐分开、对比度周期性消失”的图。它适合三类人:正在学物理光学、需要把公式变成可视图像的学生;做光谱仪、激光谐振腔、滤波片设计、需要快速验证多光束干涉参数的工程师;以及想用 MATLAB 搭一个可调参数光学仿真小工具、以后能迁移到其他光源的人。核心链路只有三步:写出多光束干涉的透射强度公式,把钠双线两条波长各自代入并叠加,扫描间距或角度得到条纹演化。下面从公式到代码一步步落地。

2. 从多光束干涉公式到可编程的透射强度模型

2.1 F-P 平板的透射强度到底由哪几个量决定

F-P 平板本质是两块高反射率平行板夹一层介质,光在板间反复反射、透射,多束透射光相干叠加。设板间介质折射率为 n、板间距为 d、光在板内的折射角为 θ,则相邻两束透射光的相位差为

δ = (4π n d cosθ) / λ

透射强度(Airy 公式)为

I_t = I_0 · 1 / (1 + F sin²(δ/2))

其中 F 是精细度相关的系数,由平板反射率 R 决定:

F = 4R / (1 − R)²

这里要抓住三个物理量:相位差 δ 决定条纹位置,反射率 R 决定条纹锐度(R 越大条纹越细),而波长 λ 出现在 δ 里——这正是钠双线能产生“拍”的根源。当两条波长 λ1、λ2 非常接近时,它们各自的 δ 略有不同,透射峰位置错开,叠加后总强度随 d 变化出现周期性清晰与模糊。

2.2 为什么钠黄双线是天然的“分辨率试金石”

钠黄光实际是两条靠得很近的谱线,常见取值约 λ1 = 589.0 nm、λ2 = 589.6 nm,波长差 Δλ ≈ 0.6 nm。单看一条线,F-P 透射是一组等间距锐峰;两条线叠加后,只有当它们的峰恰好重合时条纹最清晰,当一组峰落在另一组的谷里时条纹消失。这个“清晰—模糊—再清晰”的周期,直接对应干涉仪能分辨的最小波长差,也就是自由光谱范围与分辨本领的经典判据。

用 MATLAB 建模时,不需要真的去追每一束光的复振幅,只要对每个波长独立算 Airy 透射,再把两条线的强度相加即可。这是最省事也最不容易出错的做法,前提是两条线强度按实际比例给(钠双线强度接近,可先取 1:1,后面再调)。

2.3 最小可跑通的 MATLAB 脚本

下面这段脚本把公式直接翻译成代码,扫描板间距 d,输出总透射强度随 d 的变化。先跑通单点,再谈画图。

% F-P 平板钠黄双线透射强度最小示例 clear; clc; % ---- 物理参数 ---- lambda1 = 589.0e-9; % 钠双线第一条波长 (m) lambda2 = 589.6e-9; % 钠双线第二条波长 (m) n = 1.0; % 板间介质折射率(空气近似 1) R = 0.90; % 平板反射率 theta = 0; % 正入射,折射角 0 % ---- 扫描变量:板间距 d ---- d = linspace(1e-3, 5e-3, 4000); % 1 mm 到 5 mm % ---- 精细度系数 ---- F = 4*R / (1 - R)^2; % ---- 单波长 Airy 透射 ---- airy = @(lam) 1 ./ (1 + F * sin( (2*pi*n*d*cos(theta))./lam ).^2); I1 = airy(lambda1); I2 = airy(lambda2); I_total = I1 + I2; % 双线强度叠加 % ---- 快速看一眼 ---- plot(d*1e3, I_total, 'LineWidth', 1.2); xlabel('板间距 d (mm)'); ylabel('相对透射强度'); title('钠黄双线 F-P 透射随间距变化'); grid on;

逻辑说明:airy匿名函数把 δ = 4πnd cosθ/λ 直接写进 sin 里,注意这里用的是 2πnd cosθ/λ 再乘 2,等价于前面的 δ 公式,写代码时容易漏掉因子 2,这是第一个高频翻车点。参数说明:R取 0.90 是常见镀膜反射率,想看到更锐的峰可以提到 0.95 以上;d扫描范围 1–5 mm 是为了让双线拍频周期完整出现,范围太窄看不到模糊—清晰的全过程;theta先固定 0,后面做角度扫描时再改。

跑完这条曲线,你会看到总强度不是简单等幅振荡,而是包络周期性起伏——包络的谷就是双线互相填谷的位置。把I1、I2分别画出来叠在一起,能更直观看到两组峰如何错位。

3. 把双线拍频和条纹演化画成教材同款图

3.1 扫描间距 d:复现“清晰—模糊”周期

教材图 4.7 通常给的是透射强度随板间距(或干涉级次)变化的曲线,重点在双线拍频。要画得像,关键是采样密度和坐标范围。d 的扫描步长必须远小于单条谱线的峰间距,否则会漏峰甚至出现假拍频。单线峰间距对应 δ 变化 2π,即 Δd = λ/(2n cosθ) ≈ 0.29 μm(对 589 nm)。所以 d 的步长至少取 0.05 μm 量级,上面脚本用 4000 点覆盖 4 mm,步长 1 μm,其实偏粗,建议加密。

% 加密采样,突出双线拍频包络 d = linspace(1e-3, 3e-3, 200000); % 步长约 0.01 um F = 4*R/(1-R)^2; I1 = 1 ./ (1 + F*sin(2*pi*n*d/lambda1).^2); I2 = 1 ./ (1 + F*sin(2*pi*n*d/lambda2).^2); I_total = I1 + I2; figure; plot(d*1e3, I_total, 'k'); hold on; plot(d*1e3, I1, 'b', 'LineWidth', 0.5); plot(d*1e3, I2, 'r', 'LineWidth', 0.5); xlabel('d (mm)'); ylabel('强度'); legend('双线叠加','\lambda_1','\lambda_2'); title('钠黄双线 F-P 透射拍频');

参数说明:采样点从 4000 提到 200000,是因为要分辨 0.6 nm 波长差带来的微小峰位移动,点数不够时两条线的峰在图上会“粘”在一起,看不出错位。hold on叠画三条曲线,是为了让读者一眼看出总强度的包络谷来自两条线峰谷互补。如果机器内存吃紧,可以只画局部 0.2 mm 窗口,效果更清楚。

3.2 扫描角度 θ:从圆环条纹看双线分裂

实际 F-P 干涉图是同心圆环,对应不同出射角 θ。把 θ 作为扫描变量,透射强度随 θ 变化就给出径向条纹分布。双线在这里的表现是:同一级圆环会分裂成两条靠得很近的细环,间距随级次升高而变大,到某一级后两组环交错,视觉上又变回单环。

% 角度扫描:生成径向条纹强度分布 theta = linspace(0, 0.02, 5000); % 小角度范围 (rad) d_fix = 2e-3; % 固定间距 2 mm F = 4*R/(1-R)^2; I1 = 1 ./ (1 + F*sin(2*pi*n*d_fix*cos(theta)/lambda1).^2); I2 = 1 ./ (1 + F*sin(2*pi*n*d_fix*cos(theta)/lambda2).^2); I_theta = I1 + I2; plot(theta*1e3, I_theta); xlabel('出射角 \theta (mrad)'); ylabel('强度'); title('F-P 圆环径向强度(双线)');

逻辑说明:这里用 cosθ 而不是 θ 本身,因为相位差里是 cosθ,小角度下 cosθ ≈ 1 − θ²/2,条纹在中心稀疏、边缘密集,这正是圆环“中心粗、外圈细”的来源。参数说明:θ 范围取 0–20 mrad,对应可见的几个环;d_fix固定 2 mm,改大它环会更密。想得到二维圆环图,把 θ 换成半径 r,用meshgrid生成二维坐标再算即可,但一维径向曲线已经足够验证双线分裂。

3.3 用反射率 R 调条纹锐度:别把精细度当装饰

很多人画出来的条纹又胖又钝,和教材对不上,问题多半出在 R 给低了。R 直接决定 Airy 峰的半高宽,R 越高峰越尖,双线分裂才看得清。下表给出不同 R 下的定性表现,方便选参。

反射率 R精细度系数 F条纹特征双线分辨表现
0.508峰宽钝,接近正弦双线几乎分不开
0.8080峰明显变锐高间距下可见分裂
0.90360锐峰,谷区宽拍频清晰
0.951520极锐,需密采样分裂明显,易漏峰
0.989800针状峰采样不足会假象

选 R 的经验:做教材复现取 0.90 左右最稳;想演示高分辨本领取 0.95,但采样点必须同步加密,否则漏峰会让曲线看起来“随机跳动”,这是新手最常踩的坑。

4. 避坑与排查:双线仿真最容易翻车的五个地方

4.1 条纹对比度怎么调都不对

现象:画出的总强度包络没有明显起伏,或者起伏周期和预期差很多。原因:多半是两条波长差给错,或者只算了一条线。钠双线 Δλ 约 0.6 nm,若误写成 6 nm,拍频周期会缩短十倍,图完全变样。解决:先单独画 I1、I2 确认两条曲线峰位确实有微小错位,再叠加;用max(I1)-max(I2)之类检查两者是否真的不同。

4.2 曲线出现锯齿或假高频

现象:透射曲线毛刺很重,放大看是锯齿。原因:采样步长大于单线峰间距,漏掉了峰。解决:按 Δd < λ/(10 n cosθ) 估步长,589 nm 时约 0.06 μm 起步,R 越高越要加密。别心疼点数,先密后截窗口。

4.3 相位公式漏因子 2

现象:条纹间距算出来是理论值的一半或两倍。原因:δ = 4πnd cosθ/λ 里的 4π 被写成 2π,或代码里 sin 内少了平方对应的因子。解决:用已知条件反推——正入射、d 增加 λ/2 时相位应变化 2π,据此校验代码。

4.4 角度扫描条纹中心位置偏移

现象:圆环中心不在 θ=0。原因:cosθ 写成 sinθ,或 θ 单位混用度与弧度。解决:MATLAB 三角函数一律用弧度,角度转弧度用deg2rad;确认相位里是 cosθ。

4.5 双线强度比例随意设导致包络谷不深

现象:包络谷底不够低,模糊区不够模糊。原因:两条线强度比设成 1:1 但实际有差异,或叠加时忘了归一化。解决:先按 1:1 跑通,再按实际光谱强度比调整;叠加前各自除以最大值,避免量纲干扰观察。

5. 把脚本变成可复用工具的两个进阶技巧

第一个技巧是参数化封装。把波长、反射率、间距、角度都提成函数入参,以后换光源(比如换成汞灯双线)只改一行。我一般会写成fp_transmission(lambda, d, R, theta)返回强度向量,主脚本只负责扫描和画图。这样调参时不用在长脚本里翻找,也方便批量跑不同 R 做对比。

第二个技巧是用自由光谱范围做自检。F-P 的自由光谱范围 FSR = λ²/(2nd),它决定不重叠的最大波长范围。钠双线 Δλ 必须小于 FSR,否则级次重叠,仿真结果没有物理意义。跑之前先算一下:d = 2 mm、λ = 589 nm 时 FSR ≈ 0.087 nm,而 Δλ = 0.6 nm 远大于它——这说明在 2 mm 间距下双线已经跨了好几个级次,拍频正是由此而来。把这个自检写进脚本开头,能提前发现参数设得离谱的情况。

还有一个习惯:每次改完参数,先只画 0.1 mm 的局部窗口看单线峰形,确认峰锐度和间距合理,再放大到全范围看拍频。直接看全图容易被密集峰晃花眼,局部确认能省很多返工。这套流程我从最早手算相位差、到后来写脚本,一直是先局部后全局,踩过的坑基本都集中在“一上来就画全图然后怀疑公式错了”。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询