傅立叶光学的Matlab实现方法

一、核心原理与工具

傅立叶光学基于傅里叶变换理论,将光波的传播与频域分析结合。Matlab通过以下函数实现关键计算:

  • fft2:二维傅里叶变换,将空间域光场转换为频域频谱。
  • ifft2:逆傅里叶变换,恢复空间域信号。
  • meshgrid:生成空间坐标网格,用于光场建模。
  • imagesc:可视化光强分布或频谱。

二、典型实现流程
1. 光场建模

示例:生成高斯光束

matlab 复制代码
lambda = 632.8e-9; % 波长(米)
w0 = 0.01;         % 束腰半径(米)
k = 2*pi/lambda;   % 波数

[x, y] = meshgrid(linspace(-0.05, 0.05, 500));
r = sqrt(x.^2 + y.^2);
E = exp(-r.^2 / w0^2) .* exp(1i*k*r.^2/(2*w0)); % 高斯光束表达式
2. 傅里叶变换与频谱分析

透镜的傅立叶变换模拟(4f系统)

matlab 复制代码
% 前焦面(输入平面)
E_input = E; % 输入光场

% 傅里叶变换(透镜后焦面)
E_fft = fftshift(fft2(fftshift(E_input))); % 频谱

% 逆傅里叶变换(后焦面重建)
E_output = fftshift(ifft2(fftshift(E_fft)));
3. 光学元件模拟

低通滤波器设计

matlab 复制代码
% 频谱滤波
D0 = 0.02; % 截止频率
[X, Y] = meshgrid(linspace(-0.5, 0.5, size(E_fft,1)), ...
                  linspace(-0.5, 0.5, size(E_fft,2)));
D = sqrt(X.^2 + Y.^2);
H = double(D <= D0); % 低通滤波器掩膜

% 应用滤波
E_filtered = E_fft .* H;
4. 动态传播模拟

角谱法模拟光束传播

matlab 复制代码
z = 0.1; % 传播距离(米)
dx = x(2)-x(1); % 采样间隔

% 角谱计算
fx = (-size(x,2)/2:size(x,2)/2-1)/dx;
fy = (-size(y,2)/2:size(y,2)/2-1)/dx;
[FX, FY] = meshgrid(fx, fy);
H = exp(1i*k*z*sqrt(1 - (lambda*FX).^2 - (lambda*FY).^2)); % 传播因子

% 传播后光场
E_propagated = ifftshift(ifft2(fftshift(E_input) .* H));

三、关键应用案例
1. 衍射与干涉仿真

杨氏双缝干涉

matlab 复制代码
d = 0.002; % 双缝间距(米)
D = 0.1;   % 缝到屏距离(米)
I = (cos(pi*d*D*x/(lambda*D)).^2); % 干涉光强
imagesc(x*1e3, y*1e3, I); % 可视化(单位:毫米)
title('杨氏双缝干涉条纹');
2. 光栅衍射

矩形光栅频谱分析

matlab 复制代码
grating = repmat([ones(1,50), zeros(1,100), ones(1,50)], 500, 1); % 50%占空比光栅
E_grating = grating;

% 傅里叶变换
E_spectrum = fftshift(fft2(E_grating));
3. 涡旋光束生成

拉盖尔-高斯光束(拓扑荷数l=2)

matlab 复制代码
p = 0; l = 2; % 径向指数p=0,角向指数l=2
E_laguerre = laguerre_gaussian_beam(w0, p, l, 0, 0); % 自定义函数生成

四、调试与验证
  1. 频谱对称性检查

    确保实部偶对称、虚部奇对称:

    matlab 复制代码
    figure;
    subplot(2,1,1); imagesc(angle(E_fft)); title('相位分布');
    subplot(2,1,2); imagesc(log(abs(E_fft)+eps)); title('对数幅度谱');
  2. 重建误差分析

    比较原始与重建光场:

    matlab 复制代码
    error = norm(E_input - E_output)/norm(E_input);
    fprintf('重建误差:%.2e\n', error);

参考代码 计算傅立叶光学的实现 www.youwenfan.com/contentcsq/78328.html

五、扩展功能
  1. 动态全息图生成

    通过时变光场模拟动态全息:

    matlab 复制代码
    for t = 1:100
        E_hologram(:,:,t) = exp(1i*2*pi*t/100 * x); % 时变相位调制
    end
  2. 自适应光学校正

    使用Zernike多项式模拟波前畸变并校正:

    matlab 复制代码
    [Z, ~, ~] = zernike(4, 0.1); % 4阶Zernike多项式
    E_corrected = E .* exp(1i*Z); % 波前补偿

六、参考文献与工具
  1. 核心文献
    • 《光学》(Eugene Hecht)第4章:傅里叶光学基础
    • 《数字信号处理》(John G. Proakis):FFT算法实现细节
  2. 工具包推荐
    • Optics Toolbox:提供衍射、干涉等专用函数
    • GPU Coder:加速大规模光学计算
相关推荐
码农六六2 小时前
js函数柯里化
开发语言·前端·javascript
2501_941148152 小时前
C++ map / multimap 保姆级教程
java·开发语言·c++
民乐团扒谱机2 小时前
【微实验】Zhang-Suen 快速并行细化算法与MATLAB实现
人工智能·学习·算法·计算机视觉·数学建模·matlab
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大2 小时前
C++中的策略模式进阶
开发语言·c++·算法
xb11322 小时前
C#串口通信
开发语言·c#
小小码农Come on2 小时前
QT内存管理
开发语言·qt
Zach_yuan2 小时前
C++ Lambda 表达式从入门到进阶
开发语言·c++
weixin_445402302 小时前
模板元编程应用场景
开发语言·c++·算法
xyq20242 小时前
Julia 日期和时间处理指南
开发语言