小P学长
小P学长

Matlab 菲涅耳/夫琅禾费衍射仿真:FFT 坐标、采样与七项验收

从 Fresnel 数和物理假设开始,用一个 632.8 nm 圆孔例子计算输入/输出采样、Airy 第一暗环和 FFT 坐标,再用能量、对称性、理论尺度与网格收敛判断 Matlab 衍射结果是否可信。

1. 先判断这个模型能不能用

以下讨论默认单色、相干、标量、傍轴和自由空间传播。如果任务涉及强非傍轴、偏振/矢量衍射、介质边界或复杂光学系统,本文的单 FFT 公式不应直接套用。先写清波长 λ、孔径特征半尺寸 a、传播距离 z、输入采样 Δx₁ 和网格数 N,并统一为米。

Fresnel 数可写为 F=a²/(λz)。这里的 a 是圆孔半径或单缝半宽;如果参考资料用直径或全缝宽,F 会相差常数倍,不能不看定义直接比阈值。F 远小于 1 通常更接近远场,F 远大于 1 通常近场特征明显;0.1 和 10 可用作保守的工程提示,不是严格物理分界。

2. 一个可手算核对的圆孔例子

λ=632.8 nm、圆孔半径 a=0.25 mmz=1 mN=1024Δx₁=5 μm。在写传播代码前,先得到:

  • Fresnel 数 F=0.09877,位于远场启发式边界附近;应保留菲涅耳结果与远场结果的对比。
  • 输入窗口 L₁=NΔx₁=5.12 mm,0.5 mm 孔径由 100 个采样点跨越,且距窗口边界有明显留白。
  • 对单 FFT 缩放实现,Δx₂=λz/(NΔx₁)=123.59 μm,输出窗口约 126.56 mm
  • 圆孔直径 D=0.5 mm,远场第一暗环半径 r₁≈1.22λz/D=1.544 mm,约有 12.5 个输出像素,足以做初步尺度对比。

这些数字不是仿真结果,而是仿真前的“预期答案”。如果图上第一暗环在 0.15 mm 或 15 mm,首先应怀疑单位、坐标或 FFT 缩放,而不是继续调色标。

3. 最小 Matlab 计算骨架

下面是夫琅禾费远场的最小骨架,已公开关键计算方法,不需要购买资料才能理解:

lambda = 632.8e-9; z = 1;
N = 1024; dx1 = 5e-6; a = 0.25e-3;
x1 = (-N/2:N/2-1) * dx1;
[X1,Y1] = meshgrid(x1,x1);
U1 = double(X1.^2 + Y1.^2 <= a^2);

F = fftshift(fft2(ifftshift(U1))) * dx1^2;
dx2 = lambda*z/(N*dx1);
x2 = (-N/2:N/2-1) * dx2;
U2 = exp(1i*2*pi*z/lambda)/(1i*lambda*z) .* F;
I2 = abs(U2).^2;

ifftshift 把以数组中心定义的孔径移到 DFT 期望的原点布局,fftshift 再把零频移回显示中心。MathWorks 说明 fft2 对矩阵计算二维离散傅里叶变换,而输出尺寸默认与输入一致。但“数组同尺寸”不等于“物理坐标同采样”;远场坐标必须由 x₂=λzf 映射。

菲涅耳单 FFT 需在输入与输出端加二次相位因子,但其输出采样仍是 λz/(NΔx₁)。角谱法等其他算法的窗口与采样关系不同,不能混用这套坐标。

