这一段程序,最后取得幅值后为什么还要平方?然后平方后那一句是什么意思?max取最大值的作用是什么?
还有我光能利用率算出来只有11%怎么办?要求是80%,是哪里出错了么?
光强不均匀性为什么是-100%?要求是20%该怎么达到?
求各位解答!谢谢!
clear
close all
tupian=imread('图片9.jpg');
tupian=rgb2gray(tupian); %灰度化处理
tupian = double(tupian)./255; % 归一化到 [0,1]变换为固定标准形式
% tupian(tupian<0.3)=0;
figure
imshow(tupian,[])%二维
figure
mesh(tupian)%三维
N=732;
% 生成高斯光束
beam_radius = 0.75e-3; % 入射光束半径
x1=linspace(-7.5e-4,7.5e-4,N);
y1=x1;
[X,Y] = meshgrid(x1,y1); % 生成网格
beam = exp(-(X.^2+Y.^2)/(beam_radius^2)); % 高斯分布的光强
beam=abs(beam);%绝对值
figure
mesh(beam)
wave_new=beam.*exp(i*2*pi*rand(N,N));%生成随机相位
% DOE参数
DOE_aperture = 1.5e-3; % 通光口径 (1.5 mm)
% 目标平面参数
target_distance = 175e-3; % 目标平面与DOE所在平面的距离 (175 mm)
outer_radius = 10.5e-3; % 外半径 (10.5 mm)
inner_radius = 7.5e-3; % 内半径 (7.5 mm)
polar_angle = 45; % 极角 (45°)
% % 算法参数
iterations=1000;%GS算法迭代次数
tolerance = 1e-6; % 收敛容差,前后两次迭代结果的差值
% 网格参数
R = sqrt(X.^2 + Y.^2);%平方根
% 生成目标平面光场分布
target_field = double(R >= inner_radius & R <= outer_radius & mod(atan2(Y, X), 2*pi) <= deg2rad(polar_angle));%mod求余,atan反正切函数,deg2rad从角度单位转换成弧度单位
% target_field = target_field / sum(target_field(:));
% 初始化DOE的相位
DOE_phase = 2 * pi * rand(N, N);
% 初始化误差数组
error_array = zeros(iterations, 1);%产生类零矩阵
% 循环整形
for ii = 1:50 % 循环 50 次
%% GS算法
sc1=fftshift(fft2(fftshift(wave_new))); % 傅里叶变换
sc1_fai=angle(sc1);
sc_1=tupian.*exp(i*sc1_fai);
sc2=fftshift(ifft2(fftshift(sc_1))); % 逆傅里叶变换
sc2_fai=angle(sc2);
wave_new=beam.*exp(i*sc2_fai);
end
wave_ft_mod = abs(fftshift(fft2(fftshift(wave_new)))); % 取得幅值
wave_ft_mod=wave_ft_mod.^2;
wave_ft_mod =wave_ft_mod ./max(max(wave_ft_mod ));
% 相位结构
figure
imshow(sc2_fai,[]),title('相位结构-二维')
figure
mesh(sc2_fai),title('相位结构-三维')
% 整形结果
figure
imshow(wave_ft_mod,[]),title('整形结果-二维')
figure
mesh(wave_ft_mod),title('整形结果-三维')
% 计算光能利用率与不均匀性
illumination_uniformity = min(wave_ft_mod) / max(wave_ft_mod);
energy_efficiency = sum(wave_ft_mod /sum(beam))* 100;
disp(['光能利用率: ', num2str(energy_efficiency), '%']);
disp(['光强不均匀性: ', num2str((illumination_uniformity) -1* 100), '%']);