在matlab中用fft2函数绘制圆孔的法力恢复衍射图
时间: 2023-07-15 14:12:48 浏览: 82
在 MATLAB 中,可以使用 `fft2` 函数来计算二维傅里叶变换,并绘制圆孔的法力恢复衍射图。以下是一个示例代码:
```matlab
% 定义圆孔半径和采样点数
r = 10; % 圆孔半径
N = 256; % 采样点数
% 生成圆孔干涉场
[X, Y] = meshgrid(linspace(-1, 1, N));
R = sqrt(X.^2 + Y.^2);
hole = R < r;
field = hole;
% 计算二维傅里叶变换
ft = fftshift(fft2(field));
% 绘制法力恢复衍射图
figure();
imagesc(abs(ft).^2);
colormap('gray');
axis square;
```
在上述代码中,我们首先定义了圆孔的半径和采样点数。然后使用 `meshgrid` 函数生成了平面网格,并计算出每个网格点到坐标原点的距离,从而得到了圆孔的干涉场。接着使用 `fft2` 函数计算出干涉场的二维傅里叶变换,并对其进行了中心化处理。最后使用 `imagesc` 函数绘制了傅里叶变换的模方,即法力恢复衍射图。
相关问题
在matlab中用fft2函数绘制圆孔的法力恢复衍射图并输出2D频谱图
以下是在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频谱图。
用matlab中fft2函数绘制十字细缝夫琅禾费衍射图
十字细缝夫琅禾费衍射图可以通过傅里叶变换实现。具体步骤如下:
1. 定义细缝的宽度和间距,以及图像的大小和分辨率。
```
w = 0.05; % 细缝宽度
d = 0.1; % 细缝间距
L = 2; % 图像大小
N = 512; % 分辨率
```
2. 生成表示细缝的二维函数。
```
x = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x);
slit = (abs(X) <= w/2) .* (abs(Y) <= d/2);
```
3. 对细缝进行傅里叶变换,得到夫琅禾费衍射图。
```
fft_slit = fftshift(fft2(slit));
I = abs(fft_slit).^2;
```
4. 绘制夫琅禾费衍射图。
```
figure;
imagesc(x, x, I);
colormap(gray);
xlabel('x');
ylabel('y');
title('十字细缝夫琅禾费衍射图');
```
完整代码如下:
```
w = 0.05; % 细缝宽度
d = 0.1; % 细缝间距
L = 2; % 图像大小
N = 512; % 分辨率
x = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x);
slit = (abs(X) <= w/2) .* (abs(Y) <= d/2);
fft_slit = fftshift(fft2(slit));
I = abs(fft_slit).^2;
figure;
imagesc(x, x, I);
colormap(gray);
xlabel('x');
ylabel('y');
title('十字细缝夫琅禾费衍射图');
```