红外与拉曼光谱

IR & Raman Spectroscopy  ·  振动光谱理论与数值计算

第 1.2.4 节(振动光谱部分) |  Molecular Spectrum Simulation

← 返回课程首页

1. 振动光谱的物理基础

分子的振动光谱——红外(IR)光谱拉曼(Raman)光谱—— 是研究分子结构、官能团和化学键信息的核心工具。 两者都起源于分子的振动运动,但物理机制截然不同: IR 依赖于振动过程中偶极矩的变化, Raman 依赖于振动过程中极化率的变化

1.1 偶极矩与红外活性

分子在外部光场(电磁波)的振荡电场 $\mathbf{E}(t)$ 中, 其固有偶极矩 $\vec{\mu}$ 与外场发生相互作用,引起能量吸收。 根据量子力学跃迁矩阵元理论,振动跃迁 $v_i \to v_f$ 的红外吸收概率正比于:

$$ I_{\mathrm{IR}} \propto \bigl|\langle \psi_{v_f} \,|\, \hat{\mu} \,|\, \psi_{v_i} \rangle\bigr|^2 $$

在谐振子近似下,将偶极矩对正则坐标 $Q_k$ 做 Taylor 展开:

$$ \vec{\mu}(Q_k) = \vec{\mu}_0 + \left.\frac{\partial\vec{\mu}}{\partial Q_k}\right|_0 Q_k + \cdots $$

利用谐振子选择定则 $\Delta v = \pm 1$,只有展开式中一次项对跃迁有贡献,因此:

$$ \boxed{ \text{IR 活性条件:}\; \left.\frac{\partial\vec{\mu}}{\partial Q_k}\right|_0 \neq 0 } $$
ℹ️
物理图像:分子振动过程中偶极矩必须发生变化, 振荡的电偶极矩才能与入射光的电场耦合,吸收光子能量。 例如,同核双原子分子(H₂、N₂)无永久偶极矩, 且振动时偶极矩始终为零,故无红外活性

1.2 极化率与拉曼活性

拉曼散射是光子与分子振动的非弹性散射。 入射光(频率 $\nu_0$)诱导分子产生瞬时偶极矩:

$$ \vec{\mu}_{\mathrm{ind}} = \boldsymbol{\alpha}\,\mathbf{E} $$

其中 $\boldsymbol{\alpha}$ 是 $3\times3$ 极化率张量。 将极化率对正则坐标展开:

$$ \boldsymbol{\alpha}(Q_k) = \boldsymbol{\alpha}_0 + \left.\frac{\partial\boldsymbol{\alpha}}{\partial Q_k}\right|_0 Q_k + \cdots $$

类似地,拉曼活性条件为:

$$ \boxed{ \text{Raman 活性条件:}\; \left.\frac{\partial\boldsymbol{\alpha}}{\partial Q_k}\right|_0 \neq 0 } $$
💡
物理图像:振动使分子的"形变难易程度"(极化率)发生周期性变化。 极化率的振荡调制了散射光的频率,形成 Stokes($\nu_0 - \nu_{\mathrm{vib}}$) 和 anti-Stokes($\nu_0 + \nu_{\mathrm{vib}}$)位移的散射光。

1.3 互斥定则(Mutual Exclusion Rule)

群论 对称性

对于具有对称中心(inversion center, $i$)的分子, IR 活性和 Raman 活性互斥

  • 对称($g$)振动模式:偶极矩导数为零 → 无 IR 活性,但可有 Raman 活性
  • 反对称($u$)振动模式:极化率导数为零 → 无 Raman 活性,但可有 IR 活性

代表例子:线性分子 CO₂($D_{\infty h}$)——对称伸缩($\Sigma_g^+$)有 Raman 活性无 IR 活性; 反对称伸缩($\Sigma_u^+$)有 IR 活性无 Raman 活性。

分子 对称性 振动模式 IR Raman
H₂O $C_{2v}$(无对称中心) 全部 3 个 活性 活性
CO₂ $D_{\infty h}$(有对称中心) 对称伸缩 $\Sigma_g^+$ 非活性 活性
CO₂ $D_{\infty h}$ 反对称伸缩 $\Sigma_u^+$ 活性 非活性
苯 C₆H₆ $D_{6h}$(有对称中心) $E_{2g}$ 模式 非活性 活性

2. 红外吸收强度的计算

2.1 偶极矩对正则坐标的导数

设分子有 $3N-6$(非线性)或 $3N-5$(线性)个简正模式, 第 $k$ 个简正模式的正则坐标为 $Q_k$,约化质量为 $\mu_k$(单位:amu)。 以质量加权笛卡尔位移 $\Delta\mathbf{x}$ 表示分子构型变化:

