1、本科毕业论文(科研训练、毕业设计)题 目:核磁共振仪器控制软件开发谱图数据处理软件包姓 名:学 院:软件学院系:软件工程专 业:软件工程年 级: 学 号:指导教师(校内): 职称: 指导教师(校内): 职称: 年 月摘要核磁共振仪器控制软件开发谱图数据处理软件包摘要 核磁共振是一种物理现象,已经作为一种分析手段广泛应用于物理、化学生物等领域,并在 1973 年用于医学临床检测。NMR(Nuclear Magnetic Resonance)技术即核磁共振谱技术,是将核磁共振现象应用于分子结构测定的一项技术,对于有机分子结构的测定来说,核磁共振谱扮演了非常重要的角色,核磁共振谱、紫外光谱、红外光谱
2、和质谱一起被有机化学家们称为“四大名谱” 。现在生产用于核磁共振谱分析的仪器主要有两家:Bruker 和 Varian。在国内,还没有相应的仪器出现,因此开发核磁共振仪器不仅会促进国内核磁共振技术的发展,而且可以填补国家在这一领域的空白。本文主要讨论了核磁共振仪器中一维数据处理的各种算法以及谱图显示,并讨论各种算法的原理和开发方法。谱图数据处理软件包是以 Java 为平台,用 Eclipse 来开发的;同时作者使用RCP( Rich Client Platform)技术开发一套以谱图数据处理软件包为依托的软件系统,并且利用 Draw2D 来显示谱图数据处理包的处理结果。该软件系统有界面美观、操
3、作简单等特点。关键字 核磁共振 NMR 谱图数据处理 RCP AbstractSoftware development of NMR instrumentSpectra data processing software packageAbstract Nuclear Magnetic Resonance is a physical phenomenon, and is used as an analytical tool widely in physical, chemical and biological fields, and in 1973 for medicine testing. N
4、MR that is NMR technology, is the phenomenon of nuclear magnetic resonance in molecular structure determination of a technology, for organic molecular structure determination, NMR plays a very important role. NMR, UV, IR and mass spectrometry together with organic chemist are known as the “four spec
5、trum.“ Now there are two companies which produce the instrument: Bruker and Varian. There is no corresponding equipment in our country. Therefore, developing the NMR instrument will promote domestic technology, and fill the gaps in this field Spectra data processing software package is based on Java
6、 platform and Eclipse as a tool using RCP (Rich Client Platform) technology to develop a software system based on the spectra data processing software package, and use Draw2d show the processed results. The software interface is beautiful, and operates easily and so on. Keyword NMR spectra data proc
7、essing RCP 目录目录引言 .1第一章 绪论 21.1 核磁共振技术基本原理 .21.2 软件开发工具 21.2.1 Eclipse 开发工具 .21.2.2 RCP 程序开发 31.2.3 Draw2d 简介 .41.3 项目背景简介 .5第二章 软件系统需求说明 62.1 软件目标 .62.2 输入和输出需求 .62.3 数据处理分析需求 .72.4 软件系统的流程图 .72.5 出错处理 .92.6 软件开发约束条件 .9第三章 软件系统概要设计 .103.1 软件系统总体设计思想 103.2 运行环境 103.3 软件系统的模块划分 103.3.1.I/O 模块 .113.3.
8、2.界面模块 123.3.3.数据处理模块 123.3.4 数据分析模块 .133.3.5 谱图显示模块 .133.3.6 系统总模块图 143.4 子模块数据流图 15目录第四章 软件系统详细设计 .164.1 界面设计 164.2 数据处理分析模块 194.2.1 傅立叶变换 194.2.2 相位校正 214.2.3 基线校正 294.2.4 寻峰 314.2.5 峰拟合 324.2.6 峰积分 334.3 谱图显示 334.4 命令解析 38第五章 软件系统测试及运行结果 .40总结 45致谢语 46参考文献 46ContentsContentsIntroduction .1Chapte
9、r 1 Prolegomenon .21.1 Basic Principle Of NMR21.2 Software Development Tools .21.2.1 Eclipse 21.2.2 RCP Programming 31.2.3 Draw2d Introduction 41.3 Brief Introduction to Project Background .5Chapter 2 Software System Requirement 62.1 The Goal Of Software System.62.2 The Demand Of Input And Output.62
10、.3 Data Processing Demand72.4 The Flow Chart Of Software System .72.5 Error Handling92.6 The Restriction Of Software Development 9Chapter 3 Preliminary Design Of Software System 103.1 The General Design Principle Of Software System103.2 Runtime Environment 103.3 The First Partition Of Software Syste
11、m 103.3.1. I/O Module113.3.2. Interface Module.123.3.3. Data Processing Module 123.3.4 Data Analyse Module 133.3.5 Spectrum Display Module13Contents3.3.6 The Whole Partition Of Software System143.4 The Data Flow Chart Of Submodule .15Chapter 4 Detailed Design Of Software System .164.1 Interface Desi
12、gn 164.2 Data Process And Analyse Module .194.2.1 Fourie Transform .194.2.2 Phase Correction.214.2.3 Baseline Correction.294.2.4 Peak Finding .314.2.5 Peak Fitting324.2.6 Peak Integral.334.3 Spectrum Display334.4 Command parse38Chapter 5 The Testing And Result Of Software System 40Summary.45Acknowle
13、dgement 46References .46引言第 1 页 共 49 页引言核磁共振的方法与技术作为分析物质的手段,由于其可深入物质内部而不破坏样品,并具有迅速、准确、分辨率高等优点而得以迅速发展和广泛应用,已经从物理学渗透到化学、生物、地质、医疗以及材料等学科,在科研和生产中发挥了巨大作用。在国内,核磁共振技术起步比发达国家晚,发展也较为缓慢。核磁共振技术需要一整套完整的硬件和软件,到目前为止,国内还没有相应的仪器和软件出现,使用的仪器和软件都是从国外进口的。这不仅消耗了大量的国家外汇储备,也给实验人员带来不便。因此开发出一套自己的核磁共振仪器必定会促进核磁共振技术的发展,并促进其他相关
14、学科的发展。核磁共振谱图数据处理是核磁共振技术中一个非常关键的环节,对分析结果产生重要的影响。可惜的是,现在有关这一领域的论文都比较零散,都只是讨论了其中的某一方面,甚至有些算法只能适合于某些谱图。作者参考了大量的论文和文献,综合了一维谱图数据处理算法,希望对以后的仪器控制软件开发能起到一定的作用。作者用 java 语言开发了一维谱图数据处理的各种算法,并形成一个软件包。该软件包不仅仅实现了核磁共振技术一维数据处理的算法,同时也改进了部分算法,提高算法的效率。之所以用 java 语言来开发,主要是考虑到 java 语言具有跨平台性,在 Linux 和 Windows 操作系统都能很好的运行。作
15、者同时开发出一套软件系统,该软件系统以该谱图数据处理软件包为依托,具有良好的用户界面和易操作的特点。本文以开发的软件系统为背景逐步介绍核磁共振技术算法。本文的总体结构以输入处理分析输出为主线。在输入模块里,主要介绍核磁共振数据 FID(Free Induction Decay 自由感应衰减)读取和显示;在处理模块主要介绍 FID 数据处理的一系列算法,这些算法有傅立叶变换、相位校正、基线校正;在分析模块主要介绍了寻峰、峰拟合、峰积分等算法;输出模块主要介绍数据处理结果的显示及操作。为了更好的理解该软件系统和一些核磁共振技术,本文会在绪论部分介绍核磁共振技术原理和软件开发使用的技术。为了能够验证
16、该软件系统的正确性,作者把开发的软件系统的处理结果跟 Varian 公司开发的软件系统进行比较,同时笔者也把处理结果跟现在国外一家公司生产的核磁共振谱图数据处理软件进行比较,从验证的结果可以看出,笔者开发的软件的处理结果正确,而且处理的方式方法比较灵活,开发的软件包可作为商业用途;但也有一些不足的地方,比如效率比较低核磁共振仪器控制软件开发第 2 页 共 49 页第一章 绪论1.1 核磁共振技术基本原理原子核有自旋运动, 在恒定的磁场中, 自旋的原子核将绕外加磁场作回旋转动, 叫进动(precession)。进动有一定的频率, 它与所加磁场的强度成正比。如果在此基础上再加一个固定频率的电磁波,
17、 并调节外加磁场的强度, 使进动频率与电磁波频率相同。这时原子核进动与电磁波产生共振, 叫核磁共振。核磁共振时, 原子核吸收电磁波的能量, 仪器记录下的吸收曲线就是核磁共振谱(NMR-spectrum)。由于不同分子中原子核的化学环境不同, 将会有不同的共振频率, 产生不同的共振谱。根据这种波谱即可判断该原子在分子中所处的位置及相对数目, 用以进行定量分析及分子量的测定, 并对有机化合物进行结构分析。1.2 软件开发工具1.2.1 Eclipse 开发工具Eclipse 是基于 Java 的整合型可扩展开发平台,它是一个开放的源代码,类似于NetBeans、 Sun ONE Studio 和
18、Borland JBuilder 等开发工具,也是目前最著名的开源项目之一,IBM 在最近几年里也一直在大力支持该项目的发展,目标是将其做成用以替代 IBM Visual Age for Java(简称 IVJ)的下一代 IDE 开发环境,并于 2001 年 11 月宣布投入四千万美元到该项目的研发。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。它主要由 Eclipse 项目、 Eclipse 工具项目和 Eclipse 技术项目三个项目组成,具体包括四个部分组成-Eclipse Platform、JDT、CDT 和 PDE。JDT 支持 Java 开发、CDT 支持
19、C开发、PDE 用来支持插件开发,Eclipse Platform 则是一个开放的可扩展 IDE,提供了一个通用的开发平台。Eclipse 开发软件平台界面如图 1-1 所示:第一章 绪论第 3 页 共 49 页图 1-1 Eclipse 界面1.2.2 RCP 程序开发在 Eclipse 平台的发展过程中,倡导的是插件的思想 。可以说,插件是 Eclipse 平台1,2的核心内容,但所有的这些插件的运行都要依赖于 Eclipse 平台。但当程序员开发桌面的应用程序时,往往想摆脱对 Eclipse IDE 的依赖,而是希望使用最小的运行环境来运行系统。所以在 Eclipse 3.0 以后的版本
20、中逐步地将插件的运行从 Eclipse 平台中剥离出来,从而形成了 RCP。简单地说,RCP(Rich Client Platform)系统本质上是 Eclipse 的插件,但运行时却能够脱离 Eclipse 平台而独立运行。这就使得 RCP 的应用更加灵活和广泛。在 Eclipse 中,虽然插件都是以同等的方式创建起来的,但是某些插件比其他的插件更重要。正如上图的 Workbench 和 Workspace 是 Eclipse 平台的两个必备的插件,他们提供了大多数插件的扩展点。如果在 Eclipse 工程中只包含有 Workbench 和 Workspace 这两个插件,那么这个工程导出后
21、的运行程序就是一个空的应用程序,它可以独立于 Eclipse 而存在。核磁共振仪器控制软件开发第 4 页 共 49 页1.2.3 Draw2d 简介Draw2D 是一个轻量级图形组件工具包 ,这些组件称为 Figure。所谓轻量级系统,就1是说 Draw2D 的组件与操作系统中的图形系统没有对应关系,Draw2D 对象不过是一个普通的 Java 对象。Figure 可以通过一种父子关系组合起来。每一个 Figure 都有一个边界(Bounds) ,它的子女必须都在这个边界中,而布局管理器用来管理子女的位置。一般来说,子女的位置会根据边界而变化,但是对于线状图元,它的边界会根据子女的位置和自己的
22、形状发生变化。Draw2D 是一个很有用的工具包,它借用 Java AWT 窗口系统的基本思想(主要是布局的概念)进行绘图,同时提供丰富的概念,用于解决绘图过程中的遇到的问题。总体来说,Draw2D 就是希望将绘图自动化,这也使得 Draw2D 在设计各种 eclipse 工具中扮演着极其重要的地位。Draw2D 一般包含以下几个概念:Draw2D 最重要一个概念就是 Figure。它可以看作是所有 Draw2D 图元的基类,事实上所有的 Draw2D 图元都继承自 IFigure 接口。所有Draw2D 图元的都是 Figure。Figure 类是一个 IFigure 接口的基本实现,可以用
23、它描述一个区域(矩形或者线形) 。Draw2D 第二个概念是 Layout。LayoutManager 是布局的接口,它负责定位 Figure 子女的位置。XYLayout 和 FreeformLayout 相当于绝对布局,使用这种布局的 Figure,它的子女位置可以自由分布。ToolbarLayout 是工具栏布局,使用这个布局的Figure,它的子女按照水平或者垂直的方式排布。FlowLayout 是流布局,使用这个布局的Figure,它的子女首先会尽量水平排布,如果排不下了,则进行垂直排布。StackLayout 是堆栈布局,它的子女图的大小都一样,而且都是叠加在一起。Draw2D 中
24、还提供了其他的布局,这里不再一一进行介绍。Draw2D 的结构图 如图 1-2 所示。3第一章 绪论第 5 页 共 49 页图 1-2 Draw2D 结构图1.3 项目背景简介本论文的项目背景是国家科技部支撑的“985”项目,它旨在开发出我国第一套核磁共振仪器,历时 3 年。项目分成两个小组来完成,硬件组和软件组。硬件的开发由中科院武汉物理研究所来完成,软件开发则由厦门大学来完成。软件部分不仅要求开发出来的软件能够跟现存比较流行的软件功能差不多,而且在有些方面还要比国外的软件更好。我主要负责这个项目的数据处理模块,涉及到的内容有 FID 数据的读取和显示,傅立叶变换,相位校正,基线校正,寻峰,
25、峰拟合,峰积分和核磁谱图的剪切、打印。这个项目不仅是一个科研项目,同时也是一个商业项目。因此开发出来的软件不仅算法要齐全,而且要能达到商业的目的。核磁共振仪器控制软件开发第 6 页 共 49 页第二章 软件系统需求说明2.1 软件目标开发出一套具有结果准确、灵活的数据处理、跨平台、良好的用户界面和操作简单等特性的核磁共振谱图数据处理软件。2.2 输入和输出需求仪器把采集到的时间序列数据以一定二进制数值格式(16 位整数、32 位整数、复数)存储到二进制文件 FID,实验的一些参数以文本格式存储到文本文件 curpar。二进制文件用于存储 FID(时间域)数据或变换后的谱(频率域)数据。二进制文
26、件由描述数据的文件头和随后的整数或者浮点数据组成。文本文件用于存储参数(采样、处理参数) 、谱峰列表、谱分析的结果等数据。二进制文件是存储在一个 filename.fid 的目录下,目录下有:filename.fid/fid:二进制文件,里面包含 FID 数据filename.fid/procpar: 文本文件,描述采集、处理 FID 数据的参数filename.fid/text:文本文件,实验备注说明。在本软件系统中只需用到 fid、procpar 文件即可。FID 或谱的二进制文件结构:data file header 32 字节,数据文件的头header for block 1 数据块
27、1 的头data of block 1 数据块 1header for block 2 数据块 2 的头data of block 2 数据块 2该软件系统应该能够识别核磁共振谱图数据格式,并且能够正确的读取和显示。核磁共振谱图数据一般有一维和二维数据,并且有的数据文件有包含多个数据块。数据的输入接口第二章 软件系统需求说明第 7 页 共 49 页要具有扩展性和统一性。软件系统输出形式应该是图形化的方式。这些图形应该能够支持 X 轴和 Y 轴的放大、缩小以及选取的放大缩小并能支持图形的拖动以及谱图的剪切、打印。如果有多个数据段的话,还应该具有两种谱图布局方式:垂直布局和水平布局,在布局中还要能
28、够显示图形的序号。在多个谱图下,该软件系统能够进行单个谱图的放大显示以及可以自由选择显示的谱图。用户可以自由选择谱图显示的颜色。2.3 数据处理分析需求该软件系统能够支持 FFT(Fast Fourier Transform) 、手动相位校正、自动相位校正、基线校正、多种寻峰方式、峰拟合、峰积分。在进行各种操作前用户能够设置相应的参数,以便在操作中得到所需的结果,同时也要提供一些比较常用的默认值,使得用户可以得到比较常用的结果。考虑到有些操作比较复杂,能够在软件第一次处理后保存中间处理结果,以国外公司的做法来看,软件要在傅立叶变换、基线调整后把结果保存成 FID 数据文件。如果用户再一次进行相
29、应的操作时,直接读取文件数据即可。在相位校正后,必须能够保存一级相位差和零级相位差的值。如果软件处理数据的时间比较长,应该以比较良好的方式提示用户有关信息,不应该没有任何的提示,或者提示有些突然(忽然弹出对话框之类) 。2.4 软件系统的流程图从用户那边收集到的数据处理流程如下:1. 从数据文件 FID 文件中读出数据点的值,并根据 “数据点”必须是 2 的 n 次方的原则,对数据点集进行充 0 操作,并显示数据的实部和虚部。2. 对充 0 后的数据点集进行傅立叶变换,变换后得到的是频率谱的数据点集,这些数据点都是复数点集,并把变换后的结果存储在内存中,并显示频率谱的实部、虚部、相敏谱和绝对值
30、谱。3. 对频率谱的数据点集进行自动相位校正,得到的结果同样是复数点集;如果自动相位校正的效果不是很好,则可以使用手动相位校正的功能,进行手动相位校正,并把一级相位差和零级相位差保存在数据 FID 文件夹下的配置文件,以便下次使用,核磁共振仪器控制软件开发第 8 页 共 49 页并把结果的实部显示。4. 对相位校正后的数据点集中的实部进行基线校正,得到的结果是基线校正后的复数点集的实部。由于这个过程自动化的效果比较好,就不需要进行手动的基线校正;并把变换后的结果显示。5. 数据点集的实部经过基线校正后,就可以进行谱图数据的分析;用户可以根据需要,设置相应的分析参数。6. 软件系统根据用户设置的
31、参数,把满足条件的峰给找出来,并显示峰点。7. 如果用户要进行峰拟合,直接在寻峰后的页面直接点击峰拟合按钮,即可以完成峰的拟合,并把结果显示出来。8. 用户可以在谱图上手动选择一个峰的区域,然后让系统进行峰的积分,并显示积分曲线。9. 如果用户要打印谱图,可以先剪切谱图,然后打印处理后的谱图。从以上的描述中,可以得到软件系统的一个总的流程图,如图 2-1 所示: 开始读取数据F F T 变换自动相位校正相位得到校正基线校正手动相位校正寻峰峰拟合 峰积分结束图 2-1 系统流程图第二章 软件系统需求说明第 9 页 共 49 页2.5 出错处理如果用户的操作失败或者操作无效时,应该马上告诉用户操作
32、无效的原因,并且提示用户如何操作才是正确,不能没有任何的提示甚至直接运行非法操作。2.6 软件开发约束条件按照国家科技部的要求,NMR 软件项目开发历时 12 年。从软件开发到毕业设计答辩差不多只有 3 个月左右,因此数据处理软件包有关内容没有办法在毕业答辩前完成。NMR 软件项目是一项科研项目,其涉及到的算法多而且复杂。理解核磁共振方面的算法需要跟物理系方面进行讨论和查看相关论文,这个需要一定的时间和精力。核磁共振仪器控制软件开发第 10 页 共 49 页第三章 软件系统概要设计3.1 软件系统总体设计思想软件系统使用 Eclipse 3.0 以后提供的 RCP 程序设计的功能,设计一个能够
33、处理核磁谱图数据的软件。该软件系统具有 Windows 界面风格,它具有项目区、命令区、谱图显示区、文件属性区等,出错提示良好。软件系统提供了一维数据处理的一系列算法,这些算法可以通过在运行前设置参数来达到不同的实验结果。软件系统在运行后保存相应的结果,并且在下次调用时直接读取结果显示,以达到快速的效果。软件系统将数据处理软件包处理的结果以图形化的方式显示出来。显示的谱图支持X、Y 轴等方式的放大、缩小和拖动,并且用户可以剪切谱图和打印谱图。对于多个数据段,软件系统提供垂直和水平两种布局方式以及隐藏谱图功能。3.2 运行环境软件是用 java 编写,具有跨平台的特性,因此对操作系统不做要求。软
34、件将有两种版本,一种包含 jre,另一种没有包含 jre。如果用户有装 jdk1.4 以上,则可以选择没有 jre 的版本,如果用户没有装 jdk1.4,则要选择 jre 版本的。软件对硬件系统没有特别的要求,但为了能让软件发挥更好的作用,建议运行软件的机器的 cpu 为 PIII 以上,内存在 256M 以上。3.3 软件系统的模块划分根据需求分析阶段得到的流程图,我们很容易把系统分成五个子系统,如图 3-1 所示。第三章 软件系统概要设计第 11 页 共 49 页软件系统I / O 模块界面数据处理 数据分析 谱图显示图 3-1 系统一级模块划分3.3.1 I/O 模块I/O 模块的功能:
35、读取 FID 数据,存储数据处理后的中间结果。从 FID 文件的结构可以将文件头和数据头分别封装成两个实体类, FileHeader 和BlockHeader。因此在 I/O 模块有三个类:FidReader 、FileHeader 、BlockHeader 。I/O 模块设计的类图结构如图 3-2 所示:图 3-2 I/O 模块类图核磁共振仪器控制软件开发第 12 页 共 49 页3.3.2 界面模块由于软件的作用主要为受过高等教育的人用来分析物质结构谱图,因此界面设计不会太花俏。软件的界面将提供多种的途径实现同一种功能,菜单、工具条以及命令。如果某种操作需要比较长的时间,将会在状态栏进行进
36、度条提示,同时界面上不会造成“死机” 现象。良好的出错提示,增加图标让出错更加显眼。谱图显示的颜色可以根据需要改变,让用户根据自己的喜好选择谱图的颜色。3.3.3 数据处理模块数据处理模块涉及的处理操作有:傅立叶变换、相位校正、基线校正。将数据处理模块进一步划分成 3 个模块:傅立叶变换模块、相位校正模块、基线校正模块。数据处理子模块层次图如图 3-3 所示:数据处理傅立叶变换 相位校正 基线校正自动相位校正 手动相位校正图 3-3 数据处理子模块层次图1. 傅立叶变换:傅立叶变换主要是将离散的数据转变成频率域上的数据,从而将 FID 上的数据转化成频率谱。同时,为了能够验证傅立叶变换的正确性
37、,系统也提供逆傅立叶变换。2. 相位校正子模块相位校正模块主要是调整谱图中的相位偏差。它调整的是经过傅立叶变换后一级相位偏差和零级相位偏差。第三章 软件系统概要设计第 13 页 共 49 页3. 基线校正子模块:基线校正子模块主要功能是将谱图中的基线调整到一条水平线上,使得后面的数据分析更加准确。3.3.4 数据分析模块谱图数据分析涉及到的算法有:寻峰、峰拟合和峰积分。将数据分析模块进一步分解成 3 个子模块。分解后的模块图如图 3-4 所示:数据处理寻峰 峰拟合 峰积分图 3-4 数据分析子模块层次图1. 寻峰子模块主要功能是寻找谱图中符合一定条件的峰点、峰的范围和峰宽。2. 峰拟合子模块主
38、要功能是将峰的曲线拟合成某中函数的曲线,然后分析该曲线的特性。3. 峰积分子模块主要功能是求峰的积分曲线,通过这条曲线可以对物质进行定量分析。3.3.5 谱图显示模块谱图显示模块主要负责谱图的放大、缩小、拖动和谱图的剪切、打印。因此,可以将谱图显示模块进一步细分成三个子模块。子模块的划分如图 3-5 所示:核磁共振仪器控制软件开发第 14 页 共 49 页谱图显示谱图放大 、 缩小 、 拖动谱图剪切 谱图打印图 3-5 谱图显示子模块层次图1. 谱图放大、缩小、拖动子模块主要功能是将谱图进行各种形式的放大、缩小和拖动,主要提供了 X 轴,Y 轴和矩形放大、缩小,以及随意拖动。2. 谱图的剪切主
39、要涉及谱图的数据显示剪裁,使得谱图上显示的都是用户感兴趣的谱峰。3. 谱图的打印主要功能是将谱图打印出来,可以打印成各种文件格式,它调用操作系统中的打印功能。3.3.6 系统总模块图综合以上的模块,可以将系统的模块汇总成如图 3-6 所示:软件系统I / O 模块界面数据处理 数据分析 谱图显示F i d 读取 F i d 写入 相位校正傅立叶变换 基线校正手动相位校正自动相位校正峰拟合 峰积分 寻峰谱图放大缩小和拖动 谱图剪切 谱图打印图 3-6 系统的整体模块层次图第三章 软件系统概要设计第 15 页 共 49 页3.4 子模块数据流图从上面的分析可以得到系统的数据流图,如图 3-7 所示
40、:I / O 模块傅立叶变换自动相位校正手动相位校正峰拟合基线校正寻峰峰积分F I D 复数点集频率数据点集频率数据点集l p 和 r p复数点集实部复数点集实部校正后数据校正后数据峰图 3-7 软件系统中子模块数据流图其中软件系统所有子模块都可以直接和谱图显示模块交互。核磁共振仪器控制软件开发第 16 页 共 49 页第四章 软件系统详细设计4.1 界面设计在软件开发过程中,软件的界面是一个非常关键的一个部分,它甚至决定了软件是否能在市场上推广。很多人都知道用 java 开发出来的应用程序界面难看,而且很多人都没有看过,这个致命的缺点使得 java 难以在应用程序领域占有一定的席位。Ecli
41、pse 开发工具的出现,人们认识到用 java 也能开发出类似于 Windows 的界面。但由于一些原因,Eclipse 没有提供工具让程序可以脱离 Eclipse 平台而独立存在。IBM 公司为了让用 Eclipse 开发出来的插件独立于 Eclipse 平台运行,封装了 Eclipse 两个最重要的插件 Workbench 和 Workspace,并在 Eclipse3.0 以后发布,RCP 程序开发也由此诞生了。把软件系统设计成类似于 Eclipse 界面,主要是本人认为 Eclipse 的界面非常美观,而且符合我们用户的习惯。软件在开始运行时有一个欢迎界面,这样不仅不会让用户程序没有响
42、应,而且更好地传递软件的意图。软件在打开数据文件后地界面如图 4-1 所示:第四章 软件系统详细设计第 17 页 共 49 页图 4-1 软件系统整体界面整个软件分成了四个区:项目区,命令区,谱图显示区,文件属性区。项目区主要显示当前实验文件,采用树形结构来显示实验文件的层次关系,并且在项目区上面添加了右键菜单功能和工具条功能:项目区的工具条和菜单栏,如图 4-2 所示:图 4-2 项目区的工具条和菜单栏提供的操作有:全部收缩:将项目区内的实验目录全部收缩;全部展开:将项目区内的实验目录全部展开;添加项目:在项目区添加一个实验目录;删除文件:将项目区内的文件删除。右键菜单:提供的操作有:添加项
43、目和删除文件,具体功能和工具条、菜单栏的一样。在添加项目时,我们提供一种向导来完成项目的添加,使得用户更容易和准确地添加项目,如图 4-3 所示:图 4-3 添加工程核磁共振仪器控制软件开发第 18 页 共 49 页命令区主要是让用户输入命令,并且用户可以在上面查看以前所用过的命令,如图 4-4所示:图 4-4 命令行如果命令执行正确的话,会在状态栏上显示命令执行正确,如果操作失败,则提示操作失败;提示时加上显眼的图标。谱图显示区主要是显示操作后数据的谱图显示。文件属性区主要是显示现在进行处理和分析的 FID 文件头部信息,这些信息将组织成树形结构。除了以上四个区以外,软件系统还带有一般软件系
44、统都有的菜单栏、工具条和状态栏。菜单的构成为一个图片菜单文字;工具条上的一般只有图片,并在必要的时候进行分组,并且有多种按钮形式。状态栏上主要显示一些长时间操作的进度,它含有一个 Fast View 的按钮和各种提示信息,在状态栏上各个分区的提示信息类型如图 4-5 所示:图 4-5 状态栏信息属性具体提示信息情况如图 4-6 所示,该图是进行自动相位校正的提示信息:图 4-6 长时间操作提示为了减轻用户记忆各个按钮的作用的负担,软件系统增加了提示功能,如图 4-7 所示:图 4-7 帮助提示为了能在实验中对实验操作进行参数设置,软件系统提供一个参数设置界面,参数可以在程序运行时自动加载一些默
45、认值,有些参数还可以从参数文件直接加载。界面如图 4-8 所示:第四章 软件系统详细设计第 19 页 共 49 页图 4-8 参数设置对话框在这个界面中可以选择谱图和峰的显示颜色,设定基线校正中的噪音指数和平滑窗口大小和峰分析中峰点判断的点数和样本点,选择寻峰算法,选择拟合函数和参数的设定以及选择自动相位校正算法。4.2 数据处理分析模块4.2.1 傅立叶变换傅立叶变换的作用是将离散的空域数据转化成频率域数据,由于核磁共振仪器采集到的数据不是频率域的数据,但是我们进行谱图分析的时候,只要频率谱。因此要进行傅立叶变换。对于变换长度为 N 的序列 x(n)的离散傅立叶变换(DFT)可以表示为:(4
46、-1)10()()NnkknXDFTxW核磁共振仪器控制软件开发第 20 页 共 49 页其中 , 和 x(n)均为复数。从上面的公式可以看出,傅立叶变换的效率很低。因2/NWekX此,人们一般用快速傅立叶变换对数据进行变换。快速傅立叶变换有很多种 ,如时域抽取4算法(DIT:Decimationintime ) 、频域抽取算法(DIF:DecimationinFrequency) 、CooleyTurkey 法和 Winograd 法等。快速傅立叶变换算法一般要求复数点 个,以2MN下是推导时域抽取的快速傅立叶变换。将公式(4-1)分解成如下公式:(4-2)/2110/2()()NNnknk
47、k NnXxWx,k=0,1,N/2-1 (4-3)/21/1(21)00()(nkrKNrr根据簇转因子 的周期性和对称性,可以将 进一步表示为:kNWkXk0,1, N/2-1 (4-4)12()()/NkXkxWx式(4-4)中 和 分别为偶序列和奇序列的 N/2 点 DFT。由此可见,只需求出 0 到1xk2(N/2-1)区间的所有 和 的值,即可求出 0 到(N-1)内所有 的值。12xk Xk然后通过蝶形算法来进行计算,蝶形算法的示意图如图 4-9 所示:1()xk2() 12()()kNxW12()()kNxkNW图 4-9 蝶形算法示意图根据上面的理论可以求出 FID 的傅立叶
48、变换后的结果。具体程序的流程如表 4-1 所示:表 4-1 FFT 算法流程数据输入:FID 上离散的数据点集算法描述:第四章 软件系统详细设计第 21 页 共 49 页1. 抽取奇数位置上的复数点2. 递归调用 FFT 算法,将奇数位置上的复数点进行傅立叶变换3. 抽取偶数位置上的复数点4. 递归调用 FFT 算法,将偶数位置上的复数点进行傅立叶变换5. 循环 k 从 0-N/2,使得位置 k 的值等于奇数点 k 的值加上偶数点的值乘以 kNW使得 k+N/2 上的值等于奇数序列 k 的值减去偶数点的值乘以 。kN数据输出:频率域上的数据点集上面的程序变换后并没有进行零频域调中心操作,这对谱
49、图显示不好,而且对后续的计算不利。因此我们要将傅立叶变换后的零频域的数据点调到谱图的中心。调整原理见图 4-10 所示:图 4-10 零频率调整规则从这个示意图可以看出,将谱图的后半部和前半部互换即可实现零频率的调整。为了验证快速傅立叶变换的正确性,软件包还提供了逆傅立叶变换函数。4.2.2 相位校正由于仪器和实验条件的关系,核磁共振的 FID 信号经 FFT 变换后所得的谱图往往不是需要的纯吸收型,NMR 谱的相位校正也就成了 NMR 数据处理中一个基本环节。理想的NMR 谱的实部和虚部分别为吸收型和色散型。由于客观条件,总要引起某种相移,使色散型和吸收型混合。不同相位误差的情况如图 4-11 所示。相位误差可分成两类:一类是与频率无关,成为零级误差。它是由于检波器相位不对引起的。另一类与频率有关,并且一般表现为线性关系,称为一级误差 。其来源主要有三种:5(1)激发 FID 的射频脉冲的功率有限,做不到真正均匀地照射谱宽范围。核磁共振仪器控制软件开发第 22 页 共 49 页(2)为了避免脉冲泄漏和攻放的死时间,脉冲后到采样取数开始之前,不可避免地要有一个前延迟时间。(3)为了压低高频