余弦光栅衍射的三维MATLAB仿真代码
时间: 2023-10-07 16:13:24 浏览: 49
以下是一个简单的三维余弦光栅衍射的MATLAB仿真代码:
```matlab
lambda = 633e-9; % 波长
k = 2*pi/lambda; % 波数
z = 20e-3; % 衍射距离
L = 10e-3; % 光栅尺寸
N = 256; % 像素数
dx = L/N; % 像素大小
x = linspace(-L/2,L/2-dx,N); % 坐标轴
[X,Y] = meshgrid(x,x); % 网格
% 定义光栅
d = 10e-6; % 光栅周期
m = 10; % 次级
r = L/2; % 光栅圆形半径
r1 = r - (m-1)*d/2; % 次级光栅圆形半径
r2 = r + (m-1)*d/2;
mask1 = ((X.^2 + Y.^2) >= r1.^2) & ((X.^2 + Y.^2) <= r2.^2);
mask2 = zeros(N,N);
for i = 1:m
mask2 = mask2 + cos(2*pi*i*d*(X.*cos((i-1)*2*pi/m) + Y.*sin((i-1)*2*pi/m)));
end
mask = mask1.*mask2;
% 计算衍射场
Uin = ones(N,N); % 入射场
Uout = exp(1i*k*z)/(1i*lambda*z)*fftshift(fft2(fftshift(Uin.*mask)))*dx^2; % 衍射场
I = abs(Uout).^2; % 强度分布
% 显示结果
figure;
subplot(1,2,1);
imagesc(x*1e3,x*1e3,I);
axis image;
colormap('gray');
xlabel('x (mm)');
ylabel('y (mm)');
title('Intesity distribution');
subplot(1,2,2);
surf(x*1e3,x*1e3,I);
shading interp;
axis square;
xlabel('x (mm)');
ylabel('y (mm)');
zlabel('Intensity');
title('3D plot');
```
上述代码中,首先定义了一些基本参数,如波长、衍射距离、光栅尺寸、像素数等。然后定义了一个圆形光栅,其中包括主光栅和次级光栅。使用傅里叶变换计算了衍射场,并计算了强度分布。最后通过图像显示和三维绘图展示了结果。
请注意,这只是一个简单的示例代码,实际应用可能需要根据具体需求进行修改和优化。