☰
傅里叶光学入门:从透镜变换到4F系统与空间滤波
2026/10/3 1:31:42 网站建设 项目流程

从“傅里叶光学”这四个字说起吧。很多搞光学设计的同行,一听到这个名字就觉得是理论课,数学公式一套一套,跟实际工程离得很远。但我自己从研究生到做光学系统设计的十几年里,越来越觉得,傅里叶光学不是一门“课”,而是一套看问题的语言——它教你把一个复杂的光场拆成简单频率成分的叠加,再用“滤波器”的思路去理解透镜、光栅、孔径这些元件到底对图像做了什么。理解了这套语言,你对光学系统的认识会提升一个层次,尤其是做成像系统、激光整形、空间滤波、计算成像的,这玩意儿几乎是绕不开的底层逻辑。

这篇文章是我计划里“傅里叶光学”专题的第一篇,咱们不讲那么玄,聚焦在最核心的物理图景:光场为什么能拆成空间频率的叠加,透镜为什么天然就是一个傅里叶变换器,以及一套最简单的标准光路里,输入面、频谱面、输出面到底在哪儿。我尽量用干活的视角讲,顺手给出一些可以复现的参数和验证方式,适合刚接触傅里叶光学的人,也适合那些用了好几年Zemax但不太清楚“焦平面上的光斑其实是一次傅里叶变换”的人。

1. 为什么做光学的人一定要懂傅里叶光学

1.1 从“光线跑直线”到“光场做变换”

传统几何光学给你一个特别直观的模型:光沿直线传播,碰到界面就折射、反射。你用这个模型去设计镜头、算光路,大部分时候没问题,因为光线追迹的效率太高了。但它有一个致命的盲区——它不告诉你光斑的“结构”是怎么来的。你去看一个星点,中间有个亮核周围一圈圈衍射环,几何光学解释不了;你用剪刀剪个孔挡在光束里,后面光斑边缘出现一条条亮暗条纹,几何光学也解释不了。

傅里叶光学换了个视角:它不把光当成一束束“射线”,而是当成一个空间分布的光场,这个光场可以拆解成无数个朝不同方向传播的平面波的叠加。每个平面波有自己的传播方向和幅度,而这些“不同方向的平面波”恰好对应光场里的不同“空间频率”。你看,方向一变,频率的概念就进来了。于是光场的传播问题,可以被翻译成一个线性系统里的信号处理问题:输入是物面上的光场分布,系统是自由空间或者透镜,输出是像面上的光场分布,中间干的事就是各种变换和滤波。

我第一次被这个思路击中的时候,是在实验室里调一个4F系统。当时我怎么也想不通,为什么在频谱面上放一个小孔,像面上的图像就会变模糊。后来才反应过来:小孔挡住了高频分量,图像的细节恰恰就在高频里,这跟音频里切掉高音,声音会变“闷”是一模一样的道理。

1.2 傅里叶光学能解决什么实际问题

不绕弯子,直接说它能干啥。第一,衍射计算。你用标量衍射理论算一个光斑的传播、聚焦、整形,核心就是傅里叶变换,很多光学仿真软件底层就是这个。第二,空间滤波。把不需要的频率成分在频谱面上滤掉,经典的例子是去噪、边缘增强、相位衬度成像。第三,系统分析。光学成像系统本质上是一个低通滤波器,它的截止频率决定了系统分辨率,MTF就是这么算出来的。第四,全息与计算成像。全息记录的其实是对干涉图样的空间频率调制,压缩感知、结构光照明这些方法也都在傅里叶频域里做文章。

所以做光学的人,不会傅里叶光学不是说不能干活,而是说你的工具库里少了一件特别趁手的工具。遇到衍射相关的问题,你可能只能靠软件跑仿真,却不知道为什么跑出来是这个结果;遇到频谱处理的问题,你压根想不到这么干。

2. 从衍射积分到傅里叶变换:核心数学是怎么一步步“长出来”的

2.1 光场传播的起点:基尔霍夫衍射积分

