六路高斯光 经过透镜聚焦 傅里叶变换 matlab代码
时间: 2023-09-19 21:07:10 浏览: 162
傅里叶变换matlab代码
3星 · 编辑精心推荐
以下是六路高斯光经过透镜聚焦后的傅里叶变换的MATLAB代码:
```matlab
% 定义高斯光的参数
wavelength = 633e-9; % 波长
k = 2*pi/wavelength; % 波数
NA = 0.5; % 数值孔径
focal_length = 20e-3; % 透镜焦距
P = 10e-3; % 平面波前的大小
N = 256; % 采样点数
% 定义空间采样
x = linspace(-P/2, P/2, N);
[X,Y] = meshgrid(x);
% 定义高斯光的振幅和相位
sigma = 0.5*P/NA;
A = exp(-(X.^2+Y.^2)/sigma^2);
phi = k/(2*focal_length)*(X.^2+Y.^2);
% 定义透镜传递函数
H = exp(-1i*k/(2*focal_length)*(X.^2+Y.^2));
% 高斯光经过透镜聚焦
U = A.*exp(1i*phi);
Uf = fftshift(fft2(U.*H));
% 绘制结果
lambda = 500e-9; % 显示波长
dx = P/N; % 空间采样间隔
kx = 2*pi*(-N/2:N/2-1)/(dx*N); % k空间采样点
[Xk,Yk] = meshgrid(kx);
figure;
subplot(1,2,1);
imagesc(x*1e3, x*1e3, abs(U).^2);
axis image;
title('Input');
xlabel('x (mm)');
ylabel('y (mm)');
subplot(1,2,2);
imagesc(kx/(2*pi)*lambda/1e-3, kx/(2*pi)*lambda/1e-3, abs(Uf).^2);
axis image;
title('Output');
xlabel('k_x (1/m)');
ylabel('k_y (1/m)');
```
这段代码中,先定义了高斯光的参数和空间采样,然后计算出高斯光的振幅和相位,以及透镜传递函数。接着将高斯光经过透镜聚焦,再进行傅里叶变换,最后绘制出输入和输出的图像。注意,这里的傅里叶变换使用了FFT算法,需要使用fft2函数进行计算,并且需要使用fftshift函数将零频率移到中心。
阅读全文