肥皂膜的颜色
摘要
一篇物理解读博文,解释肥皂膜为何呈现彩色条纹:从菲涅尔系数出发推导出反射光谱随 1/λ 呈余弦变化,并说明薄膜干涉结合 CIE 配色函数如何决定不同膜厚度下人眼所感知的颜色。
暂无内容
查看缓存全文
缓存时间: 2026/10/28 13:27
# 肥皂膜的颜色 | Aseem Raj Baranwal
来源:https://aseemrb.me/blog/colors-of-a-soap-film/
肥皂膜是一层夹在两层肥皂分子之间的水膜,厚度常常不到一微米。垂直放置的膜会在重力作用下向下排水,顶部变得更薄,因此在白光下会显示出按厚度排列的彩色条纹。Newton 曾在玻璃罩下观察气泡上的这些条纹(*Opticks*(https://www.gutenberg.org/ebooks/33504),Book II, Part I, Observation 17):彩色环在顶部形成,随水分排走而变宽并向下移动,气泡破裂前顶部会长出一个黑斑(https://en.wikipedia.org/wiki/Soap_film#Black_spots)。
厚度为 $d$ 的膜所呈现的颜色由两个要素决定:膜在每个波长 $\lambda$ 处反射的光的比例,以及 CIE(https://cie.co.at/)(国际照明委员会)用来将光谱归纳为颜色的三刺激匹配函数(https://en.wikipedia.org/wiki/CIE_1931_color_space#Color_matching)。第一个要素是关于 $1/\lambda$ 的单个余弦函数,因此颜色等于固定的白色减去匹配函数的余弦变换(https://en.wikipedia.org/wiki/Sine_and_cosine_transforms),变换自变量为 $2nd$——即从膜背面反射的光所多走的额外光程,其中 $n$ 是水的折射率。计算得到的颜色与 Newton 编纂的厚度-颜色对照表吻合。
## 反射光谱是一个余弦
考虑波长为 $\lambda$ 的光垂直入射到膜面,即垂直于其两个表面。有两束光返回眼睛:一束由前表面反射,另一束穿过膜、被后表面反射、再穿膜返回。
光是一种电磁波:电场和磁场随波的传播同步振荡。一束光的**振幅**是其电场振荡的大小,光的亮度与振幅的平方成正比。在图中,每束光都标注了其振幅(以入射光振幅的倍数表示)。
```
d 1 r t −r −r t t'
─────────────────────────────────────────────────────────────────────────────────────────
前表面 后表面
空气, 折射率 1 水, 折射率 n 空气
τ
─────────────────────────────────────────────────────────────────────────────────────────
前表面波 后表面波
它们的和,即反射光
传播方向 →
```
图中所有光束都沿同一条线传播,即垂直于膜面。它们被并排画出是为了标注各自的振幅。图的右半部分显示了某一时刻两列返回的波。后表面波是前表面波的倒置版本,并滞后于前表面波一段距离 $\tau$(推导见下文)。到达眼睛的光是这两列波的叠加。
**每个表面反射多少。** 当光垂直入射到一个表面时,其电场和磁场都平行于表面。在折射率为 $n$ 的介质中,磁场振幅与 $n$ 乘以电场振幅成正比。假设一束振幅为 $1$ 的光从折射率 $n_1$ 的介质进入折射率为 $n_2$ 的介质,它会分裂为振幅为 $r$ 的反射光束和振幅为 $t$ 的透射光束。Maxwell 方程组(https://en.wikipedia.org/wiki/Maxwell%27s_equations)要求界面两侧的各个场取相同的值。对电场而言,该条件写作 $1 + r = t$。反射光束沿相反方向传播,因此其磁场方向相反,对磁场而言该条件写作 $n_1(1 - r) = n_2\,t$。求解这两个方程得到正入射情况下的Fresnel 系数(https://en.wikipedia.org/wiki/Fresnel_equations#Normal_incidence):
$$r = \frac{n_1 - n_2}{n_1 + n_2}, \qquad t = \frac{2n_1}{n_1 + n_2}.$$
在肥皂膜中,空气的折射率为 $1$,水的折射率为 $n$。在前表面,光从空气进入水中,因此 $r = (1 - n)/(1 + n)$,$t = 2/(1 + n)$。当 $n = 1.33$ 时,$r = -0.142$。在后表面,光从水进入空气,两个折射率互换,反射系数变为 $(n - 1)/(n + 1) = -r$。因此两次反射的符号相反。在出射过程中,后表面光束穿过前表面从水进入空气,透射系数为 $t' = 2n/(1 + n)$。该光束经历一次透射、一次反射、再一次透射,因此返回时的振幅为
$$t\,(-r)\,t' \;=\; -r \cdot \frac{4n}{(1+n)^2} \;=\; -r\,(1 - r^2).$$
最后一步用到了 $(1 + n)^2 - (1 - n)^2 = 4n$。对于水,$1 - r^2 = 0.98$。从此处开始我近似取 $0.98 \approx 1$,这使后表面光束的振幅变化 $2\%$,因此两束返回光的振幅分别为 $r$ 和 $-r$。
**第二束光落后第一束多远。** 后表面光束在水中多走了一段 $2d$ 的距离,在水中波长缩短为 $\lambda/n$,因此它落后前表面光束 $2d/(\lambda/n) = \tau/\lambda$ 个波长,其中
$$\tau = 2nd$$
是两束光之间的光程差(https://en.wikipedia.org/wiki/Optical_path_length#Optical_path_difference)。在空气中(波长为 $\lambda$),这段滞后相当于距离 $\tau$,如图所示。每个波长的延迟对应一个完整的振荡周期,因此后表面波在振荡中的相位偏移角度为 $\varphi = 2\pi\tau/\lambda$。这个角度称为**相位**差。
要叠加相位不同的两列波,可以把每列波表示为一个复数,其模长为振幅、辐角为相位,正如在 Euler 恒等式那篇博客(https://aseemrb.me/blog/eulers-identity)中所做的那样。角度 $\varphi$ 的偏移相当于将复数乘以 $e^{i\varphi}$。因此膜反射的光的振幅为
$$r - r\,e^{i\varphi} \;=\; r\,\big(1 - e^{i\varphi}\big), \qquad \varphi = \frac{2\pi\tau}{\lambda}.$$
**反射率** $R$ 是膜反射的入射光的比例。亮度与振幅的平方成正比,因此 $R$ 是该复数模长的平方。由于 $|1 - e^{i\varphi}|^2 = (1 - \cos\varphi)^2 + \sin^2\varphi = 2 - 2\cos\varphi$,
$$R(\lambda) \;=\; 2r^2\Big(1 - \cos\frac{2\pi\tau}{\lambda}\Big) \;=\; 4r^2 \sin^2\!\Big(\frac{\pi\tau}{\lambda}\Big).$$
取 $n = 1.33$ 在整个可见光波段内保持不变,$r^2 = 0.0201$,因此 $R$ 的取值范围在 $0$ 到 $4r^2 = 8.0\%$ 之间。在**波数**(https://en.wikipedia.org/wiki/Wavenumber) $\sigma = 1/\lambda$ 下,$R = 2r^2(1 - \cos 2\pi\sigma\tau)$ 是周期为 $1/\tau$ 的单个余弦函数。光也可以在膜内多次来回反射后再离开。将所有这些反射求和可以得到精确的 Airy 公式(Born and Wolf, §7.6)。其高次谐波 $\cos(2\pi k\sigma\tau)$($k \ge 2$ 的整数)每增加一个 $k$ 就缩小 $r^2 \approx 0.02$ 倍,因此双光束公式的误差约为 $4\%$。
## 从光谱到三个数字
对于 CIE 1931 **标准观察者**(https://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_standard_observer),光谱功率为 $P(\lambda)$ 的光由三个**三刺激值**(https://en.wikipedia.org/wiki/CIE_1931_color_space#Computing_XYZ_from_spectral_data)描述:
$$X = \int P\,\bar x\,d\lambda, \qquad Y = \int P\,\bar y\,d\lambda, \qquad Z = \int P\,\bar z\,d\lambda,$$
其中 $\bar x, \bar y, \bar z$ 是表格化的颜色匹配函数。具有相同 $(X, Y, Z)$ 的两束光在标准观察者看来是相同的。由于 $\bar y$ 是眼睛对亮度的灵敏度,$Y$ 即为亮度(https://en.wikipedia.org/wiki/Luminance)。膜反射的光的 $P = SR$,其中 $S$ 是光源的光谱。我使用 D65(https://en.wikipedia.org/wiki/Illuminant_D65),即 CIE 对平均日光的标准表示(Newton 在"以天空反射的白光"下观察他的气泡),并进行归一化,使得完美反射体的**白点**(https://en.wikipedia.org/wiki/White_point)为 $W = (0.950,\ 1,\ 1.089)$。sRGB(https://en.wikipedia.org/wiki/SRGB)标准规定了将 $(X, Y, Z)$ 转换为屏幕显示颜色的 $3 \times 3$ 矩阵和编码曲线。
## 颜色是一个余弦变换
将 $R$ 代入三个积分,并做变量替换 $\sigma = 1/\lambda$。在波数轴上定义三条权重曲线:
$$w_x(\sigma)\,d\sigma \;=\; \frac{S(\lambda)\,\bar x(\lambda)\,d\lambda}{\int S\,\bar y\,d\lambda},$$
$w_y$ 和 $w_z$ 类似定义,使得它们的积分分别是 $W$ 的三个分量。记 $w = (w_x, w_y, w_z)$,膜的三刺激值为
$$\begin{pmatrix} X \\ Y \\ Z \end{pmatrix}\!(d) \;=\; 2r^2\big(W - \hat c(\tau)\big), \qquad \hat c(\tau) = \int w(\sigma)\cos(2\pi\sigma\tau)\,d\sigma, \qquad \tau = 2nd.$$
向量 $\hat c(\tau)$ 是三条权重曲线的余弦变换(傅里叶变换的实部),在光程差处求值。
**黑膜。** 在 $d = 0$ 时,余弦在每个波长处都等于 $1$,因此 $\hat c(0) = W$,膜不反射任何光:两次反射完全相消。对于很小的 $d$,$R(\lambda) \approx 4r^2(\pi\tau/\lambda)^2$ 与 $1/\lambda^2$ 成正比,因此薄膜最先反射的光偏向短波长。其色度(https://en.wikipedia.org/wiki/Chromaticity),在 CIE 坐标 $(x, y) = (X, Y)/(X + Y + Z)$ 下为 $(0.266, 0.281)$,比白点 $(0.313, 0.329)$ 更蓝。这种蓝灰色就是 Newton 紧接在黑色之后列出的淡蓝色。在 $d = 10$ nm 时,膜反射 $0.18\%$ 的光,不到单个水面反射 $2\%$ 的十分之一,但并非为零,Newton 能从黑斑上"非常微弱地看到(蜡烛或太阳的)像的反射"。
**级次。** 亮度 $Y = 2r^2(1 - \hat c_y(\tau))$ 在 $w_y$ 中心波长处的成分被消去时达到最小,即 $\tau$ 是 $\bar\lambda = 554$ nm 的整数倍时,$\bar\lambda$ 是 $w_y$ 平均波数的倒数。计算得到的极小值位于 $d = 207$、$416$、$626$ 和 $837$ nm,间距为 $\bar\lambda/2n = 208$ nm。光谱中部被移除后,红光和蓝光保留下来,这些紫色条带将**级次**分隔开来:第二和第三级次依次经过蓝色、绿色、黄色和红色,从第四级次开始,绿色和粉色交替出现并逐渐变淡。
该组件按 55 nm 步长从 CIE 表格求值公式:反射率及其乘积 $S\bar x$、$S\bar y$、$S\bar z$ 以虚线绘制,色度图(https://en.wikipedia.org/wiki/CIE_1931_color_space#Chromaticity_diagram)中显示膜从初始到当前 $d$ 的路径,以及每种 $d$ 直到 $2\,\mu$m 的颜色。
在第一级次中,$R$ 的峰值在 $\lambda = 2\tau$ 处,从紫外区移入可见光波段。在 $d = 104$ nm 时,峰值位于 $553$ nm,$R$ 在整个波段内保持在最大值的一半以上,膜呈现白色。$R$ 的零点在 $\lambda = \tau$ 处,在 $d = 143$ nm 时进入波段,使膜先变黄后变红,在 $d = 208$ nm 时到达绿色。色度路径在前三个级次中各绕白点一周。之后,它在白点的绿色侧和粉色侧之间摆动,第二级次之后每个级次的摆动幅度都缩小。
## 颜色逐渐消退为白色
随着 $d$ 增大,$\hat c(\tau) \to 0$,这是由 Riemann–Lebesgue 引理(https://en.wikipedia.org/wiki/Riemann%E2%80%93Lebesgue_lemma)(可积函数的傅里叶变换在无穷远处趋于零)保证的。因此厚膜以 $2r^2 \approx 4\%$ 的反射率反射光源本身的颜色,相当于两个水面的反射率简单相加(不发生干涉)。$R$ 中的余弦在 $\sigma$ 轴上周期为 $1/\tau$,可见光波段包含 $\tau(1/380 - 1/780)\ \text{nm}^{-1}$ 个周期:在 $d = 0.5\,\mu$m 时为 $1.8$ 个,在 $d = 1.5\,\mu$m 时为 $5.4$ 个。跨越数个周期的权重曲线会将余弦平均到接近零。
权重曲线的宽度决定了衰减速率。用具有相同均值 $\bar\sigma = 1/\bar\lambda$ 和标准差 $s$ 的高斯函数替代 $w_y$,可得
$$\hat c_y(\tau) \;\approx\; \cos(2\pi\bar\sigma\tau)\; e^{-2\pi^2 s^2 \tau^2},$$
即产生级次的振荡被高斯包络所调制。对于表格化的 D65 和 $\bar y$,$s = 0.136\ \mu\text{m}^{-1}$,包络在 $\tau = 1/(\sqrt{2}\,\pi s) = 1.65\ \mu$m 处降至 $1/e$,对应厚度 $0.62\ \mu$m。在 $d = 1.2\,\mu$m 以内,表格曲线的精确变换模长与该包络的偏差保持在 $0.032$ 以内。更窄的权重曲线的变换会衰减得更慢。这就是 Heisenberg 那篇博客(https://aseemrb.me/blog/heisenberg-uncertainty-as-fourier-duality)中傅里叶变换的宽度权衡。由公式计算,对于所有 $d \ge 1.25\,\mu$m,色度保持在白点 $0.03$ 以内;对于所有 $d \ge 1.61\,\mu$m,保持在 $0.01$ 以内。
## Newton 的表格
Newton 测量了两个压在一起的透镜之间薄空气层中的色环(https://en.wikipedia.org/wiki/Newton%27s_rings),并编纂了一张表格,列出"每种颜色最强烈和最特定"时的厚度,以百万分之一英寸为单位,分别对应空气膜、水膜和玻璃膜(Book II, Part II)。以下是他表格中水膜一列的节选,按每百万分之一英寸 $= 25.4$ nm 换算,并列出计算所得颜色:
| 级次 | Newton 的颜色 | Newton ($10^{-6}$ in) | $d$ (nm) | 计算颜色 |
|------|--------------|----------------------|----------|---------|
| 第一级 | 白色 | 3 7/8 | 98 | 第一级黄色 |
| 第一级 | 黄色 | 5 1/3 | 135 | 第一级红色 |
| 第一级 | 红色 | 6 3/4 | 171 | 第二级紫色 |
| 第二级 | 紫色 | 8 3/8 | 213 | 第二级蓝色 |
| 第二级 | 蓝色 | 10 1/2 | 267 | 第二级绿色 |
| 第二级 | 绿色 | 11 2/3 | 296 | 第三级紫色 |
| 第三级 | 紫色 | 15 3/4 | 400 | 第三级绿色 |
| 第三级 | 绿色 | 18 9/10 | 480 | 第四级绿色 |
| 第四级 | 绿色 | 26 1/2 | 673 | 第七级红润的白色 |
| 第七级 | 红润的白色 | 57 3/4 | 1467 | |
计算中最亮的膜出现在 $104$ nm,对应 Newton 第一级的白色($98$ nm)。他第二级的紫色($213$ nm)恰好对应第一个亮度极小值($207$ nm),而他的最后一条记录——第七级的**红润白色**($1467$ nm)——计算结果是靠近白点的粉白色。
Newton 还从斜角观察气泡(Observation 19)。在膜内与法线成角 $\theta$ 时,光程差为 $2nd\cos\theta$,因此在正入射下厚度 $d$ 处看到的颜色,在膜厚为 $d/\cos\theta$ 处出现。Snell 定律(https://en.wikipedia.org/wiki/Snell%27s_law)给出 $\sin\theta \le 1/n$,因此最大因子出现在掠入射处,对于水为 $n/\sqrt{n^2 - 1} = 1.52$。Newton 对他最斜视角的比值:"根据我最好的观测,这个比值介于 15 到 15 1/2 之间比 10。"
## Michel-Lévy 图谱
一块双折射(https://en.wikipedia.org/wiki/Birefringence)晶体放在两个正交偏振片(https://en.wikipedia.org/wiki/Polarizer)之间,与偏振片成 $45°$ 角,透过的偏振光比例为 $\sin^2(\pi\Gamma/\lambda)$,其中**延迟量** $\Gamma$ 是光程差,等于……
相似文章
白光的颜色
文章解释了RGB彩色摄影中的不准确性,并详细说明了DIY光谱仪的构建以分析光谱,解决了日常生活中常见的颜色匹配问题。
量化色彩
本文探讨了如何通过物理测量光波长来量化颜色,以实现显示器上的精确颜色再现,涵盖了历史命名挑战和科学原理。
彩虹和宝光的数学物理(2001) [pdf]
一篇2001年的综述论文,探讨了彩虹和宝光背后的数学物理,涵盖散射理论和波动光学对这些大气光学现象的解释。
寻找屏幕无法呈现的颜色
文章解释了屏幕无法显示某些真实世界中的颜色,尤其是青色,这是由于RGB色彩空间和人类视锥细胞反应的局限,并描述了如何在自然界中找到这些颜色。
线性余弦调色板(2025)
一篇博客文章,解释了如何使用线性余弦调色板在R中生成连续调色板,该方法基于Inigo Quilez的程序化调色板技术。