要理解傅里叶光学,绕不开衍射积分。在标量衍射理论里,一个单色光场从孔径面传播到观察面,可以用基尔霍夫衍射积分描述。这个积分长得很唬人,但物理图像其实很清晰:观察面上某一点的场,是孔径面上所有点发出的球面波,带着各自的幅度和相位,叠加到这一点上的结果。

这个积分是严格成立的(当然有边界条件的近似),但在实际计算里几乎没法用,因为计算量太大,也没有解析解。你想想,要算一个面上每个点对另一个面上每个点的贡献,那就是二维卷积,全数值算的话规模非常夸张。所以后人才逐步做近似。

2.2 菲涅尔近似:把球面波当成抛物面波

菲涅尔的做法是,对球面波的相位因子做泰勒展开,只保留到二阶项。什么条件下可以这么干?就是观察距离 $z$ 足够大,大到高阶项带来的相位变化远小于 $2\pi$。这个条件写出来是:

$$ z^3 \gg \frac{\pi}{4\lambda} \left[(x-\xi)^2 + (y-\eta)^2\right]_{max}^2 $$

看起来很麻烦,但物理意义很好懂——如果距离不够远,球面波前弯曲得很厉害,你非要把它当抛物线,误差就大了。菲涅尔近似之后,衍射积分变成:

$$ U(x,y) = \frac{e^{ikz}}{i\lambda z} \iint U(\xi,\eta) \exp\left{ \frac{ik}{2z} \left[(x-\xi)^2 + (y-\eta)^2 \right] \right} d\xi d\eta $$

你把它展开一下,会发现这个式子本质上是一个卷积积分,卷积核是 $\exp\left[\frac{ik}{2z}(x^2+y^2)\right]$,也就是所谓二次相位因子。卷积在频域里就是相乘,所以这个式子天然就跟傅里叶变换挂钩了。

2.3 夫琅禾费近似:把卷积变成纯正的傅里叶变换

如果距离更远,或者说观察区域的尺度远小于距离,二阶项也能忽略,那积分就进一步简化成夫琅禾费衍射积分:

$$ U(x,y) = \frac{e^{ikz}}{i\lambda z} e^{i\frac{k}{2z}(x^2+y^2)} \iint U(\xi,\eta) e^{-i\frac{2\pi}{λz}(x\xi + y\eta)} d\xi d\eta $$

注意看,前面那一堆是常数相位因子和幅度因子,真正起作用的是那个积分——它就是孔径场 $U(\xi,\eta)$ 的二维傅里叶变换,只不过频率坐标 $f_x = \frac{x}{\lambda z}$,$f_y = \frac{y}{\lambda z}$。这个坐标关系非常关键,它告诉你:观察面上每个位置对应一个空间频率,而这个空间频率又对应一个传播方向。远场图样就是你光场的频谱幅度分布,这就是为什么大家常说“远场就是傅里叶变换”。

我自己读书的时候,花了好长时间才把“傅里叶变换”和“衍射图样”对应起来。后来发现最直觉的理解方式是:夫琅禾费衍射的本质,就是把光场里各个平面波分量在空间上“摊开”了。平面波朝不同方向传播,在远处落到了不同位置,于是你看到的衍射斑其实就是光场的角谱。

2.4 透镜为什么是傅里叶变换器

自由空间里的夫琅禾费衍射,要求距离足够远,实验上往往需要几米甚至几十米,太不现实了。透镜的作用就是把“无穷远”拉到“焦平面”上。一个理想薄透镜的相位变换函数是:

$$ t(x,y) = \exp\left[-i\frac{k}{2f}(x^2+y^2)\right] $$

这个二次相位因子,正好补偿了球面波的曲率,使得一个平面波经过透镜后,会聚到焦平面上一点;而一个带有空间频率信息的复杂场,经过透镜后,它的频谱就展开在焦平面上。这个结论直接导出:

$$ U_f(u,v) = \frac{e^{i k f}}{i \lambda f} e^{i\frac{k}{2f}(u^2+v^2)} \iint U(\xi,\eta) e^{-i\frac{2\pi}{\lambda f}(u\xi + v\eta)} d\xi d\eta $$