$$ \Delta\mathbf{x} = \mathbf{L}_k\,\Delta Q_k $$

其中 $\mathbf{L}_k$ 是第 $k$ 个简正模式的质量加权本征向量 (Gaussian 输出中的 "normal mode eigenvectors",单位为 amu$^{-1/2}$)。

偶极矩导数的数值差分近似(中心差分,误差 $O(\Delta Q^2)$):

$$ \left.\frac{\partial\mu_\alpha}{\partial Q_k}\right|_0 \approx \frac{\mu_\alpha(+\Delta Q_k) - \mu_\alpha(-\Delta Q_k)}{2\,\Delta Q_k} \qquad \alpha = x, y, z $$
⚠️
注意坐标约定:数值差分中 $Q_k$ 的单位为 amu$^{1/2}\cdot$Å; 偶极矩 $\mu_\alpha$ 的单位为 Debye。 Gaussian 输出的正则坐标位移会将约化质量效应包含在内, 需要除以 $\sqrt{\mu_k}$ 将 Cartesian 位移转换为真正的正则坐标位移。

2.2 强度公式与单位

红外积分强度(单位:km/mol)由偶极矩三个方向分量的导数平方之和决定:

$$ I_{\mathrm{IR},k} = \frac{N_A\pi}{3c^2\varepsilon_0} \left(\frac{1}{4\pi\varepsilon_0}\right) \left|\frac{\partial\vec{\mu}}{\partial Q_k}\right|^2 = C_{\mathrm{IR}} \left[ \left(\frac{\partial\mu_x}{\partial Q_k}\right)^2 +\left(\frac{\partial\mu_y}{\partial Q_k}\right)^2 +\left(\frac{\partial\mu_z}{\partial Q_k}\right)^2 \right] $$

其中换算常数 $C_{\mathrm{IR}}$(将 Debye/(amu$^{1/2}$·Å) 换算为 km/mol):

$$ C_{\mathrm{IR}} = \frac{N_A\pi}{12\varepsilon_0 c^2} \times \left(\frac{1}{4\pi\varepsilon_0}\right) \approx 42.2561 \;\;[\text{km/mol per (D/amu}^{1/2}\text{Å)}^2] $$

Gaussian 直接计算与数值差分的关系:
使用 freq 关键词时,Gaussian 解析计算偶极矩导数, 直接输出 IR 强度(km/mol)。 数值差分程序 NumIR_Raman.py 通过多次单点计算来验证这一结果, 两者在步长适当时一致性应在 0.1% 以内。

2.3 数值差分方法详解

中心差分法相比前向/后向差分精度更高,误差阶为 $O(\Delta Q^2)$:

$$ f'(x) = \frac{f(x+h)-f(x-h)}{2h} + O(h^2) $$

步长 $\Delta Q$ 的选择影响计算精度:

步长 $\Delta Q$(amu$^{1/2}$·Å)优点缺点
$10^{-3}$(太小) 截断误差小 SCF 精度不足,数值噪声主导
$0.01$(推荐) 截断误差与数值误差平衡
$0.1$(太大) 数值稳健 高阶非线性项贡献显著,精度下降

3. 拉曼散射活性的计算

3.1 极化率张量

极化率张量 $\boldsymbol{\alpha}$ 是描述分子在外电场作用下 诱导偶极矩响应的 $3\times3$ 实对称矩阵:

$$ \boldsymbol{\alpha} = \begin{pmatrix} \alpha_{xx} & \alpha_{xy} & \alpha_{xz} \\ \alpha_{yx} & \alpha_{yy} & \alpha_{yz} \\ \alpha_{zx} & \alpha_{zy} & \alpha_{zz} \end{pmatrix} \quad (\alpha_{ij} = \alpha_{ji}) $$

由于对称性,只有 6 个独立分量。 Gaussian 输出按以下顺序给出(原子单位,1 a.u. = 1.48185$\times$10⁻²⁵ cm³):

Polarizability (field-independent basis, a.u.):
   XX=    39.294   YX=    -0.049   YY=   156.727
   ZX=     0.000   ZY=     0.000   ZZ=   112.948

程序内部按顺序存储为: $[\alpha_{xx},\,\alpha_{yx},\,\alpha_{yy},\,\alpha_{zx},\,\alpha_{zy},\,\alpha_{zz}]$。

3.2 各向同性与各向异性导数

对极化率张量的每个独立分量计算对正则坐标 $Q_k$ 的导数:

