真实 FID 处理按可复算步骤进行
代码输出需要与原始记录和已保存的谱逐项对照。
读图时保留这项条件:本页乙醇处理练习检查数据处理,积分接近整数比例不等于完成定量验证。
先用一个模型练习相位与基线检查
改变相位和斜基线,比较吸收外观和对称窗口面积。
8.2.1 从一份有来源的乙醇记录开始
本节使用 BMRB 小分子条目 bmse000297 的实验1,读取真实 Bruker FID,再与同一条目保存的处理谱比较。条目报告样品为100 mM乙醇,溶剂 D₂O,DSS 参照,298 K,pH 7.4,使用 Bruker DMX 400 MHz。该条件下主要检查甲基和亚甲基;不要求可交换 OH 必须出现在氢计数中。
展开说明与推导
数据来源、原目录、处理脚本和环境锁定文件已整理为乙醇 FID 练习包。解压后先读说明和来源记录,再在独立环境安装所列依赖。完整脚本使用显式输入与输出目录;保留原目录,把新结果写入工作目录。包内给出预期结果,便于读者检查本机计算。
本次复算环境为 Windows、Python 3.12.10、nmrglue 0.12、NumPy 2.4.6、SciPy 1.18.1、Matplotlib 3.11.2。这是实际运行的版本组合,并非对其他平台的兼容保证。处理报告保留核心版本、原文件散列、谱轴及面积,不要求依赖软件必须永远停在这些版本。
练习包还包含条目保存的实谱与虚谱,以及解释它们的处理参数。与单独下载一个图片相比,这些文件允许按同一轴重新积分。若只希望查看谱形,可以先检查预期图;要复算数值,则从原目录运行脚本,并核对报告中的输入散列。
从指定 FID 重建可检查的一维谱,记录相位与积分,并比较处理选择的影响。该历史采集没有在本节重新完成定量方法验证,因此面积接近3:2只作为处理与结构计数的一致性检查。
8.2.2 读取复数数组并修正数字滤波
nmrglue 的 Bruker 读取器返回参数字典和 NumPy 数组。该文件读出16384个复数点,谱宽为4807.69230769231 Hz。先打印类型、形状和采集参数,确认这是一维复数时间信号。不要在傅里叶变换前把虚部丢弃,否则会失去正交检测所提供的频率信息。
展开说明与推导
这份 Bruker 数据需要按元数据处理数字滤波延迟。本节调用库提供的修正函数,得到16310个点。点数改变属于算法处理记录,不意味着原始仪器只采集了这些点,也不能把74点差值当成任何样品都适用的固定删点规则。
import nmrglue as ng
dic, fid = ng.bruker.read("data")
clean = ng.bruker.remove_digital_filter(dic, fid)
sw = float(dic["acqus"]["SW_h"])
print(fid.shape, clean.shape, sw)
用首段 FID 和频域基线观察修正效果。残余相位斜坡、谱端伪影或不合理的延迟参数需要追查读取和修正,不能用后续基线程序掩盖。若数据来源不同,检查相应采集与读取文档;旧式或其他厂商实验不应无条件套用此函数。
时间信号的实部会振荡,多频率叠加还可能形成拍频,因此不能要求首段包络单调下降。检查实部和虚部是否异常截断、数值是否溢出、采集尾段是否仍有显著相干信号。尾段未衰减充分时,加窗可减轻截断伪影,却没有补回未采集的信号。
一维检查通过,也不代表二维流程已通用。二维数据的间接维、正交方式与采样顺序需要额外处理。将本节脚本直接用于二维数组,可能使函数仅处理最后一维而留下另一维未变换;数组成功输出并不等于二维谱已经重建。
8.2.3 加窗、补零与频率轴
本次采用1 Hz指数加窗,补零到32768点,再做傅里叶变换。指数窗随时间衰减,使末端噪声权重降低,同时增加线宽。为了保持单位正确,传给 proc_base.em 的参数使用加宽量与谱宽的比值;把数字1直接传入此参数会产生完全不同的强衰减。
展开说明与推导
weighted = ng.proc_base.em(clean, lb=1.0/sw)
padded = ng.proc_base.zf_size(weighted, 32768)
spectrum = ng.proc_base.fft(padded)
在当前复数采样约定下,间隔约0.208 ms;变换后的 Hz格点为4807.69230769231/32768,约0.146719 Hz。使用约400.132 MHz的实际观察频率,ppm格点约0.000366679。补零后的密集格点有助于显示和数值积分,但原始观察时长没有因此增加。
谱轴通过字典推断与单位转换对象生成,不能仅用0到10的等分数组替代。本次轴从约10.81298到−1.20198 ppm,按原记录的参照保存。处理后的数组需与该轴同方向、同长度。若反转强度数组而不检验轴,就可能把乙醇信号放到错误区域。
保存数值谱时同时导出 ppm 和任意强度两列,并说明是否取了实部、是否反转及采用何种 FFT 归一。整体倍数通常在面积比中抵消,但与不同软件的绝对面积比较时不能忽略。文件中每一列的单位和含义应能独立阅读。
为了比较加窗作用,应保持其他参数相同,只改变加宽量,再观察峰宽和噪声。若同时换了相位、基线和显示纵轴,无法知道差异由哪一步引起。较宽而平滑的谱看起来更整齐,却可能把相近裂分线合并,使后续耦合读取变差。
参照检查也要留有来源。当前轴沿用条目参数,不能仅凭乙醇的常见位移决定整谱平移。若重新以某个参照峰校准,应记录峰的选择、中心定义和位移改变量,并将新谱标成另一处理版本;原记录的偏差仍保留供比较。
8.2.4 自动相位需要人工检查
复数谱经过相位旋转后,实部才适合按吸收谱进行计数。零阶相位对全谱施加同一角度,一阶相位随数组位置变化;其数值依赖软件的轴、枢轴和变换约定。不要直接把一个软件的两个相位数字抄到另一个软件而不核对定义。
展开说明与推导
本次 ACME 自动算法给零阶约−86.821859°、一阶约57.854855°。它优化谱形评价函数,不能替代对吸收线、负翼和基线的检查。强水峰、混合正负信号、低信噪比或复杂基线都可能影响目标函数;优化器报告收敛只说明达到了数值停止条件。
phased, phases = ng.proc_autophase.autops(
spectrum, "acme", return_phases=True, disp=False)
y = phased.real[::-1]
udic = ng.bruker.guess_udic(dic, y)
ppm = ng.fileiobase.uc_from_udic(udic).ppm_scale()
为检查自动解附近的谱形,本节另取固定相位−87°、58°,人工查看两组乙醇峰及区间边缘。固定相位是在自动结果附近进行的检验,不是独立盲评。两组线在图中基本重合,没有明显色散负翼;同区间局部基线面积比约1.478405,与自动结果约1.478655接近。
人工检查时,把主要峰放大至能看到两侧峰翼,再返回全谱检查其他区域。只把峰顶调成正值不足以确定相位,因为带色散成分的线也可有正峰顶。对宽峰或被抑制区域,不能简单要求所有数据点非负;要结合脉冲实验与处理目的理解。
本例的固定参数已经保存,重复执行无需再次拖动滑块。如果人工调整的结果与自动相位差距很大,应检查算法是否主要优化了水或参照峰,以及一阶相位是否在较远位置放大偏差。两种结果都应保留,直到能够解释哪一种更适合报告峰。
记录相位参数、定义及被检查的区域。比较峰两侧与基线,检查远离主要峰的区域;保留复数谱,使后来仍能调整相位。不要先丢弃虚部,再宣称完整相位已经验证。
习题 8.2-1 · 指数加窗的单位
谱宽4807.6923 Hz,要施加1 Hz加宽,em 的 lb参数约为多少?
参考解答参数为1/4807.6923≈0.000208。它是无量纲比值。数值1意味着约4807.7 Hz的加宽,不能理解成1 Hz。
8.2.5 以明确边界比较积分
甲基区取1.00–1.35 ppm,亚甲基区取3.45–3.85 ppm。先报告区间内原始实谱面积,再用两端各约5%数据的中位数建立局部直线基线,并报告扣基线面积。这里的直线方法只适合本次较清楚的局部窗口;它不是通用的自动基线答案。
展开说明与推导
自动处理的两组局部基线面积分别约9728.751和6579.461,任意面积单位一致,比值1.4786546。直接面积约10168.129和6893.423,比值1.4750479。面积应按 ppm增大方向积分;对递减轴直接积分会产生负号,脚本将区间数组反转后计算。
结构氢数为3:2,但程序没有强行把面积调到1.5。改变合理边界会改变峰尾收集与基线估计,能够检验处理敏感性。两区同时缩窄0.02 ppm,比值约1.481519;同时扩宽0.02 ppm,约1.488284。三种结果相近但不完全相同,实际范围应写入报告。
展开说明与推导
高相关系数也不能保证面积完全正确。两种谱都可能把同一杂质包含在窗口内,或因相近的处理习惯保留相同偏差。定量判断还需要弛豫、激发、重叠和制样证据。对本例而言,计数支持乙基片段,而不是由一个积分比独立确证全部样品组成。
局部直线连接的是边缘背景估计,边缘如果仍含明显峰尾,会扣去一部分信号。扩大窗口有时改善收集,却也可能纳入邻峰或基线弯曲。这里的三次窗口比较同时反映两种影响,因此不能把面积变化全部解释为“找到了丢失的氢”。
若面积窗口内存在相位负翼,正负面积相消可能使计数偏低;取绝对值并不能解决问题,还会把噪声转成正面积。应先修正适当相位与背景,保持原始有符号数据。对重叠严重的窗口,可暂报总面积,等建立可信组分模型后再讨论分配。
习题 8.2-2 · 正确计数与实际偏差
若面积比1.478655,按亚甲基为2H归一,甲基的表观计数是多少?
参考解答表观计数为2×1.478655=2.95731H,与目标3H相差约1.423%。这是响应计数,不是分子含有非整数氢。应检查采集和处理条件,而不是修改乙醇化学式。
8.2.6 对照保存谱并报告边界
读取 pdata/1 的保存谱,在相同积分边界下采用相同局部基线算法,得到面积比约1.490283。新处理与保存谱的全数组相关系数约0.990571。它们来自同一 FID,差别可帮助检查处理选择,不能作为两次独立采集的重复性数据。
展开说明与推导
条目指认表列出1.175和3.645 ppm,本次按检测谱线峰高加权所得中心约1.169873和3.640960 ppm。这个加权中心受峰线高度、相位及检测格点影响,不应冒充自旋哈密顿量拟合的化学位移。保留偏差,并检查参照与中心定义,避免为了与表格一致而静默平移谱轴。
峰提取阈值为区间局部峰高的8%突出度,得到甲基三条、亚甲基四条主要谱线。弱卫星或杂质可能未被该阈值报告,因此线表也不能称为全谱所有真实峰。若阈值改变,保留旧参数并比较新的线表;多重峰中心、裂分常数和杂质排除属于后续解释。
读取到三条和四条线只是当前分辨率与阈值下的观察。谱线间距应先换算为 Hz,再比较两组是否共享耦合;不能直接把 ppm 间隔当作耦合常数。峰线高度加权中心用于本次对照,而精确自旋参数将需要下一节的前向模拟及随后的拟合。
判断复算一致时,先比输入文件和点数,再比谱轴、参数和局部数值。图像文件可能因绘图库字体或文件头不同而具有不同散列,即使谱数组相同。将数值结果与展示图片分别比较,可以避免把排版差异误认为科学计算失败。
输出成功、谱形相似和接近3:2,分别支持计算可运行、处理相容和计数合理。它们没有独立完成样品纯度、浓度或未知结构唯一性的验证。
展开说明与推导
复现报告把原文件散列、参数、相位、窗口、未扣与扣基线面积一并保存。读者可先复算本例,再改变一项处理选择:去掉加窗、换固定相位或调整积分边界。每次只改变明确参数,并解释结果变化的原因,才能判断算法适用于何种谱,而不只是得到一条好看的曲线。
习题 8.2-3 · 两种谱的相关系数
同一 FID 两种处理谱相关系数0.991,能否证明定量误差小于1%?
参考解答不能。相关系数衡量整体数组相似性,不直接限制局部面积偏差;强峰可能主导相关,两种处理也可能共享采集偏差。需比较报告峰的面积及相关采集条件,并按定量任务验证。
关键术语
- 参数字典
- 读取器返回的采集与格式信息。
- 复数采样点
- 各含实部与虚部的时间信号点。
- 数字滤波延迟
- 接收数字滤波引入的时间域处理问题。
- 指数加窗
- 按指数时间权重调整信号的处理。
- 补零
- 在时间数组中添加零以加密频率格点。
- 零阶相位
- 对全谱相同的相位旋转。
- 一阶相位
- 随频率或数组位置变化的线性相位。
- 局部基线
- 针对指定积分窗口估计的背景。
- 处理敏感性
- 结果随合理处理选择改变的程度。
参考文献与数据
- Helmus JJ, Jaroniec CP. 2013. Nmrglue: An open source Python package for the analysis of multidimensional NMR data. Journal of Biomolecular NMR 55, 355–367. 软件原始论文。
- Madison Metabolomics Consortium. BMRB bmse000297: Ethanol. 条目 DOI;条件与指认原记录。
- nmrglue 项目. Processing 1D Bruker Data;提供读取、滤波修正与处理背景,本节使用独立脚本及不同样品。
- Chen L, Weng ZQ, Goh LY, Garland M. 2002. An efficient algorithm for automatic phase correction of NMR spectra based on entropy minimization. Journal of Magnetic Resonance 158, 164–168. ACME 原始研究。
- nmrglue 项目. proc_base API及自动和人工相位 API;调用参数须与所安装版本核对。