说白了,透镜的焦平面就是输入场的一个精确的二维傅里叶变换平面,空间频率与位置的关系是 $u = \lambda f f_x$。咱们做实验的人常常挂在嘴边的“焦平面上是频谱”,这句话背后就是这个式子。

有一点值得单独拎出来说:上面的推导都假设光场在孔径面到透镜之间的传播是菲涅尔衍射,透镜本身被当成一个纯相位物体,不考虑它的厚度和像差。实际中透镜的孔径、畸变、色差都会给频谱平面带来影响,但这不妨碍它作为一阶近似在绝大多数情况下够用。

3. 实验台上的4F系统:从输入到输出一次说透

3.1 4F系统是怎么搭出来的

现在咱们上一套最经典的光路——4F系统。名字由来特别直白:输入面到透镜1的距离是 $f_1$,透镜1到频谱面的距离还是 $f_1$,频谱面到透镜2的距离是 $f_2$,透镜2到输出面的距离还是 $f_2$。四个焦距,所以叫4F。

这套系统的精妙之处在于:**输入面的光场经过第一个透镜后,在频谱面上形成它的傅里叶变换;放上滤波器后,再经过第二个透镜,又做了一次逆傅里叶变换,回到空间域。**两次变换叠加,像面上的场就是输入场与滤波器响应的卷积结果。这正好实现了我们前面说的“空间滤波”操作。

搭建的时候,需要注意几个点。第一,两个透镜要共轴,这个不用多说了吧,光路都这样。第二,输入面和输出面必须在透镜的焦平面上,位置偏差一点,频谱就会“散焦”,滤波效果立刻不对。第三,光源最好是平行光,如果不是,那你得在输入面前面加一个准直系统。

3.2 频谱面上到底发生了什么

实验中最有视觉冲击力的环节,是看频谱面。你在输入面上放一个透射光栅(比如一维光栅),入射光经过透镜1之后,频谱面上会出现一排离散的亮点——那就是0级、±1级、±2级衍射斑。它们的间距直接就是由光栅空间频率决定的,成像在频谱面上的坐标 $u = \lambda f f_x$。

这时你上手做滤波实验,就会体验到“眼见为实”的快感。频谱面上的每个亮斑都对应输入图像里的一个周期结构:你放一个只让0级通过的针孔,输出面上一片均匀光,图像细节全没了;你让0级和±1级都过去,图像的条纹结构回来了,但边缘锐度下降;你要是只让±1级过,图像会出现“轮廓”效果,类似边缘提取。这个过程我在课堂上演示过无数遍,每次看到学生们恍然大悟的表情,我都觉得傅里叶光学的魅力不是靠公式能传达的,一定得亲手搭一次光路。

3.3 空间滤波器怎么选

搭好了4F系统,滤波器是关键耗材。最常用的是针孔滤波器,用来滤除高频噪声,它的核心参数就是针孔直径。怎么选?有一个经验公式:

$$ d = \frac{1.22 \lambda f}{D} $$

其中 $D$ 是入射光束直径,$f$ 是聚焦透镜焦距,$\lambda$ 是波长。这个公式的基础是艾里斑直径,也就是说,你要让针孔刚好让中心艾里斑透过,挡住外围的高频噪声。实际使用中,为了让光斑更干净,我常常选比艾里斑稍大一点的针孔,比如1.5倍,透过的光更多,但噪声抑制会稍差,这就要看应用场景了。

如果你做的是图像的空间滤波,那滤波器就不是针孔这么简单了。可以是低通(挡高频)——用一个圆形光阑;高通(挡低频)——用一个中心不透明的小圆片;带通——用环形光阑。滤波器的形状直接对应你想保留的频率范围,这一步特别考验你对傅里叶变换的理解:图像里的大尺度变化(背景)集中在低频,细节、边缘、噪声集中在高频。

4. 手把手做一次模拟:用代码看清傅里叶变换的每一步

4.1 为什么建议先做仿真再上光路

搭光路之前,强烈建议先用Matlab或者Python做一遍仿真。原因很简单:光路里有太多误差源——透镜对不准、针孔没调好、焦面差几毫米——一旦实验结果跟预期不符,你很难判断是理论错了还是操作错了。仿真可以把理论验证得干干净净,后面上实验台,你心里有底,遇到问题也知道往哪个方向排查。