$$ \frac{\partial\alpha_{ij}}{\partial Q_k} \approx \frac{\alpha_{ij}(+\Delta Q_k) - \alpha_{ij}(-\Delta Q_k)}{2\,\Delta Q_k} $$

由此定义两个关键量:

各向同性极化率导数(Mean polarizability derivative)

$$ \alpha' = \frac{1}{3} \left( \frac{\partial\alpha_{xx}}{\partial Q_k} + \frac{\partial\alpha_{yy}}{\partial Q_k} + \frac{\partial\alpha_{zz}}{\partial Q_k} \right) $$

各向异性极化率导数(Anisotropy derivative)

$$ \gamma'^2 = \frac{1}{2}\Biggl[ \Bigl(\frac{\partial\alpha_{xx}}{\partial Q_k} - \frac{\partial\alpha_{yy}}{\partial Q_k}\Bigr)^2 + \Bigl(\frac{\partial\alpha_{yy}}{\partial Q_k} - \frac{\partial\alpha_{zz}}{\partial Q_k}\Bigr)^2 + \Bigl(\frac{\partial\alpha_{zz}}{\partial Q_k} - \frac{\partial\alpha_{xx}}{\partial Q_k}\Bigr)^2 \Biggr] + 3\Biggl[ \Bigl(\frac{\partial\alpha_{xy}}{\partial Q_k}\Bigr)^2 + \Bigl(\frac{\partial\alpha_{xz}}{\partial Q_k}\Bigr)^2 + \Bigl(\frac{\partial\alpha_{yz}}{\partial Q_k}\Bigr)^2 \Biggr] $$

3.3 拉曼活性公式

拉曼活性(Raman scattering activity)由各向同性和各向异性导数共同贡献:

$$ \boxed{ S_k = 45\,\alpha'^2 + 7\,\gamma'^2 } \qquad \text{单位:Å}^4/\text{amu} $$
ℹ️
Gaussian 输出中的 Raman Activ 即为上式的 $S_k$,单位 Å⁴/amu。 该值不直接等于实验测量的散射截面,还需考虑激光频率因子 $(\nu_0 - \nu_k)^4 / \nu_k$。

3.4 去偏振比(Depolarization Ratio)

对于 $90°$ 散射,平面偏振激发光的去偏振比 $\rho_p$ 定义为:

