计算全息图生成与数字全息频谱滤波系统
项目简介
本项目是一个基于MATLAB构建的完整数字全息处理平台。系统实现了从原始物体的光场构建、光波在自由空间中的衍射传播模拟、离轴全息图的干涉记录,到最终的全息图频谱分析、滤波与数字重构的全流程仿真。该平台重点展示了利用通过角谱法(Angular Spectrum Method)进行波前传播模拟,以及通过频域滤波技术消除零级衍射斑和共轭像,从而实现高质量的全息重建。
功能特性
- 复振幅物体模拟:能够自动生成包含幅度信息(基于Shepp-Logan Phantom)和二次球面相位信息的模拟物体光场。
- 精确的衍射传播计算:采用角谱法(ASM)计算光波在自由空间的传播,支持正向传播(生成全息图)和逆向传播(全息重构)。
- 离轴全息图生成:模拟参考光与物光的干涉过程,引入特定的载频角度以实现频谱分离,并模拟CCD的量化噪声和高斯噪声。
- 频谱自动分析与滤波:对全息图进行二维FFT变换,自动识别物光频谱侧带位置,应用圆形窗函数滤除直流分量(零级项)和孪生像干扰。
- 波前重构:通过频谱中心化(解调)和逆向衍射传播,从全息图中恢复物体的原始强度和相位分布。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(用于
phantom、imagesc、imnoise 等函数)
使用方法
- 直接在MATLAB环境中运行主程序脚本。
- 程序执行后将生成包含8个子图的窗口,依次展示:原始物体幅度/相位、生成的数字全息图、全息图频谱、滤波后频谱、中心化频谱、重构物体强度及重构物体相位。
- 系统参数(如波长、采样点数、记录距离)可在代码开头的参数设置部分进行修改。
程序实现逻辑与细节
主程序严格按照数字全息的物理过程进行编写,主要包含以下七个核心步骤:
1. 系统参数初始化
程序首先定义了全息记录系统的物理参数,包括采样分辨率(1024x1024)、激光波长(632.8nm)、像素尺寸(4.65um)以及记录距离(0.3m)。同时构建了空间坐标网格,为后续的波面计算提供基础。
2. 原始物光场构建
利用MATLAB内置的
phantom 函数生成物体的振幅分布,模拟复杂的物体透射率。相位分布则构建为一个简单的球面波模型(基于二次曲面公式),将两者结合形成复振幅物光场 $U_0$。
3. 计算全息图生成 (CGH)
- 物光传播:调用
angular_spectrum_propagate 函数,计算物光从物体平面传播到全息记录平面的复振幅分布。 - 参考光构造:生成一个倾斜的平面波作为参考光。代码中设定了特定的入射角(接近奈奎斯特频率的0.8倍),以确保在频域中物光频谱与零级项能有效分离。
- 干涉记录:将在全息面上的一束物光与参考光叠加,计算其模的平方得到强度分布。
- 噪声模拟:对生成的强度图进行归一化,并添加微量的高斯噪声,模拟真实CCD相机的成像过程。
4. 频谱分析
对生成的全息图强度进行二维快速傅里叶变换(FFT),并使用
fftshift 将低频分量移至频谱中心。为了便于观察,对幅度谱进行了对数变换显示。
5. 频谱滤波
这是系统的核心处理环节:
- 频率坐标计算:根据物理尺寸建立频域坐标系。
- 自动寻峰:程序采用自动化算法寻找物光频谱的位置。它首先屏蔽频谱中心的直流(DC)区域,然后在剩余区域搜索能量最大值,从而精确定位+1级(或-1级)侧带的中心位置。
- 滤波器设计:以搜索到的侧带峰值为中心,构建一个圆形掩膜(Mask)。掩膜半径基于估算的物体带宽设定,用于保留物光信息并剔除零级项和共轭像。
6. 数字重构
- 频谱解调(中心化):计算侧带峰值相对于频谱中心的位移量,利用
circshift 函数将提取出的物光频谱移回频谱中心,以此去除参考光引入的载波频率。 - 逆变换:对中心化后的频谱进行逆傅里叶变换(IFFT),得到全息平面上的复振幅。
- 逆向传播:再次调用
angular_spectrum_propagate 函数,但传入负的传输距离($-z$),模拟光波从全息面逆向传播回物体平面的过程。
7. 结果显示
程序最后在统一的图形窗口中展示各个阶段的处理结果,包括重构后的强度图和相位图,以便直观评估全息重构的质量。
关键算法说明
角谱传播算法 (Angular Spectrum Method)
代码中封装的衍射传播函数基于角谱理论。该算法在频域通过传递函数 $H$ 对光场进行操作。
- 传递函数:$H = exp(i cdot k cdot z cdot sqrt{1 - (lambda f_x)^2 - (lambda f_y)^2})$。
- 倏逝波处理:算法中包含了对倏逝波(Evanescent waves)的判断,当空间频率过高导致根号内为负值时(即 $f_x^2 + f_y^2 > 1/lambda^2$),强制将其振幅置零,防止计算出现非物理的复数增益。
频谱自动定位与滤波
不同于手动指定滤波区域,本代码通过计算频谱能量分布自动定位一阶衍射斑。逻辑如下:
- 创建一个临时频谱副本。
- 将中心区域(零级项所在位置)的数值强制置零。
- 查找剩余部分的全局最大值索引,该索引即为载频主峰位置。
- 基于此位置生成圆形滤波器,实现了滤波过程的自动化和自适应性。