4.2 一个能跑的简单仿真示例

我们拿一个最简单的例子:模拟一个矩孔(宽度 $a$,高度 $b$)的夫琅禾费衍射。理论上,强度分布应该是一个 $\text{sinc}$ 函数的平方。下面这段Python代码用numpy的FFT直接算,省去解析推导,适合快速验证:

import numpy as np import matplotlib.pyplot as plt # 参数设置 lam = 632.8e-9 # 波长 632.8nm z = 1.0 # 观察距离 1m a, b = 0.5e-3, 0.3e-3 # 矩孔尺寸 0.5mm x 0.3mm N = 1024 # 采样点数 L = 5e-3 # 孔径面尺寸 5mm xi = np.linspace(-L/2, L/2, N) eta = np.linspace(-L/2, L/2, N) XI, ETA = np.meshgrid(xi, eta) # 矩孔函数 U_in = np.zeros((N, N)) U_in[(np.abs(XI) < a/2) & (np.abs(ETA) < b/2)] = 1.0 # 傅里叶变换(夫琅禾费近似) U_fft = np.fft.fftshift(np.fft.fft2(U_in)) # 频域坐标映射 fx = np.fft.fftfreq(N, d=L/N) / (lam * z) fy = np.fft.fftfreq(N, d=L/N) / (lam * z) FX, FY = np.meshgrid(fx, fy) # 强度分布 I = np.abs(U_fft)**2 # 理论值对比(sinc函数平方) I_th = (a*b)**2 * (np.sinc(FX*a))**2 * (np.sinc(FY*b))**2 # 画图 plt.figure(figsize=(10, 4)) plt.subplot(121) plt.imshow(I, extent=[fx.min(), fx.max(), fy.min(), fy.max()], cmap='hot') plt.title('FFT sim') plt.subplot(122) plt.imshow(I_th, extent=[fx.min(), fx.max(), fy.min(), fy.max()], cmap='hot') plt.title('Theory') plt.tight_layout() plt.show()

这个代码跑出来的两幅图应该高度一致。你要是第一次做,我建议把矩孔尺寸改大改小看一下衍射光斑的变化,直观感受“孔径越小,衍射越厉害”。

4.3 仿真里的三个常见坑

第一个坑:采样率不够导致混叠。FFT要求孔径面采样满足奈奎斯特条件,但实际中很难严格满足,所以你会发现仿真的边界处出现“折叠”的高频成分。解决办法就是加零填充(np.pad),让你的孔径在一个更大的计算窗口里居中分布。

第二个坑:频域坐标算错。很多人卡在这一步,FFT做完后不知道如何把索引映射成真实的空间频率。公式就是 $f_x = \frac{\text{索引对应的k}}{N \cdot L}$,然后到空间坐标再乘 $\lambda z$。我上面代码直接用了np.fft.fftfreq,省得手动换算。

第三个坑:忘了取fftshift。FFT得到的低频在角落,高频在中心,不fftshift的话,你看图像会看到四个角落挤满了亮光,中心是黑的,当场就会懵。这个我记得第一次跑仿真时踩过,后来养成了习惯,做完变换立刻fftshift,再也不用纠结。

5. 实地操作:用针孔滤波把激光“洗干净”

5.1 为什么要做空间滤波

很多激光器输出的光斑看着还行,但实际上叠加了很多高频噪声——主要来自激光腔内的尘埃、光学元件表面缺陷、散射等。这些噪声会导致光斑边缘不锐利,或者在聚焦后出现杂散条纹。空间滤波的目的,就是把光束在频谱面上过滤一遍,只保留需要的低频成分,让输出的光斑变得又圆又干净。

典型的装置是“透镜-针孔-透镜”结构:第一个透镜把入射光束聚焦到针孔平面上,针孔只允许中心艾里斑通过,挡住周围的衍射环和杂散光,第二个透镜再把光准直回去。这就是激光器里常说的“针孔空间滤波”。

5.2 从调焦到换针孔的现场笔记

