Matlab:实现光场传输函数

本文基于光学原理,用Matlab实现光场传输函数。


以下展示了两种菲涅尔光场传输的数值计算方法:

  • 菲涅尔衍射积分的离散求和
  • 菲涅尔衍射FFT法
Project Code
% 作者:ZQJ
% 日期:2021.7.22 星期四
%***********************光场传输函数**************************
function Light_transmissions = f_Lightfield_transmission
    Light_transmissions.Fresnel_integrate      = @trans_1;
    Light_transmissions.CONV_                  = @trans_2;
    Light_transmissions.FFT_                   = @trans_3;
    Light_transmissions.matrix_multiplication  = @trans_4;
end

function transmission_E = trans_1(lamda,E0,E_x,E_y,screen_x,screen_y,Nx,Ny,z)   
% 函数功能: 基于菲涅尔衍射积分的光场传输 (计算结果较准确,但计算速度较慢1024*1024特慢)
% 参数
% lamda: 波长
% E0: 原光场(传播前)分布情况——2D matrix
% E_x:原光场x方向总长度
% E_y:原光场y方向总长度
% screen_x:接收屏x方向总长度
% screen_y:接收屏y方向总长度
% Nx,Ny: 接收屏x,y方向等分割数目
% z: 传输距离

k = 2*pi/lamda;
[E0_nx,E0_ny] = size(E0);
[x0,y0] = meshgrid(linspace(-E_x/2,E_x/2,E0_nx),linspace(-E_y/2,E_y/2,E0_ny));                % 原电场坐标
[x1,y1] = meshgrid(linspace(-screen_x/2,screen_x/2,Nx),linspace(-screen_y/2,screen_y/2,Ny));  % 接收屏坐标
E1 = zeros(Nx,Ny);
for sx = 1:Nx
    for sy = 1:Ny
        %菲涅尔衍射积分公式
        E1(sx,sy) = exp(1i*k*z)/(1i*lamda*z)*sum(sum(E0.*exp(1i*k/2/z*((x1(sx,sy)-x0).^2+(y1(sx,sy)-y0).^2))));
    end
end
transmission_E = E1;
end

function transmission_E = trans_3(lamda,E0,screen_x,screen_y,z)  
% 函数功能: 基于菲涅尔衍射傅里叶变换运算的光场传输 (计算速度较快)
% 参数
% lamda: 波长
% E0: 原光场(传播前)分布情况——2D matrix
% screen_x:接收屏x方向总长度
% screen_y:接收屏y方向总长度
% z: 传输距离

k = 2*pi/lamda;
[E0_nx,E0_ny] = size(E0);
F_sx = linspace(-E0_ny/screen_x/2,(E0_ny-2)/screen_x/2,E0_ny);      
F_sy = linspace(-E0_nx/screen_y/2,(E0_nx-2)/screen_y/2,E0_nx);  
[Fx,Fy] = meshgrid(F_sx,F_sy);                                  % 接收屏的频域坐标(与时域坐标有对应关系,分辨率因子变了)
H = exp(1i*pi*lamda*z*(Fx.^2+Fy.^2)).*exp(-1i*k*z);             % 菲涅耳衍射空间传递函数
H = fftshift(H);
F_E0 = fft2(fftshift(E0));
transmission_E = fftshift(ifft2(H.*F_E0));
end

专栏内容供作者本人或大家学习使用,多多指教 ~

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值