$$ \rho_p = \frac{I_\perp}{I_\parallel} = \frac{3\gamma'^2}{45\alpha'^2 + 4\gamma'^2} $$
振动类型$\alpha'$$\rho_p$偏振性
完全对称(fully symmetric) $\neq 0$ $0 \leq \rho_p < 3/4$ 偏振光(polarized)
非完全对称(non-totally symmetric) $= 0$ $\rho_p = 3/4$ 退偏振光(depolarized)

4. Gaussian 数值差分计算流程

步骤 1几何优化
opt
步骤 2频率计算
freq
步骤 3提取正则坐标
$\mathbf{L}_k$, $\mu_k$
步骤 4$\pm\Delta Q_k$ 位移
单点计算
步骤 5数值差分
$\partial\mu/\partial Q$
步骤 6计算 IR/Raman
强度

4.1 输入文件设置

步骤 1–2:几何优化 + 频率计算

%chk=H2O.chk
%mem=2GB
%nprocshared=4
#p b3lyp/6-311+g(d,p) opt freq=raman

H2O 几何优化与频率计算(含 Raman 活性)

0 1
 O  0.0   0.00000000  -0.11081188
 H  0.0  -0.78397589   0.44324751
 H  0.0   0.78397589   0.44324751
ℹ️
使用 freq=raman 关键词让 Gaussian 解析计算拉曼活性(需极化率二阶导数)。 若只需 IR 强度,freq 即可。 freq=noraman 可跳过极化率计算以节省时间。

步骤 4:对每个正则模式生成 ±ΔQ 位移的单点输入

%chk=H2O_mode1_plus.chk
#p b3lyp/6-311+g(d,p) iop(1/21=1) scf=tight prop=(dipole,polar) nosymm

H2O mode 1  +DeltaQ  (正则坐标位移 +0.01 amu^(1/2)*Angstrom)

0 1
 O  [displaced coords]
 H  [displaced coords]
 H  [displaced coords]
⚠️
关键注意事项:
  • 必须加 nosymm,禁止 Gaussian 内部对称化坐标(否则位移会被重新对称化)
  • scf=tight 提高 SCF 收敛精度,减少数值误差
  • prop=(dipole,polar) 输出偶极矩和极化率
  • 每个模式需要 2 次计算($+\Delta Q$ 和 $-\Delta Q$),共 $2(3N-6)$ 次

4.2 数据提取

从 .log 文件提取偶极矩

Dipole moment (field-independent basis, Debye):
   X=     0.0000    Y=     0.0000    Z=    -0.0052  Tot=     0.0052

从 .log 文件提取极化率

Polarizability (field-independent basis, a.u.):
   XX=    39.294   YX=    -0.049   YY=   156.727
   ZX=     0.000   ZY=     0.000   ZZ=   112.948

Python 正则表达式提取

import re

def extract_dipole(logfile):
    """提取偶极矩 (Debye),返回 [X, Y, Z]"""
    pattern = r'X=\s+([\d\.\-]+)\s+Y=\s+([\d\.\-]+)\s+Z=\s+([\d\.\-]+)'
    with open(logfile) as f:
        text = f.read()
    matches = re.findall(pattern, text)
    if matches:
        last = matches[-1]  # 取最后一次出现(收敛后的结果)
        return [float(x) for x in last]
    return None

def extract_polarizability(logfile):
    """提取极化率张量 (a.u.),返回 [XX, YX, YY, ZX, ZY, ZZ]"""
    pattern = (r'XX=\s+([\d\.\-]+)\s+YX=\s+([\d\.\-]+)\s+YY=\s+([\d\.\-]+)\s+'
               r'ZX=\s+([\d\.\-]+)\s+ZY=\s+([\d\.\-]+)\s+ZZ=\s+([\d\.\-]+)')
    with open(logfile) as f:
        text = f.read()
    matches = re.findall(pattern, text)
    if matches:
        return [float(x) for x in matches[-1]]
    return None

4.3 H₂O 示例

H₂O 属于 $C_{2v}$ 点群,有 $3N-6 = 3$ 个简正模式,均具有 IR 和 Raman 活性:

模式 对称性 频率 (cm⁻¹) IR 强度 (km/mol) Raman 活性 (Å⁴/amu) 描述
$\nu_1$ $A_1$ ~3657 ~4 ~51 对称 O–H 伸缩
$\nu_2$ $A_1$ ~1595 ~70 ~8 H–O–H 弯曲
$\nu_3$ $B_1$ ~3756 ~65 ~21 反对称 O–H 伸缩
💡
$A_1$ 对称模式($\nu_1$, $\nu_2$)的拉曼谱线为偏振光($\rho_p < 3/4$), $B_1$ 模式($\nu_3$)的拉曼谱线为退偏振光($\rho_p = 3/4$)。 这可以用来实验归属振动模式的对称性。

5. Python 程序:NumIR_Raman

NumIR_Raman.py 位于 program/ 子目录, 实现了从 Gaussian 输出数据出发,通过数值差分计算 IR 和 Raman 强度的完整流程。

5.1 程序结构与主要函数

函数名 功能描述 输入参数 返回值
calculate_ir_intensity() 计算红外强度 dipole±, red_mass IR 强度 (km/mol)
calculate_raman_derivatives() 计算极化率导数 alpha±, red_mass $\mathrm{d}\alpha/\mathrm{d}Q$(6分量)
calculate_raman_intensity() 计算拉曼活性 $\mathrm{d}\alpha/\mathrm{d}Q$ $(S_k,\;\alpha'^2,\;\gamma'^2)$
convert_dpdQ_to_atomic() 单位转换 $\mathrm{d}\mu/\mathrm{d}Q$(物理单位) $\mathrm{d}\mu/\mathrm{d}Q$(原子单位)

5.2 使用示例

计算 IR 强度

from NumIR_Raman import calculate_ir_intensity

# 从 Gaussian 输出读取的偶极矩分量 (Debye)
# 以 H2O mode1 为例(仅 z 分量有值)
dipole_plus  = [0.0, 0.0, -0.0052]   # Q + ΔQ
dipole_minus = [0.0, 0.0,  0.0052]   # Q - ΔQ
reduced_mass = 1.0803   # amu

ir = calculate_ir_intensity(dipole_plus, dipole_minus, reduced_mass)
print(f"IR 强度: {ir:.4f} km/mol")
# → IR 强度: 3.8762 km/mol

计算拉曼活性

from NumIR_Raman import calculate_raman_derivatives, calculate_raman_intensity

# 极化率张量独立分量 [XX, YX, YY, ZX, ZY, ZZ](原子单位)
alpha_plus  = [39.294, -0.049, 156.727, 0.000, 0.000, 112.948]
alpha_minus = [39.294,  0.049, 156.727, 0.000, 0.000, 112.948]
reduced_mass = 1.0803  # amu

# 计算极化率导数
dalpha_dQ = calculate_raman_derivatives(alpha_plus, alpha_minus, reduced_mass)

# 计算拉曼活性
S_k, ai2, ga2 = calculate_raman_intensity(dalpha_dQ)
print(f"拉曼活性  S_k = {S_k:.4f} Å⁴/amu")
print(f"各向同性  α'² = {ai2:.4f}")
print(f"各向异性  γ'² = {ga2:.4f}")
# 去偏振比
rho = 3*ga2 / (45*ai2 + 4*ga2)
print(f"去偏振比  ρ   = {rho:.4f}")

直接运行(使用内置示例数据)

python program/NumIR_Raman.py

输出示例:

======================================================================
数值计算红外(IR)和拉曼(Raman)强度
======================================================================

红外强度计算结果
----------------------------------------------------------------------
模式        dμ/dQ (au)     IR强度 (km/mol)   相对强度
----------------------------------------------------------------------
mode1       -0.000527      2.8454            1.0000
mode6       -0.002384      24.3745           8.5671
mode14      -0.005692      138.6566          48.7392

5.3 物理常数与单位换算

常数名称符号数值单位
普朗克常数$h$$6.62607 \times 10^{-34}$J·s
光速$c$$2.99792 \times 10^8$m/s
真空介电常数$\varepsilon_0$$8.85419 \times 10^{-12}$F/m
阿伏伽德罗常数$N_A$$6.02214 \times 10^{23}$mol⁻¹
原子质量单位$m_u$$1.66054 \times 10^{-27}$kg
偶极矩 (1 a.u.)$2.54175$Debye
长度 (1 a.u. = 1 Bohr)$a_0$$0.529177$Å

IR 强度换算因子

$$ C_{\mathrm{IR}} = \sqrt{\frac{N_A}{12\,\varepsilon_0\,c^2}\,\mu_0} \approx \sqrt{42.2561} \quad \left[\frac{\mathrm{km/mol}}{(\mathrm{D}/(\mathrm{amu}^{1/2}\cdot\text{Å}))^2}\right] $$

6. 常见问题与调试

Q1:计算的 IR 强度与 Gaussian 直接输出不一致?

💡
排查清单:
  1. 位移步长 $\Delta Q$ 是否合适(推荐 0.01 amu$^{1/2}$·Å)
  2. 约化质量单位是否为 amu(不是 kg)
  3. 偶极矩是否为 Debye(不是原子单位;1 a.u. = 2.54175 D)
  4. 是否加了 nosymm 关键词
  5. SCF 是否充分收敛(加 scf=tight

Q2:拉曼活性数值偏差较大?

⚠️
极化率对步长更敏感,建议步长取 0.01–0.02 amu$^{1/2}$·Å。 同时检查极化率提取是否取到了 prop=polar 关键词对应的输出, 而非 Gaussian 自动计算的极化率(两者格式可能不同)。

Q3:某振动模式 IR 强度为 0,但预期有活性?

💡
可能原因:
  • 坐标系方向与选择定则有关——确认偶极矩的 $x,y,z$ 分量都被纳入计算
  • 分子具有高对称性,该模式对称性确实禁戒 IR(如 CO₂ 对称伸缩)
  • 单点计算中未指定 prop=dipole 导致偶极矩未输出

Q4:如何快速验证 Gaussian 频率计算中的 IR 强度?

💡
方法:使用 grep "IR Inten" *.log 提取所有模式的 IR 强度。 对于 Raman,使用 grep "Raman Activ" *.log。 GaussView 的光谱窗口也可直接可视化 IR/Raman 谱。

核心公式总览

物理量公式备注
IR 活性条件 $\partial\vec{\mu}/\partial Q_k \neq 0$ 偶极矩导数非零
Raman 活性条件 $\partial\boldsymbol{\alpha}/\partial Q_k \neq 0$ 极化率导数非零
IR 积分强度 $I_{\mathrm{IR},k} = C_{\mathrm{IR}}|\partial\vec{\mu}/\partial Q_k|^2$ 单位:km/mol
各向同性导数 $\alpha' = \tfrac{1}{3}(\partial\alpha_{xx}+\partial\alpha_{yy}+\partial\alpha_{zz})/\partial Q$
拉曼活性 $S_k = 45\alpha'^2 + 7\gamma'^2$ 单位:Å⁴/amu
去偏振比 $\rho_p = 3\gamma'^2/(45\alpha'^2+4\gamma'^2)$ $0 \leq \rho_p \leq 3/4$
数值差分 $f'(x) \approx [f(x+h)-f(x-h)]/(2h)$ 误差 $O(h^2)$