我记得第一次搭这个装置时,花了大半天时间。关键步骤和心得如下:

第一步,粗对准。先把激光器、透镜、针孔大致放到一条直线上,让光斑打在针孔前面。找一张白卡纸,放在针孔后面,应该能看到一个模糊的光斑。这时候别急着调针孔,先把透镜位置前后移动,让焦点尽量落在针孔平面上。

第二步,细调节。用显微镜物镜代替普通透镜的效果更好,因为它的焦距短,聚焦光斑小,容易匹配针孔尺寸。我记得当时用的是20倍物镜,针孔直径25微米。细调节时要同时观察透过针孔的光强,可以在针孔后面放一个光电探测器,边调边看读数。

第三步,三个方向微调。针孔有三轴位移台最好,分别调x、y、z三个方向。x和y决定针孔是不是在焦点中心,z决定针孔是不是在焦点平面上。实际操作中,它们相互耦合,我习惯先调z让透过光强最大,再调x、y让光斑变圆,然后回过头再微调z,如此反复,直到输出的光斑是一个均匀的圆斑。

5.3 针孔参数怎么定

针孔直径的选择我前面提过经验公式。再展开一点,我们可以按“艾里斑直径”的倍数来确定。假设激光波长为 $\lambda=632.8,\text{nm}$,物镜焦距 $f=8,\text{mm}$,入射光束直径 $D=2,\text{mm}$,那艾里斑直径就是:

$$ d_{Airy} = \frac{2.44 \lambda f}{D} = \frac{2.44 \times 0.6328 \times 10^{-3} \times 8}{2} \approx 6.18,\mu m $$

如果你买一个10微米的针孔,那就是1.6倍艾里斑直径,透光效率和滤波效果平衡得比较好。你要是选25微米,肯定更亮,但会放过更多的衍射环,光斑边缘会有轻微波纹。我的经验是:如果是做干涉实验,针孔宁小勿大,光强损失一点可以用更高功率激光补偿;如果是做照明光源,可以稍微大一点,效率优先。

还有个细节:针孔很容易被激光损伤。哪怕只有几十毫瓦的激光,如果恰好聚焦在针孔边缘的金属膜上,瞬间就能烧一个洞,针孔就废了。所以调光路的时候,先用低功率激光对准,确认光路没问题了再开高功率。

6. 空间频率和图像细节:为什么高通滤波会“勾边”

6.1 一张图片的傅里叶频谱长什么样

前面讲的是光场,其实一张灰度图像也可以做傅里叶变换。图像就是一个二维函数 $f(x,y)$,它的傅里叶变换 $F(u,v)$ 把图像从空间域变到频率域。这里 $u,v$ 就是空间频率,单位是“每毫米多少线对”或者“每单位长度多少周期”。

你可以拿一张照片在Matlab里直接fft2看看频谱。照片里平坦的背景区域,在频谱里对应低频,集中在中心;边缘、纹理、噪声,对应高频,分布在四周。你如果用log把频谱幅度压缩一下再看,会更明显:中心亮,四周暗,延伸出一些十字亮线——那些就是图像里的水平和竖直边缘。

6.2 用滤波实现边缘增强

回到4F系统。假设输入图像是一个白底黑字的幻灯片,频谱面中心是0级(低频背景),周围分布着各阶衍射(高频),那些高频里包含着文字的边缘信息。如果你放一个不透明圆片挡在频谱中心,只让高频通过,那输出面的结果会是什么?是边缘被保留,平坦区域变暗——因为平坦区域的低频被挡掉了。这就是高速滤波在光学上的实现,效果类似于Photoshop里的“锐化”或“查找边缘”。

这个操作的物理直觉是:边缘意味着灰度的快速变化,而快速变化的信号在频率域里就是高频。挡住低频等于把图像的“直流分量”和缓变背景全去掉,只留下变化的部分,看起来自然就像勾了边。

我在教学演示时最喜欢用的滤镜是——频谱面中心放一个小圆片($\sim0.5$ mm),输入面放一个掩膜版,显示“Fourier”字样。像面上你会看到一个清晰的描边文字,特别漂亮。有时候我会再换一个环形光阑挡住低频和高频,只留中间频段,效果又是另一种风格。别觉得这是纯玩,光学图像处理在光计算、相干成像里是有实际地位的。