4. 七项验收:不要只看归一化彩图

  1. 单位验收:打印 λ、a、z、Δx₁、Δx₂ 和两个窗口宽度,内部统一用米,显示层再换算。
  2. 孔径采样验收:孔径直径不应只有几个像素,且孔径不能触及输入窗口边界。精度任务要求应由收敛结果决定,不是死记 16 或 32 个点。
  3. 对称与中心验收:对居中圆孔和单缝,强度应以中心对称。偶数网格的中心位于样本之间,比较旋转数组时要考虑一样本循环位移,否则会把索引约定误判为物理不对称。
  4. 理论尺度验收:圆孔检查 1.22λz/D,单缝检查第一零点半宽 λz/b。先比较数值截面的第一个局部极小,不要用肉眼估彩图圈半径。
  5. 能量验收:比较 sum(abs(U1).^2)*dx1^2sum(abs(U2).^2)*dx2^2。具体容差受离散归一化、窗口截断和模型影响,但必须在修改网格时可解释,不能用每张图各自除以最大值来掩盖。
  6. 网格收敛验收:分别将 N 加倍、窗口扩大和 Δx₁ 减小,比较主瓣宽度、能量、中心截面和第一零点。一次只改一类参数,才能定位误差来源。
  7. 模型交叉验收:在 F 的过渡区同时运行菲涅耳与夫琅禾费结果。比较带物理坐标的中心截面,并记录两者从什么距离开始达到你的误差标准。

5. 六个高频错误与定位顺序

  • 图案居中但尺度差 10³ 倍:检查 nm、μm、mm 是否在进入公式前换算为 m。
  • 主瓣宽度不对:检查是否把半径 a 当成直径 D,或把单缝半宽与全宽混用。
  • 中心偏一格:核对偶数 N 的坐标定义和 ifftshift/fftshift 顺序。
  • 改 N 后图案大小突变:你可能既改了采样密度又改了物理窗口;先决定要保持 Δx₁ 还是 L₁ 不变。
  • 归一化图都很像:保留未归一化强度、积分能量和峰值,再另生成用于观察的归一化图。
  • 增大 N 仍不收敛:单纯补零会改善频域插值,但不会恢复已被粗采样丢失的孔径边缘信息;需要区分扩窗口和减小 Δx₁。

6. 何时选夫琅禾费、菲涅耳或其他方法

  • 只关心充分远场的角分布:夫琅禾费 FFT 最直接,但仍要映射物理坐标。
  • 传播距离在傍轴近场/过渡区:使用菲涅耳传播,并做相位与输出采样检查。
  • 希望输入输出保持相同采样,或需要多距离传播:可考虑角谱法,但要重新分析频率支持、倐逼分量和周期回卷。
  • 强非傍轴、高 NA 或偏振效应重要:换用适合的矢量模型,不应通过放宽 Fresnel 阈值继续使用标量傍轴模型。

7. 一手资料与使用边界

本文根据上述一手/高校公开资料独立整理,不复制论文、教材或付费教程。任何课程、研究或工程结论都应在你的环境中通过收敛、尺度和误差验收。

Matlab 衍射仿真常见问题

Matlab 菲涅耳衍射和夫琅禾费衍射应该怎么选?

先统一波长、孔径特征半尺寸和传播距离,再计算 F=a²/(λz)。F 远小于 1 通常更接近远场,F 远大于 1 时近场特征更明显;过渡区应同时计算两种模型并按自己的误差要求比较。

为什么 fft2 得到的图样尺寸对了,物理坐标却可能错?

fft2 返回的是离散频率网格,不会自动生成观察屏坐标。常见单 FFT 实现需要使用 x₂=λzf,把频率映射为长度;输出采样间隔通常为 Δx₂=λz/(NΔx₁)。

fftshift 和 ifftshift 的顺序错了会怎样?

以数组中心定义的孔径通常先用 ifftshift 移到离散变换期望的原点布局,变换后再用 fftshift 把零频移回显示中心。顺序或坐标约定不一致时,图样可能偏一格或相位错误。

圆孔衍射如何用 Airy 第一暗环验收?

在夫琅禾费、小角度条件下,直径 D 的圆孔第一暗环半径约为 1.22λz/D。数值结果应使用带物理单位的中心截面定位第一个极小值,并通过加密网格检查其收敛。

把网格 N 加倍就一定能消除混叠吗?

不一定。保持输入采样不变时,加倍 N 会扩大物理窗口;保持窗口不变时,加倍 N 才会减小输入采样。补零主要改善频域插值,不能恢复粗采样已经丢失的孔径边缘信息。

免费指南、公开样例和付费包分别包含什么?

免费指南公开公式、最小 Matlab 骨架、常见错误和验收方法;公开 CSV 展示一组参数及验收结果;付费原创包用于需要完整 Matlab/NumPy 函数、自动测试、参数表和可复跑实验结构的人。