矩孔菲涅尔衍射 matlab,圆孔矩孔的菲涅尔衍射模拟(matlab实现)-工程光学.docx
时间: 2023-06-20 16:05:34 浏览: 130
抱歉,我无法查看或提供任何文档或文件。但我可以向您提供一些相关的 Matlab 代码示例,来进行矩形孔和圆形孔的菲涅尔衍射模拟。
矩形孔的菲涅尔衍射模拟:
```matlab
% 定义物平面参数
a = 0.1; % 物平面边长
N = 256; % 像素数
dx = a/N; % 物平面像素间距
x = (-a/2+dx/2):dx:(a/2-dx/2); % 物平面像素坐标
y = x;
% 定义孔参数
b = 0.05; % 孔宽
c = 0.05; % 孔高
u = rect(x/b)*rect(y/c); % 孔函数
% 计算菲涅尔衍射
lambda = 0.6328e-6; % 波长
z = 2e-3; % 距离物平面的距离
k = 2*pi/lambda; % 波数
f = exp(-1i*k*z)/(1i*lambda*z); % 焦距
h = dx^2/(1i*lambda*z)*fftshift(fft2(u)); % 平面波前
H = exp(1i*k/(2*z)*(x.^2+y.^2))/sqrt(1i*lambda*z).*h.*exp(1i*k*z)/(1i*lambda*z); % 球面波前
I = abs(f)^2*abs(H).^2; % 菲涅尔衍射强度
% 显示结果
figure;
subplot(1,2,1);
imagesc(x,y,abs(u).^2);
axis image;
title('物平面');
subplot(1,2,2);
imagesc(x,y,I);
axis image;
title('像平面');
```
圆形孔的菲涅尔衍射模拟:
```matlab
% 定义物平面参数
a = 0.1; % 物平面边长
N = 256; % 像素数
dx = a/N; % 物平面像素间距
x = (-a/2+dx/2):dx:(a/2-dx/2); % 物平面像素坐标
y = x;
% 定义孔参数
r = 0.05; % 孔半径
u = circ(x,y,r); % 孔函数
% 计算菲涅尔衍射
lambda = 0.6328e-6; % 波长
z = 2e-3; % 距离物平面的距离
k = 2*pi/lambda; % 波数
f = exp(-1i*k*z)/(1i*lambda*z); % 焦距
h = dx^2/(1i*lambda*z)*fftshift(fft2(u)); % 平面波前
H = exp(1i*k/(2*z)*(x.^2+y.^2))/sqrt(1i*lambda*z).*h.*exp(1i*k*z)/(1i*lambda*z); % 球面波前
I = abs(f)^2*abs(H).^2; % 菲涅尔衍射强度
% 显示结果
figure;
subplot(1,2,1);
imagesc(x,y,abs(u).^2);
axis image;
title('物平面');
subplot(1,2,2);
imagesc(x,y,I);
axis image;
title('像平面');
```
代码中使用了 `rect` 和 `circ` 函数,分别表示矩形和圆形孔的函数形式。可以通过以下代码添加到 Matlab 中:
```matlab
function y = rect(x)
y = abs(x)<=0.5;
end
function z = circ(x,y,r)
z = sqrt(x.^2+y.^2)<=r;
end
```
希望这些代码能够对您有所帮助。
阅读全文