不同孔径的菲涅尔和夫琅禾费衍射matlab仿真
时间: 2024-10-20 12:19:49 浏览: 76
在MATLAB中,菲涅尔衍射和夫琅禾费衍射通常用于模拟光通过小孔或透镜等光学元件后的传播情况。这两种衍射现象描述了光波遇到障碍物时的分布变化。
1. **菲涅尔衍射** (Fresnel Diffraction): 当光波经过孔径较小的障碍物时,由于衍射效应,会出现明暗相间的图案。MATLAB中有`frd`函数可以生成菲涅尔衍射模式,例如:
```matlab
aperture = ones(size(x,1),size(x,2)); % 创建圆形孔径
x = linspace(-L,L,N); y = x'; % 坐标网格
f = frd(aperture,x,y,'Circular'); % 菲涅尔衍射计算
imshow(f);
```
其中,`aperture`表示孔径函数,`x`和`y`是坐标变量,`L`是区域大小,`N`是采样点数。
2. **夫琅禾费衍射** (Fraunhofer Diffraction): 对于远场衍射,如光通过大孔径或无穷远处观察,通常使用夫琅禾费衍射公式。这涉及到离焦距的影响,MATLAB的`fftshift`和`ifft2`函数可用于这种场景下的计算,并结合`fspecial('rectangle')`创建矩形孔径。
```matlab
pupil = fspecial('rectangle', [aperture_size aperture_size]); % 矩形孔径
[rows, cols] = size(pupil);
u = -L/(0.5*(rows-1))*(col-cols/2); % 远场距离和空间频率
v = -L/(0.5*(rows-1))*(row-rows/2); % 对应的行坐标
H = ifft2(fftshift(pupil).*exp(1i*2*pi*u.*v)); % 计算夫琅禾费衍射
imagesc(u,v,abs(H));
```
阅读全文