菲涅尔衍射MATLAB代码
时间: 2023-07-02 17:14:17 浏览: 139
基于MATLAB的菲涅尔衍射
以下是一个简单的菲涅尔衍射 MATLAB 代码示例:
```matlab
% 定义参数
wavelength = 632.8e-9; % 波长
distance = 1e-3; % 光源到衍射屏的距离
a = 5e-6; % 衍射屏上的孔径大小
N = 1024; % 衍射屏上的像素数
L = 10e-3; % 衍射屏的大小
k = 2*pi/wavelength; % 波数
% 创建衍射屏
x = linspace(-L/2, L/2, N);
y = linspace(-L/2, L/2, N);
[X,Y] = meshgrid(x,y);
r = sqrt(X.^2 + Y.^2);
aperture = zeros(size(r));
aperture(r<a/2) = 1;
% 计算衍射
dx = x(2) - x(1);
dy = y(2) - y(1);
dfx = 1/(N*dx);
dfy = 1/(N*dy);
fx = linspace(-N/2, N/2-1, N)*dfx;
fy = linspace(-N/2, N/2-1, N)*dfy;
[FX,FY] = meshgrid(fx,fy);
H = exp(-1i*k*distance)*exp(-1i*pi*wavelength*distance*(FX.^2+FY.^2));
U = fftshift(fft2(ifftshift(aperture)));
V = H.*U;
v = fftshift(ifft2(ifftshift(V)));
% 绘制结果
figure;
subplot(1,2,1);
imshow(aperture);
title('衍射屏');
subplot(1,2,2);
imshow(abs(v).^2, []);
title('衍射图样');
```
这段代码将创建一个圆形孔径的衍射屏,并计算其在一定距离处的菲涅尔衍射图样。您可以根据需要更改参数和孔径形状以获得不同的结果。
阅读全文