用MATLAB整点光的艺术:DIY夫琅禾费衍射图
举个实际效果:当圆孔半径设为0.5mm,激光波长632.8nm时,生成的衍射图中央是著名的爱里斑,周围环绕明暗相间圆环。把代码里的aperture换成ring_aperture,马上能看到环形孔特有的"火山口"衍射花样。最后给个调试小技巧:如果生成的图像太暗或太亮,可以调整imshow的显示范围参数[],或者改用imagesc(I.^0.3)这种伽马校正显示,比直接显示原始强度更符合人眼感知。下次
MATLAB夫琅禾费衍射强度图仿真 圆孔,圆环,矩形孔可定制。
光学实验课最劝退的环节是什么?调光路必须排前三。不过有了MATLAB,咱们可以直接用代码玩转衍射花样。今天手把手教大家用20行代码生成可定制的夫琅禾费衍射强度图,圆孔圆环矩形孔随便换!
先上核心代码框架:
`matlab
lambda = 632.8e-9; % 波长(红激光)
k = 2*pi/lambda;
d = 2e-3; % 孔径尺寸
z = 1; % 观测屏距离
[X,Y] = meshgrid(linspace(-d/2,d/2,512));
`
这波meshgrid操作生成512x512的采样网格,d控制孔径实际尺寸。比如做硬币孔衍射,把d设为硬币直径就行。
圆孔生成器:
`matlab
% 圆孔mask
R = d/2; % 孔径半径
aperture = (X.^2 + Y.^2) <= R^2;
`
判断网格点到原点距离是否小于半径,直接生成二值化圆孔。想改孔径大小?调R参数就像拧水龙头一样简单。
环形孔进阶版:
`matlab
inner_R = 0.8*R; % 内环半径

MATLAB夫琅禾费衍射强度图仿真 圆孔,圆环,矩形孔可定制。
ringaperture = ((X.^2 + Y.2) <= R^2) & ((X.^2 + Y.^2) > innerR^2);
`
两个圆相减得到环状结构,0.8这个系数控制环的粗细。改成0.5秒变甜甜圈衍射(物理系的同学别打我)。
矩形强迫症福利:
`matlab
a = 1e-3; % 长边
b = 0.5e-3; % 短边
rect_aperture = (abs(X) <= a/2) & (abs(Y) <= b/2);
`
绝对值的判断比乘方运算更高效,特别适合需要大量计算的场景。调整a/b比例可以得到从细缝到方块的连续变化。
核心计算部分:
`matlab
U = fftshift(fft2(aperture)); % 二维傅里叶变换
I = abs(U).^2; % 强度计算
imshow(log(I+1),[]); % 对数显示增强对比
`
这里有个骚操作:对强度取对数。因为实际强度跨度可能达到10^6量级,取log能让暗部细节更明显,相当于给图像自动做HDR处理。
举个实际效果:当圆孔半径设为0.5mm,激光波长632.8nm时,生成的衍射图中央是著名的爱里斑,周围环绕明暗相间圆环。把代码里的aperture换成ring_aperture,马上能看到环形孔特有的"火山口"衍射花样。
最后给个调试小技巧:如果生成的图像太暗或太亮,可以调整imshow的显示范围参数[],或者改用imagesc(I.^0.3)这种伽马校正显示,比直接显示原始强度更符合人眼感知。
完整代码打包在Github(假装有链接),修改孔径参数就能看到各种神奇的光学现象。下次组会汇报拿这个做示意图,保证老板眼前一亮——当然,别说是从CSDN抄的就行(手动狗头)。

更多推荐
所有评论(0)