峰形参数:峰位、峰高、半高宽与积分宽度
各位同学,咱们今天聊点实在的。XRD图谱拿到手,你第一眼看什么?我反正先看峰在哪、多高、多宽。这三个参数,说白了就是峰形分析的四大金刚——峰位、峰高、半高宽(FWHM)、积分宽度。搞不懂它们,后面的晶粒尺寸和微观应力计算就是空中楼阁。
一、峰位:你的样品到底在说什么?
峰位,就是衍射峰对应的2θ角度值。它告诉你晶面间距d值是多少,从而确定物相。布拉格方程嘛,2d sinθ = nλ,这个大家都熟。
峰位怎么定? 别傻乎乎直接取最高点。我习惯用抛物线拟合法,尤其是峰形对称的时候。不对称的峰?嗯,那得用重心法或者伪Voigt函数拟合。
核心要点: 峰位偏移可能来自仪器误差、样品位移,或者——晶格畸变。做微观应力分析时,峰位偏移本身就是重要线索。
我的经验: 有一次测陶瓷样品,峰位整体偏移了0.1°,我差点以为是新物相。后来发现是样品架没放平。所以,每次测样前先跑个标准硅粉校正一下,这步别省。
二、峰高:别被它骗了
峰高就是衍射峰的最大强度值。很多人觉得峰越高,结晶度越好。其实不一定。峰高受很多因素影响:
- 晶体尺寸: 小晶粒的峰高会降低,峰会变宽
- 择优取向: 某些晶面特别强,其他面就弱
- 吸收效应: 样品厚度、密度都会影响
我个人很少单独用峰高说事。它更多是配合半高宽和积分面积一起用。比如计算结晶度时,峰高只能做个参考,积分面积才是硬道理。
避坑指南: 我曾经遇到一个学生,拿峰高比来算两相含量,结果完全对不上。为什么?因为两相的吸收系数不同,峰高根本不能直接比。要用RIR法或者全谱拟合才行。
三、半高宽(FWHM):晶粒尺寸的密码
半高宽,全称是Full Width at Half Maximum,就是峰高一半处对应的峰宽度。单位是度或者弧度。
FWHM为什么重要? 因为它是Scherrer公式的核心输入:
D = Kλ / (β cosθ)
其中:
D = 晶粒尺寸(nm)
K = 形状因子(通常取0.9)
λ = X射线波长(Cu靶为0.15406 nm)
β = 样品的物理展宽(FWHM,弧度)
θ = 衍射角(度)
注意!这里的β不是直接测出来的FWHM。你测到的峰宽是仪器展宽和样品展宽的卷积。得先扣掉仪器展宽:
β_sample = √(β_measured² - β_instrument²) // 高斯型
β_sample = β_measured - β_instrument // 洛伦兹型
我个人习惯用高斯型扣减,因为大多数实验室衍射仪的峰形更接近高斯分布。但如果你用同步辐射,那得另说。
关键点: FWHM越大,晶粒越小。但要注意,微观应力也会让峰变宽。所以单独用FWHM算晶粒尺寸,结果可能偏小。这就是为什么我们要做Williamson-Hall分析,把尺寸和应力分开。
四、积分宽度:比FWHM更靠谱?
积分宽度,定义是峰面积除以峰高:
β_integral = A / I_max
其中A是峰积分面积,I_max是峰高。
积分宽度和FWHM啥关系?对于纯高斯峰,积分宽度 ≈ 1.064 × FWHM。对于纯洛伦兹峰,积分宽度 = π/2 × FWHM ≈ 1.571 × FWHM。实际样品往往是两者的混合,所以积分宽度和FWHM的比值可以告诉你峰形的特征。
我为什么偏爱积分宽度? 因为它对峰形的细微变化更敏感。FWHM只取半高处的宽度,而积分宽度考虑了整个峰的形状。做微观应力分析时,积分宽度给出的结果往往更稳定。
实战技巧: 我处理纳米材料数据时,习惯同时算FWHM和积分宽度。如果两者比值接近1.064,说明峰形接近高斯,晶粒尺寸分布比较均匀。如果比值偏大,说明有应力展宽或者尺寸分布很宽。这时候我会用Voigt函数去拟合,把高斯分量和洛伦兹分量分开。
五、四个参数的关系:一张图说清楚
下面这张图是我自己画的,把四个参数的关系和用途串起来了。你仔细看看,能省不少弯路。
六、实际操作:怎么提取这些参数?
现在主流软件都能自动提取。但我建议你手动检查一下,尤其是数据质量不好的时候。
我用Jade的习惯:
- 先做背景扣除,别让背景把峰高带偏了
- Kα2剥离,不然FWHM会偏大
- 选拟合模式——我一般用Pseudo-Voigt,兼顾高斯和洛伦兹
- 看拟合残差,R值大于10%就重新来
用Python手动算:
import numpy as np
from scipy.optimize import curve_fit
def pseudo_voigt(x, x0, I, fwhm, eta):
"""Pseudo-Voigt函数"""
sigma = fwhm / (2 * np.sqrt(2 * np.log(2)))
gauss = I * np.exp(-(x - x0)**2 / (2 * sigma**2))
lorentz = I / (1 + ((x - x0) / (fwhm/2))**2)
return eta * gauss + (1 - eta) * lorentz
# 拟合数据
popt, _ = curve_fit(pseudo_voigt, x_data, y_data,
p0=[peak_center, peak_height, 0.2, 0.5])
x0_fit, I_fit, fwhm_fit, eta_fit = popt
# 计算积分宽度
area = np.trapz(y_fit, x_data)
integral_width = area / I_fit
print(f"峰位: {x0_fit:.4f}°")
print(f"峰高: {I_fit:.1f}")
print(f"FWHM: {fwhm_fit:.4f}°")
print(f"积分宽度: {integral_width:.4f}°")
注意: 拟合时初始值给不好,结果会乱跑。我一般先用寻峰功能找到大概位置,再手动设初始值。尤其是eta(高斯比例),别让它跑到0或1之外。
七、总结一下
峰位、峰高、FWHM、积分宽度,这四个参数是XRD分析的基石。峰位定物相,峰高看趋势,FWHM算尺寸,积分宽度做应力。但记住,它们不是孤立的——峰位偏移可能意味着应力,FWHM变宽可能是尺寸小也可能是应力大。所以,拿到数据后别急着套公式,先看看峰形整体长什么样。
我做了十几年XRD,最深的体会是:数据质量决定分析上限。与其花时间调参数,不如花时间把样品制备好、把仪器校准好。嗯,这话可能有点老生常谈,但确实是血泪教训。
一句话记住: 峰位定身份,峰高看趋势,FWHM算尺寸,积分宽度拆应力。四个参数配合用,XRD分析不迷路。