7. 常见问题与排查技巧实录

7.1 频谱面看不到清晰的频谱点

这是最常遇到的问题。频谱面上一片模糊,没有离散的亮点,大概率是输入面的光没有准直好,或者透镜位置不在焦平面上。排查顺序:先确认光源是平行光,用剪影法(拿一张纸片在光路中平移,看光斑大小变化);再确认透镜距离等于焦距,用米尺量一下;最后确认输入面是否严格在透镜前焦面。这三个因素里,输入面不在焦面是最容易忽略的,很多人以为4F系统只要两透镜间距摆对就行,其实输入面到第一个透镜的距离也必须是 $f_1$。

7.2 滤波后图像出现明暗条纹

如果滤波后像面上出现周期性条纹,多半是某个面上有灰尘或者划痕产生的衍射,也可能是两个透镜之间某处有反射产生的杂散光。处理办法:检查所有光学表面是否干净,必要时用无尘布和乙醇清洁;在光路中加入适当孔径光阑,减少杂散光;如果还是不行,试着稍微倾斜一下透镜,看条纹会不会移动——如果会,那就是透镜表面反射引起的干涉。

7.3 针孔透过率突然下降

针孔空间滤波器用着用着,透过率突然掉了很多,第一反应是检查针孔是否被激光损伤。用放大镜直接看针孔表面,如果金属膜有熔融的痕迹或穿孔,那就是废了。如果表面看着完好,可能是针孔位置漂移了,重新调x、y、z坐标就行。还有一个容易忽略的:针孔周围积聚了灰尘,可以用压缩空气吹一下,不要拿棉签去擦,很容易把针孔堵住。

7.4 快速排查表

现象可能原因排查与解决
频谱点模糊入射光不准直;输入面不在前焦面;透镜有像差用剪影法校准准直;量焦距;换用更高品质透镜
频谱面有背景杂散光光学表面脏;系统中有多余反射清洁镜面;加孔径光阑;适当倾斜平板元件
滤波后图像亮度异常不均匀滤波器位置不在频谱中心;光源强度分布不均匀精确对中滤波器;用扩束+准直获得均匀照明
针孔透过率下降针孔损伤;位置漂移;灰尘堵塞放大镜检查针孔;重新校准三轴;用压缩空气清洁
输出光斑有同心圆环光学元件表面干涉;激光模式不纯检查镀膜元件;用单模光纤或更高模式纯度激光器

7.5 两条送给新手的实操建议

第一条,搭光路一定要有“从粗到细”的意识。先保证光路走通,再去追求信号质量。很多人上来就想一步到位,结果花了几个小时在一个根本没必要那么精确的环节上较劲。第二条,做实验之前先在纸上画出光路图,标出每个面的距离,尤其是焦平面、频谱面这些关键位置。不要嫌麻烦,等你面对杂乱的光学平台时,这张图是你唯一的救星。

8. 关于下一步:从一维到二维,从标量到矢量

傅里叶光学这个专题开了个头,后面还有太多可以深入的内容。比如二维光栅的频谱分析,比如部分相干光的傅里叶变换处理,再比如矢量光束的傅里叶展开,都是在工程上很有用的工具。我打算在下一篇里专门讲讲一维光栅和二维光栅的频谱结构,以及怎么用傅里叶光学的语言去理解光栅方程——你会发现,那些你背过好多年的公式,其实都是傅里叶变换的“应用题”。

最后分享一个我自己的习惯。每次搭完一条相干光路,我都会强迫自己把光路里的每一个焦平面、频谱面都在纸上画出来,并标出空间频率与位置的对应关系。这个习惯救了我很多次,让我在做空间滤波的时候不用反复试错,一上来就知道滤波器应该放在哪里、开多大孔。傅里叶光学的价值,不在于让你背下更多的公式,而在于给你一张地图,让你在复杂的光路里永远知道自己在哪儿,要去哪儿。希望这篇文章也能给你这样一张地图。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询