白光干涉现象在精密测量、光学检测等领域有着广泛应用,但很多初学者往往被其背后的物理概念和数学表达所困扰。本文将带你从零开始,用MATLAB亲手绘制一条完整的白光干涉曲线,通过可视化编程的方式,直观理解相干长度、光谱宽度等关键参数如何影响干涉信号。
白光干涉与单色光干涉最大的区别在于其宽光谱特性。想象一下,白光是由无数不同波长的单色光组成的"合唱团",每个"声部"(波长)都有自己的频率。当这些光波相遇时,只有在光程差接近零的极小范围内,所有波长的光波才能保持相位一致,形成明显的干涉峰。
关键参数解析:
λ(lamda):光源的中心波长,决定了干涉条纹的基本周期Δλ(d_lamda):光谱宽度,反映白光中包含的波长范围lc:相干长度,表示能产生明显干涉现象的最大光程差提示:相干长度的计算公式为 lc = λ²/Δλ,这个值越小,干涉峰越尖锐。
在开始编码前,我们需要确保MATLAB环境配置正确。推荐使用R2020b或更新版本,以获得更好的图形显示效果。
matlab复制% 检查MATLAB版本
version
必要工具包:
安装方法:
matlab复制% 检查工具包是否安装
ver('signal')
ver('curvefit')
让我们从最基本的干涉信号模型开始,逐步构建完整的白光干涉曲线。
matlab复制clc; clear; close all;
% 基本参数设置
z = linspace(-5e-6, 5e-6, 2000); % 干涉信号坐标范围
h = 0; % 干涉位置
lamda = 1550e-9; % 中心波长(1550nm)
d_lamda = 25e-8; % 光谱宽度
高斯包络反映了白光干涉信号的强度分布特性:
matlab复制% 计算相干长度
lc = lamda^2 / d_lamda;
% 高斯包络函数
gz = exp(-((z-h)*2*pi/lc).^2);
正弦分量代表了干涉条纹的精细结构:
matlab复制% 正弦调制项
cz = cos(4*pi/lamda*(z-h));
% 合成白光干涉信号
I = 3*gz.*cz + 3;
matlab复制figure;
plot(z, I, 'k', 'LineWidth', 1.5);
hold on;
plot(z, 3*gz+3.1, 'r', 'LineWidth', 2);
xlabel('光程差(m)');
ylabel('光强(a.u.)');
title('白光干涉信号及其包络');
legend('干涉信号', '包络曲线');
grid on;
通过修改关键参数,我们可以直观观察它们对干涉信号的影响。
matlab复制% 测试不同光谱宽度
d_lamda_values = [10e-8, 25e-8, 50e-8];
figure;
hold on;
for i = 1:length(d_lamda_values)
lc_temp = lamda^2/d_lamda_values(i);
gz_temp = exp(-((z-h)*2*pi/lc_temp).^2);
I_temp = 3*gz_temp.*cz + 3;
plot(z, I_temp, 'LineWidth', 1.5);
end
title('不同光谱宽度下的干涉信号');
legend('Δλ=10e-8', 'Δλ=25e-8', 'Δλ=50e-8');
观察结果:
matlab复制% 测试不同中心波长
lamda_values = [1300e-9, 1550e-9, 1800e-9];
figure;
hold on;
for i = 1:length(lamda_values)
cz_temp = cos(4*pi/lamda_values(i)*(z-h));
I_temp = 3*gz.*cz_temp + 3;
plot(z, I_temp, 'LineWidth', 1.5);
end
title('不同中心波长下的干涉信号');
legend('λ=1300nm', 'λ=1550nm', 'λ=1800nm');
关键发现:
为了更深入理解白光干涉的本质,我们可以模拟多个"激光对"的叠加效果:
matlab复制% 定义多个不同频率的正弦分量
cz1 = cos(4.1*pi/lamda*(z-h));
cz2 = cos(4.2*pi/lamda*(z-h));
cz3 = cos(4.3*pi/lamda*(z-h));
cz4 = cos(4.4*pi/lamda*(z-h));
cz5 = cos(4.5*pi/lamda*(z-h));
% 绘制结果
figure;
plot(z, cz, 'b');
hold on;
plot(z, cz1, 'g');
plot(z, cz2, 'r');
plot(z, cz3, 'c');
plot(z, cz4, 'm');
plot(z, cz5, 'y');
title('不同频率的单色光干涉条纹');
legend('λ=1550nm', 'λ≈1512nm', 'λ≈1476nm', 'λ≈1442nm', 'λ≈1409nm', 'λ≈1378nm');
物理意义解读:
表格展示了不同波长对应的条纹间距变化:
| 波长近似值(nm) | 条纹间距(μm) | 颜色代码 |
|---|---|---|
| 1550 | 0.775 | 蓝色 |
| 1512 | 0.756 | 绿色 |
| 1476 | 0.738 | 红色 |
| 1442 | 0.721 | 青色 |
| 1409 | 0.705 | 品红 |
| 1378 | 0.689 | 黄色 |
在实际操作中,可能会遇到以下情况:
问题1:图形显示不清晰
plot(..., 'LineWidth', 2)问题2:包络与信号不匹配
matlab复制% 检查相干长度计算是否正确
lc_calculated = lamda^2/d_lamda
lc_expected = 9.61e-6 % 对于λ=1550nm, Δλ=25e-8
性能优化建议:
matlab复制I = zeros(size(z)); % 预分配内存
注意:当光谱宽度Δλ接近零时,模型将退化为单色光干涉,失去白光干涉的特性。
将上述代码封装为函数,便于实际应用:
matlab复制function [I, z] = white_light_interference(lamda, d_lamda, z_range, n_points)
% 参数检查
if nargin < 4
n_points = 2000;
end
if nargin < 3
z_range = [-5e-6, 5e-6];
end
z = linspace(z_range(1), z_range(2), n_points);
h = 0;
lc = lamda^2 / d_lamda;
gz = exp(-((z-h)*2*pi/lc).^2);
cz = cos(4*pi/lamda*(z-h));
I = 3*gz.*cz + 3;
end
调用示例:
matlab复制[I, z] = white_light_interference(1550e-9, 25e-8);
plot(z, I);
在光学轮廓仪校准中,这种模拟可以帮助工程师理解仪器分辨率与光源特性的关系。例如,当我们需要检测表面高度差在纳米级的样品时,就需要选择相干长度合适的光源。