matlab方孔的夫琅和费衍射
时间: 2025-01-05 08:32:00 浏览: 8
### 方孔夫琅和费衍射的Matlab实现
为了在 Matlab 中模拟方孔的夫琅和费衍射,可以采用数值积分的方法来求解衍射场分布。具体来说,可以通过定义空间频率域中的传播函数并应用快速傅里叶变换 (FFT) 来高效地完成这一过程。
#### 定义参数与初始化变量
首先设定一些基本物理常数以及实验条件下的几何尺寸:
```matlab
lambda = 632.8e-9; % 波长(He-Ne激光器)
Z1 = 10; % 衍射屏到接收面的距离(m)
a = 1e-3; % 孔径宽度(m)
b = a; % 假设方形孔为正方形
dx = dy = lambda * Z1 / (10*a); % 计算步长
N = 512; % FFT网格大小
```
#### 构建入射波前相位因子矩阵
创建一个二维数组表示透光区域内的复振幅分布情况:
```matlab
[x,y] = meshgrid(-N/2:N/2-1,-N/2:N/2-1);
x = x*dx;
y = y*dy;
transmission_function = zeros(N,N);
% 设置矩形孔位置处透过率等于1
rect_mask = abs(x)<=(a/2) & abs(y)<=(b/2);
transmission_function(rect_mask)=exp(1i*0*pi/(180));
```
此处假设所有通过狭缝的光线均沿原方向前进而不发生偏折[^2]。
#### 应用远场近似公式进行频谱转换
根据菲涅耳-基尔霍夫衍射原理,在满足一定条件下可简化为如下表达式:
\[ U(\xi,\eta)\propto\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}u(x',y')e^{-ikr}/r \, dx'dy'\]
当\( r=\sqrt{(X-x')^2+(Y-y')^2+Z_1^2}\approx Z_1-(xx'+yy')/\left(Z_1\right)+O[(x'/Z)^2]\),则上式变为:
\[U(\xi ,\eta )=C e^{ikz}\frac{e^{ik(X^2+Y^2)/2Z}}{\lambda Z}
\cdot FT[u(x,y)]|_{f_x=X/Z,f_y=Y/Z},\]
其中 \(FT[]\)代表对括号内函数做二维傅立叶变换操作;\( C \) 是比例系数。
因此可以直接调用MATLAB内置fftshift() 和 fft2() 函数来进行上述运算:
```matlab
k = 2*pi/lambda;
propagation_factor = exp(i*k*(x.^2+y.^2)/(2*Z1));
far_field_pattern = propagation_factor .* transmission_function;
pattern_in_frequency_domain = fftshift(abs(fft2(far_field_pattern)).^2);
```
最后绘制强度图展示最终结果:
```matlab
figure();
imagesc([-N/2 N/2]*dx/N*Z1,[-N/2 N/2]*dy/N*Z1,pattern_in_frequency_domain);
axis equal tight;
xlabel('横向坐标 X/mm');
ylabel('纵向坐标 Y/mm ');
title(['Intensity Distribution of Square Aperture Fresnel Diffraction at Distance ', num2str(Z1), 'm']);
colorbar;
colormap jet;
```
此段代码实现了对方孔夫琅禾费衍射模式的仿真,并展示了不同位置上的相对光强变化趋势。
阅读全文