基于MATLAB的离轴数字全息记录与再现工程级仿真系统
项目简介
本项目构建了一套完整的离轴数字全息仿真平台,专门用于模拟从全息图记录到物体波前重建的全物理过程。系统基于MATLAB开发,通过严格的标量衍射理论,实现了物光波前的生成、光波的自由空间传播、离轴全息图的干涉记录、频域滤波提取物光频谱、以及基于角谱法的数值重建和相位解包裹。该仿真系统代码逻辑清晰,高度模块化,适合作为光学全息算法的研究验证与教学演示工具。
核心功能特性
- 全链路物理仿真:涵盖了“波前生成 -> 正向传播 -> 干涉记录 -> 频谱滤波 -> 逆向重建 ->相 位解包裹”的完整数字全息流程。
- 高精度衍射计算:核心传播算法采用角谱法 (Angular Spectrum Method, ASM),相比菲涅耳近似法,更适用于短距离、高精度的衍射计算。
- 自动化频谱分析:具备自动搜寻频谱一级峰值并进行中心化处理的功能,能够自适应地提取物光频谱。
- 鲁棒的相位处理:集成了一阶相位的自动去倾斜算法,并采用了基于离散余弦变换 (DCT) 的最小二乘相位解包裹算法,能够有效恢复连续相位分布。
- 多维度结果可视化:提供包含原始物体、全息图、频谱分析、重建场及3D相位形貌在内的综合展示界面。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox (用于图像基础操作)
- Signal Processing Toolbox (推荐,用于部分高级变换)
使用方法
- 直接在MATLAB环境中运行主程序脚本。
- 程序将自动初始化物理参数,执行全流程仿真计算。
- 运行结束后,系统会弹出一张包含8个子图的综合窗口,分别展示:
* 原始物体振幅与相位
* 模拟生成的离轴全息图
* 全息图的对数频谱(标注+1级位置)
* 滤波并中心化后的频谱
* 重建的振幅分布
* 重建的包裹相位
* 解包裹后的3D真实相位分布
- 控制台会输出当前仿真步骤的进度提示以及潜在的采样率警告信息。
详细功能实现逻辑
本项目的主程序严格按照离轴数字全息的物理流程编写,具体实现逻辑如下:
1. 系统物理参数设置
系统首先定义了仿真所需的光学与空间参数,包括532nm激光波长、1024x1024的采样分辨率、3.45um的像素间距以及0.3m的记录距离。同时,设置了参考光在X和Y方向的倾斜角度,并内置了
Nyquist采样判据检查,计算载频是否超过最大截止频率,若存在频谱混叠风险会自动发出警告。
2. 模拟物光波前
程序通过数学模型生成复振幅物体:
- 振幅部分:模拟了一个类USAF分辨率板的透射型图案,包含矩形和圆形结构,用于检验重建清晰度。
- 相位部分:合成了一个连续的高斯型球面相位和一个不连续的相位阶跃,用于模拟具有特定光学厚度的物体。
3. 全息记录过程模拟
该模块模拟真实的光学记录过程:
- 正向传播:利用角谱法 (ASM) 将定义好的物光场从物平面传播至全息记录面(CCD平面)。
- 离轴参考光:根据设定的倾斜角生成倾斜平面波作为参考光。
- 干涉记录:计算物光与参考光叠加后的光强分布,得到全息图。
- 量化模拟:将浮点型的光强分布归一化并转换为8-bit整数 (uint8),模拟真实相机的量化效应,然后再转换回双精度浮点数进行后续处理。
4. 频谱分析与空间滤波
- 傅里叶变换:对全息图进行二维FFT及移频操作,获取频域分布。
- 自动寻峰:通过遮挡频谱中心的直流分量 (Zero-order),自动搜索剩余区域的最大值,精确定位+1级频谱的中心位置。
- 滤波器设计:以定位的+1级峰值为中心,构建圆形窗函数 (Mask) 提取物光频谱。
- 频谱搬移:利用循环移位 (circshift) 将提取出的+1级频谱搬移至频谱几何中心,消除离轴参考光引入的载波频率。
5. 图像再现 (数值重建)
- 逆向重建:将滤波并中心化后的频谱进行逆傅里叶变换,变换回空间域。
- 逆向传播:再次利用角谱法,将光场从全息面逆向传播回物平面(传播距离为负值)。
- 相位去倾斜:计算相位图的最小二乘拟合平面,并从包裹相位中减去该线性平面,以消除因频谱中心定位微小偏差导致的线性相位倾斜误差。
6. 相位解包裹 (Unwrapping)
算法采用
基于DCT的最小二乘解包裹算法 (DCT-LS)。该算法通过求解泊松方程来恢复连续相位:
- 计算包裹相位的拉普拉斯算子。
- 利用二维离散余弦变换 (DCT) 将偏微分方程转化为代数方程。
- 在频域求解相位分布后,通过逆离散余弦变换 (IDCT) 得到解包裹后的真实相位。
关键算法说明
角谱衍射法 (Angular Spectrum Method)
代码中通过
propagate_ASM 函数实现。相比于Fresnel近似,ASM在频域通过传递函数 $H(f_x, f_y) = exp(j kz sqrt{1 - (lambda f_x)^2 - (lambda f_y)^2})$ 进行波前传播计算。该函数内部还包含了对倏逝波 (Evanescent waves) 的处理,即当根号内为负值时将其置零,保证了数值计算的稳定性。
DCT最小二乘相位解包裹
代码中通过
unwrap_phase_dct 函数实现。这是一种非路径跟踪类的解包裹算法。它不依赖于寻找和避开残差点(Residues),而是通过最小化解包裹相位差分与包裹相位差分之间的L2范数来实现全局最优解,计算速度快,且对噪声具有一定的鲁棒性。
自动相位去倾斜
代码中通过
remove_tilt 函数实现。在实际或仿真全息中,频谱滤波中心的微小偏移会在重建相位的空间域引入一个线性相位斜面。该函数通过构建线性方程组 $z = ax + by + c$,利用左除运算符进行最小二乘求解,从相位数据中移除这一人为引入的倾斜背景。