在matlab中用fft2函数绘制圆孔的法力恢复衍射图并输出2D频谱图
时间: 2023-07-15 16:12:43 浏览: 118
以下是在MATLAB中用fft2函数绘制圆孔的法力恢复衍射图并输出2D频谱图的代码示例:
```matlab
% 定义参数
wavelength = 0.5e-6; % 波长
k = 2*pi/wavelength; % 波数
d = 1e-3; % 孔径直径
L = 1e-2; % 采样平面尺寸
N = 512; % 采样点数
dx = L/N; % 采样间隔
% 生成采样平面
x = linspace(-L/2, L/2, N);
y = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x, y);
% 生成圆孔
r = d/2;
mask = zeros(N);
for i = 1:N
for j = 1:N
if sqrt((i-N/2)^2 + (j-N/2)^2) <= r
mask(i,j) = 1;
end
end
end
% 计算传播因子
H = exp(1i*k*(X.^2 + Y.^2)/(2*L));
% 计算衍射场
U = mask.*H;
% 计算频谱
U_fft = fftshift(fft2(U))*dx^2;
% 绘制法力恢复衍射图
figure;
imagesc(x, y, abs(U).^2);
axis equal tight;
colormap gray;
xlabel('x (m)');
ylabel('y (m)');
title('Fraunhofer diffraction pattern of circular aperture');
% 绘制2D频谱图
figure;
imagesc(x, y, abs(U_fft));
axis equal tight;
colormap jet;
xlabel('k_x (m^{-1})');
ylabel('k_y (m^{-1})');
title('2D frequency spectrum of circular aperture');
```
代码中,首先定义了参数:波长、波数、孔径直径、采样平面尺寸、采样点数和采样间隔。然后生成采样平面,并在平面上生成圆孔。接着计算传播因子和衍射场,并用fft2函数计算频谱。最后分别绘制法力恢复衍射图和2D频谱图。
阅读全文