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