对齐规范

2024-08-21

对齐规范(精选7篇)

对齐规范 篇1

机器翻译是人们借助计算机技术实现不同语言之间的转换,运用软件将一种语言转换成另一种语言。在对自然语言的处理上需要对机器翻译进行实验。机器翻译能够对各类语言加以转换,同时也对语言的研究有推动的作用。现在,人们进入了全球一体化的时代,机器翻译为人们提供了很多的方便, 机器翻译的前景也是比较好的。但是,随着社会的发展,不同语言的资料也越来越多,如果仅仅采用人工翻译,需要耗费大量的时间,采用机器翻译能够节省时间,而且也符合现代化社会发展的要求。

1汉语和维吾尔语词的对比分析

1.1单纯词的对比

在汉语中,单纯词是由单独的语素构成的,这个语素可以是实词,也可以是虚词。在维吾尔语中,单纯词是没有明确的定义的,其语言的形态变化是非常得丰富的,语法的遍体也是由不同的词干和词尾构成的。通过对汉语和维吾尔语的词对比分析,可以分析出汉语的单纯词是由单个的语素构成的,而维吾尔语的单纯词可以由不同的语素构成。

1.2派生词的对比

派生词是合成词的主要分支,在汉语和维吾尔语这两种语言中,派生词一般都是通过添加后缀的形式实现的,维吾尔语中的派生词一般都不会采用前缀。在汉语中,派生词运用前缀的形式要多一些,但是也不如后缀多。在维吾尔语中,派生词的主要构词法是添加后缀,其在构词中发挥着关键的作用,比在汉语中发挥的作用要大的多。

1.3复合词的对比

汉语中的复合词是由不同的语素构成的,其主要有偏正关系、支配关系等。在维吾尔语中,复合词的构成方法类似于汉语中句子的构成方法,要通过对句型的分析才能够构成复合词。

2面向机器翻译的汉维双语词对齐规范和主要方法

机器翻译是人们运用计算机实现语言之间的转换,面向机器翻译的汉维词语对齐规范符合现在化发展的需要,所以,应该对汉语和维吾尔语研究的基础上,分析两种词汇的结构,分析其在词法和句法方面的不同,才能够实现两种语言的准确地转换。

2.1词的对齐规范的定义

在汉语和维吾尔语两种语言的转换中,实现句子的对齐,句子中的词汇和词汇之间形成连接,词语的对齐是在两个句子之间能够寻找到词汇的子集,从而能够实现句子互译关系的衔接。

1) 一对一对齐

在原有的语言的基础上,其相应的位置或者在更加得范围中,所有的专业术语可以完全地对等,两种语言能够互译,这样就能够实现所有词汇的对应,这样的对齐叫做一对一对齐。

2) 一对多对齐

这种对齐方式实现了词汇的整体化对齐,是单个词能够对应不同语言的多个词汇,此于此的对应不是一对一对齐,而且也不是没有对齐的方式。

3) 多对多对齐

这种对齐方式指的是在维吾尔语里面有几个词汇能够与汉语中的一个词汇对应,实现词汇的全面地表达,这种对齐方式还是比较少见的。

4) 空对齐

这种对齐方式指的是在汉语里面没有词汇能够与维吾尔语中的词汇对应。

2.2词对齐规划的方法

1) 语义的对等

将一种语言转化成另一种语言的过程中,原有的语言可以翻译成不同的语言,有很多种翻译方法,这些译文尽管使用的词汇不同,但是都可以表达相同的意思,所以他们在语义上能够实现对齐,只是选择的词汇不同。在翻译的过程中,使用不同的词汇对句子翻译,都可以实现两种语言的对齐。

2) 位置的对应原则

汉语和维吾尔语在翻译的过程中除了要实现语义的对齐之外,而且还要实现为止的对弈,根据上下文的语境来翻译,在翻译的过程中是不能离开语境的,所以应该遵循位置对齐的原则,当不能运用准确的词翻译时,在机器翻译时要运用空对齐。

3) 最小的匹配原则

在这项原则中,应该准确地用词,将那些最准确的词汇实现优先对齐,首先要实现虚词的对齐,然后将两种语言的词组对齐,实现专有名词的对齐,尽量实现一对一的对齐方式。

4) 最大的匹配原则

在汉语和维吾尔语双向翻译的时候,尽量实现双向的对齐,在对词汇连接的过程中,需要对齐的词汇有多少,那么,另一种语言也应该选择多少词汇。为了能够形成一个系统的语义单元,所以,在词汇选取的过程中,可以选择一些连接词,这些词汇具有固定的表达方法,而且还能够形成习惯用语,这些词汇的结构是非常得紧密的,一般都是以复合词或者合成词的形式出现,当两个语素拆开后,单个的语素就不能构成完整的意义,这类词一般是由动词短语或者带有前缀或者后缀的词汇构成的,这种词汇一般是采用一对多的对齐方式,实现最大化的匹配。

5) 减少对齐到空

在汉语和维吾尔语的翻译中,如果在一种语言中不能找到与之对应的语言,尽量不采用空对齐的方法,可以将这些句子采用对齐到空的方式,但是这种方法要谨慎使用。

6) 相关的注意事项

在汉语和维吾尔语相互翻译的过程中,如果发现了句子翻译有错误,或者出现单个词汇拼写错误的问题,这两种情况下, 一般可以采用空对齐的方式来处理,否则如果原文出现了拼写的错误,在采用机器翻译的时候,机器是不能自动的识别错误的,给机器的翻译工作带来错误,而且会出现一些不能理解的信息,导致机器翻译的正确率下降,所以,为了防止上述问题的出现,就必须采用空对齐的方法,在选择对齐方式的时候要反复地检查。

2.3汉语平行语料库加工处理系统的词对齐

2.3.1词对齐模块的分析

1)进入词的对齐模块

如图1所示,进入机器翻译界面后,点击对齐管理项目,进入词语对齐,就能够实现进入词的对齐模块,如果存在词对齐的任务,那么,这个界面就会将任务显示出来,一般会以第一个句子来安排。

2)词组对齐界面分析

词组的对齐是针对汉语和维吾尔语的句子中各个词汇的对齐方式,实现句子中每个词汇的对应关系,右边是汉语的句子,左边是维吾尔语的句子。

3)建立对齐

在汉语和维吾尔语中,选择两个词语对齐,这时可以采用一对一对齐和一对多对齐的方式,然后点击鼠标的右键,选择 “对齐”方式,实现两种不同语言中词汇的对齐。

4)取消对齐

取消对齐只能是在不同的语言的词组中实现,在句子中是不能实现的,在取消对齐之前,应该先选中要取消对齐的两个词组,然后实现对齐的取消。

5)空对齐和取消空对齐

空对齐指的是在一个句子中有某个词汇是不能够与其他语言的词汇对应的,在建立空对齐时直接点击鼠标的右键选择空对齐就可以。取消空对齐也是点击鼠标右键,然后选择取消空对齐就可以了。

2.3.2句子的编辑

1) 词语的拆分:将要拆分的词语选中,然后找到菜单中的 “分词”就能够实现词语的拆分。

2) 词语的合并:将拆分的词语选中,然后选择菜单中的合并。

2.3.3词对齐的分析

1) 一对一对词齐

一对一词对齐是将原有的语言与位置相同的语言实现较大范围的对齐,使大范围中的词汇或者句子中的语义保持一致,实现二者的互译,其能够实现对普通字典或者专业字典的此条使用,这样的对齐方式被称为一对一词对齐。一对一词对齐的方式是针对词汇或者词组的,不包括句子,在汉语和维吾尔语中,在语义完全相同的词汇或者词组中能够建立这种对齐方式,而且对齐的词汇能够在一个较大的领域中实现互译,在互译的过程中是具有普遍性特点的,一般双向的翻译词典就是通过这种方式来实现的。

2) 一对多词对齐

这种对齐方式实现了词组的整体对齐,是词组与单个词的对齐方式,在表示对齐词组的过程中,这样的两个词既不是一对一的对齐,但是为了能够实现词汇和词组的对齐,采用一对多词的对齐方式。

3) 多对多词的对齐

这种对齐方式一般是使用在词组和词组之间的对齐,不同的词组之间能够实现互译,一般是采用这种对齐方式。

4)空对齐

这种对齐方式一般是对虚词的对齐,在维吾尔语中,没有词汇能够与汉语中的虚词对应,所以,像汉语中“了”“之”“过” 等词汇都是采用空对齐的方式。

2.4存在的问题和解决方法

由于汉语和维吾尔语所属的语言体系是不同的,汉语属于汉藏体系,而维吾尔语属于阿尔泰语系,这两种语言要实现完全意义上的对齐,不能运用任何的比较语言学进行分析。历史比较语言学是将两种同语系的语言进行对比,分析两种语言中的共有部分,从而能够分析两种语言的亲属关系,通过比较和重建的方法分析对比两种语言。但是,在对汉语和维吾尔语进行对比时,要对两种不同语系的语言进行对比,从而在机器翻译的过程中能够实现对齐。

首先要实现的是词量的对齐,在汉语中,词量指的是对人或者事物的数量的表达,如“一个人”,运用词量的表示方法从而能够对不同人或者事物的数量表达清楚。在汉语和维吾尔语中都存在表示数量的词汇,在汉语中有大量的量词,但是在维吾尔语中的量词是比较少的,两种语言的属性是不同的,汉语是能够以孤立的形式存在的,但是维吾尔语却是一种粘合的语言,所以,在机器翻译的过程中要花大量的时间实现两种语言量词的统一。其次是实现介词的对齐,如果二者的介词存在对齐的部分,那么就可以直接使用,如果在维吾尔语中存在着不同的后缀词,那么,可以将词汇进行粘合,然后实现汉语和维吾尔语中介词的对齐。

3结语

由于汉语和维吾尔语属于不同的语言体系,所以其语言的构成也是不同的,在机器翻译的过程中首先要实现的是词汇和词组的对应,这样才能够提高机器翻译的准确率。

基于信号空间对齐的网络编码方案 篇2

无线通信中,近年来提出的中继技术和共享介质的技术可以有效地改善系统性能,提高系统容量,解决越来越稀缺的无线资源( 时间、频率等) 。在中继技术中,双向中继信道技术在各个领域,如蜂窝网络和Ad-hoc网络[1,2]都有研究,并且推广到双向的多对信息交换[3,4,5],显著地提高了系统的吞吐量和网络覆盖范围。本文基于双向中继多对信息交换技术,共有K个用户通过中继通信,任何一个用户可以通过中继向另外K - 1 个用户发送信息,同时接受K - 1 个用户发来的信息,用户之间不能直接发送信息。

共享介质的方式,由于无线通信的广播特性,共用相同频率的通信方式必然会带来共信道干扰的影响。共信道干扰会严重降低系统的传输速率,影响系统的性能。为了克服共信道干扰和提高系统容量,当前代表性的研究有干扰对齐和网络编码。

干扰对齐[5]通过发送端的联合处理,将干扰重叠投影到一定的子空间内,信号子空间和干扰信号子空间相互正交,可以有效抑制干扰,来提高信道的自由度和信道的容量。文献[6]研究发现,利用干扰对齐,K用户的时变信道的自由度可以达到K/2 。文中所用的信号空间对齐的思想来源于干扰对齐,但也存在差别。在MAC阶段,利用波束成型矩阵使用户需要交换的信息对齐到一个空间,K用户相互发送K( K - 1) 。信息在中继节点对齐到K( K -1) /2 子空间,并在中继点联合检测和网络编码成合适的信号。在BC阶段,通过合适的波束成形矩阵,使用户接收到信号后,可以抑制干扰,最终译码到合适的信号。

在多跳网络中,网络编码[7]是通信网络中信息处理和传输理论研究上的重大突破,其核心思想是允许网络节点对传输信息进行编码处理,运用网络编码能够很好地抑制干扰,提升网络吞吐量、均衡网络负载和提高网络带宽利用率等。网络编码技术的实现当前主要有PNC[8]和ANC[9],这里采用的是ANC网络编码,算法简单,容易实现。

在本文中,(·)T表示转置,(·)H表示共轭转置,(·)-1表示求逆,span( ) 表示列矢量张成的空间,rank( )表示取秩操作,tr( ) 表示取迹操作。

2 系统模型

图1 为K用户的双向中继信道系统模型。用户i通过中继向K - 1 个用户发送不同的独立信息,同时接收到K - 1 个用户的不同信息。用户i配置M个天线,中继配置N个天线用户发送K - 1 个独立的信息到K - 1 个用户,用户之间没有直接链路。假设每个节点都工作在TDD模式,整个通信过程需要2 个时隙。第1 个时隙,称为多址接入( MAC) 阶段,每个用户同时把需要交换的信息发送到中继节点; 第2 个时隙,称为广播信道( BC) 阶段,中继处理信息后,发送到每个用户。

3 传输过程算法设计

3. 1 MAC阶段

用户i发送到用户j( j ≠ i) 的信息记为w[j,i],用户发送的符号为s[j,i],中继节点共能收到K( K - 1) 个独立信息,信息量大,处理复杂度高。利用信号空间对齐技术,把需要交换的信息w[j,i]和w[i,j]对齐到一个子空间,从而降低需要中继转发的信息量,子空间之间没有相关性。为了在中继把需要相互交换的信息对齐到一个空间内,需要选用合适的波束成形向量v[j,i]。假设,发送端、接收端和中继都能得到良好的信道状态信息( CSI) ,那么用户i发送的信息可以写为

式中: x[i]为M × 1 的向量,为了满足功率限制,需 ,pi为用户发送功率。

H[R,i]是用户i到中继的N × M信道矩阵,矩阵的每一项都服从独立同分布的复高斯分布,为了使来自不同用户的相互发送的信息s[j,i]和s[i,j]在中继对齐到一个子空间,需要满足

系统有K个用户,每个用户之间需要相互传递信息,则在MAC阶段,需要对齐CK2次,对齐的条件为

为了使式( 3) 成立,需要验证其可能性和得到满足的条件。假设q是N × 1 向量,存在于R( A1) ∩ R( A2) ,R( ·) 是N × M型矩阵A1,A2的列空间,由矩阵论,容易得出如果

式( 4) 可以等效为

从式( 5) 可以看出,P为齐次方程组的解,系数矩阵为Q,则可知当满足

存在q满足式( 4) ,那么式( 3) 可以进一步限制为

MAC阶段,中继节点接收的信号可以表示为

式中: n[R]是N ×1 向量,每一项是独立同分布的高斯白噪声向量,上式亦可以写为

上文的推导过程中,没有考虑用户的数目K和天线数目M,N的关系,在实际的通信过程中,为了使系统的实现成为可能,必须满足一定的条件。每个用户须同时向另外的K - 1 个用户发送独立信息,则M ≥ K - 1 ,根据式( 6) ,当两个用户的信号对齐时,即存在q时,N < 2M 。K个用户的K( K - 1) 独立信息被中继对齐到了K( K - 1) /2个子空间,则中继成功处理信息需要满足的条件为N ≥K( K - 1) /2 。则任意两用户相互发送的信息对齐到一个子空间的条件为

U[R]信道矩阵H[R,i]的每一项是连续的高斯信道分布产生的,矩阵的列向量张成空间。任意两个空间相交的基底存在于另外两个相交向量空间的概率为零。那么U[R]的每一列都是线性无关的,则矩阵U[R]是满秩的,是可逆的。

3.2中继节点的信息进行网络编码和预编码

对中继接收的信息进行网络编码

中继节点对所接收的信号进行预编码处理,过程如下

式中: Q是N × N的矩阵,由于U[R]是满秩的,令

上式的逆矩阵为广义逆矩阵。为了计算方便,可以设N = K( K - 1) /2 。

3. 3 BC阶段,用户接收到信息并且译码

在BC阶段,中继节点广播后,每个用户都能接受到信息ys[R],用户i接收到的信息可以表示为

式中: H[i,R]是M × N型的中继到用户i的信道矩阵,因本文考虑TDD的通信方式,则可以得到H[i,R]是矩阵H[R,i]的转置矩阵,ni是M × 1 的高斯噪声向量。

用户接收到信息后,需要对信息译码,结合前面的预编码矩阵,可以简单方便地设计译码矩阵,正确地译码。考虑矩阵的如下性质,假设可逆矩阵B = [b1,b2,…,bN],满足下列性质

译码矩阵的设计充分考虑了信号对齐时的波束成形向量,减少了算法的复杂度和计算量。用户i接收到中继发出的信息后,可以成功获得K -1 个独立的信息,因此需要译码K - 1 次,假设译码后,用户i接收到j的信息为y[j,i],其对应的译码矩阵为用户j发送到用户i的波束成形矩阵的共轭转置矩阵,不需要重新计算矩阵,算法简单。则接收到的信号为

用户接收到信息后,可以成功译码得到y[j,i],然后做简单的模二和操作,可以获得用户j发送到用户i的符号信息。

4 仿真与分析

通过蒙特卡洛对本文所提算法进行仿真,假设信道矩阵服从独立的复高斯分布,并且MAC和BC阶段总发射功率和噪声方差相等,K = 3,M = 2,N = 3。仿真时,将TDMA,MU-MIMO与本方案的信道容量结果作对比,如图2 所示。

由图可知,本文所提出的方案可以明显提高系统的信道容量。

分析系统的自由度。当用TDMA时,K个用户相互传递信息需要2K个不同的时隙,则自由度为1 /2 ,当用MU-MIMO方案时,通过干扰对齐,可以达到K / 2 的自由度。本文提出的方案,可以将K( K - 1) 相互独立的信息在2 个时隙内完成传送,自由度可达到K( K - 1) /2 。如表1 所示

5 结论

C语言结构体内存对齐问题浅析 篇3

关键词:内存对齐,开放性,内存大小,结构体

0引言

在C语言中, 求解结构体所占内存大小时, 很多人都会想到直接将结构体中声明的变量通过sizeof运算符分别求取各成员变量所占内存大小, 然后全部累加作为该结构体所占内存的大小。然而, 这种机械的累加往往是不对的, 因为这里涉及到内存字节对齐的问题。从理论上分析, 对于任何变量都可以放在大于其所需空间的任意一段连续内存中, 但是事实上并非如此, 实验表明特定类型的变量只能在特定的内存地址上访问, 这就需要各个变量在空间上按一定的规则存储, 而不是机械式地顺序存储[1]。对于C语言结构体的存储亦是如此。

从移植性方面考虑, 不同的硬件平台读写的规则不同, 也就是说并不是所有的硬件平台都能访问任意内存空间上的任意数据, 某些硬件平台只能在某些地址处读取某些特定类型的数据, 否则会抛出硬件异常。从读写性能方面考虑, 为了访问未对齐的内存, 处理器需要进行两次内存访问;而对齐的内存只要一次, 比如, 对于每次都是从偶地址处读取数据的编译平台来讲, 声明一个int型的变量, 若从偶地址单元处存放, 只需一个读取周期即可完成;若是从奇地址单元处存放, 反而需要2个读取周期读取该变量[2,3]。可见, C结构体的存储也应该是尽可能地遵循在自然边界上的内存对齐。

1常见的结构体形式

一般情况下, 结构体内会定义多种类型的变量, 如基本数据类型int、char、float、double等, 还有可能是一些复杂数据类型, 如结构体、共用体、数组、对象等。结合平时学习的实际情况, 下面定义四种常用形式的结构体, 作为具体的例子进行分析[4]。

例子一是一个含有三个基本变量的简单结构体;与例子一相比例子二中的结构体声明变量顺序与Struct1有所不同;例子三是一个包含了数组类型的结构体;例子四是一个嵌套了结构体的结构体。

2对应形式内存大小分析

这里我们以最常见的Windows (32位) /Visual C++6.0平台及编译环境为例。为了下面更好的分析, 首先给出几个名词定义及对应的变量表示:1对齐模数m, 是指基本数据类型的自身对齐值, 一般与对应数据类型占内存大小相等, 也同时应满足类型数据的存放“起始地址%m=0”。2指定对齐值n, 一般是指通过#pragma pack (n) 指定, 然后再通过与其匹配的#pragma pack () 取消的指定对齐值n, 在这里n的取值可以为1、2、4、8。3默认对齐值d, 编译器默认的对齐值, Windows (32) /VC6.0为8, 可以在VC IDE中的[Project]|[Settings], c/c++选项卡Category的Code Generation选项的Struct Member Alignment中查看, 如图1.1所示。4自身对齐值s, 是结构体中成员类型中对齐模数最大的那个值。5有效对齐值a, 就是最终确定的对齐值, 一般是指自身对齐值与指定对齐值中较小的那个值。这里需要指出的是上面给出的所有变量值的单位默认情况下均为字节。

表1是各种类型变量在该平台及编译环境下所占内存空间大小及自身对齐模数:

平台/环境tlongtle doubleows (32位) /VC6.048数48对于例子一, 结构体Struct1占内存的大小为12字节, 而并非是sizeof (char) +sizeof (int) +sizeof (short) =1+4+2=7, 其他几种例子使用这种计算思想也会存在出入。在该结构体中最大基本类型是int型, 在此坏境下其自身对齐模数m为4, 所以有效对齐值a为4, 即最后的存储结果会是4的倍数。因为char型A占一个字节, 其所在的存储单元剩余空间为3, 已小于int型B所需要的内存大小, 存储不下B, 故需要开辟第二个存储单元;第二个存储单元刚好放下B;最后再开辟第三个存储单元放short型C, 该存储单元空闲两个字节。整个结构体所占内存的大小为3*4字节=12字节, 若结构体的初始地址为0x00000000 (此假设在下文也成立) , 则该结构体在内存中对应的存放形式可如图2所示, 可以看出该结构体存储时, 最终以4字节对齐, 各个变量也满足具体的存放要求, 如对于int型变量B的起始地址为0x00000020, 满足0x00000020%4=0[5,6];当然, 这里如果我们在此结构提前加上一句#pragma pack (2) , 指定对齐值n为2, 则有效对齐值a为2, 即取Min (Max (mi) , n) , 其中mi表示各变量的对齐模数。此时Struct1的存放形式如图3所示, 其总共占内存大小为8个字节。

在该结构体中最大基本类型仍是int型, 有效对齐值a为4, 当char型A放在第一个存储单元后, 该单元还剩余3个字节内存空间, 足够放下紧接着定义的占2个字节内存大小的short型变量B, 之后, 剩余1个字节内存空间, 不能满足剩下的int型变量C的存放, 所以开辟了第二个存储单元, 此时刚好放完。所以例子二占用的内存字节为2*4=8, 具体如图1.4所示。同样若利用#pragma pack (2) , 指定对齐值n为2, 此时Struct2的存放形式如图1.5所示, 其总共占内存大小为8个字节。

对于例子三, 在该结构体中最大基本类型是char型, 有效对齐值a为1, 此时结构体大小计算过程如下, sizeof (Struct3) =sizeof (char) +sizeof (char) +4*sizeof (char) =1+1+4=6, 其大小为结构体中个字段大小之和, 这也是最节省空间的一种写法, 其对应存放形式如图6所示[7]。若提前加上一句#pragma pack (4) 来设定变量以4字节对齐方式, 对齐模数m小于指定对齐s, 故有效对齐值a与n相同为4。此时, Struct3的存放形式如图7所示, 其总共占内存大小为8个字节。

对于例子四, 这是一个结构体的嵌套, 在该结构体中最大基本类型是double型, 有效对齐值a应为8个字节, 开辟的第一个存储单元存放了Struct3后剩余两个字节大小的内存空间, 此时放不下double类型的B, 因而开辟了第二个存储单元存放。之后, 再开辟第三个存储单元可以放下分别占1个字节和2个字节空间大小的char A和char B[2];至此, sizeof (Struct4) ) =8+8+8=24字节, 具体如图1.8所示。若加上一句#pragma pack (4) 来设定变量以4字节为指定对齐n, 自身对齐s小于指定对齐n, 所以Struct4的存放形式如图1.9所示, 其总共占内存大小为20个字节。

3方法总结

从上面分析可以发现, 在Windows (32) /VC6.0下各种类型的变量的自身对齐模数就是该类型变量所占字节数的大小。经过对上面给出的几个例子计算可知[8,9], 1每个变量相对于结构体的首地址的偏移量必须是对齐模数m的整数倍;2整个结构体变量所占空间的大小是有效对齐参数a的整数倍, 很多参考文献中将这一结论在“圆整”中体现出来;3当结构体为空时, 整个结构体只占1个字节大小;4只含一种类型变量的结构体大小为变量的个数*s (有数组则看做数组长度个同类型变量) ;5当存在结构体嵌套时, 内层结构体遵循同样规则, 外层结构体只考虑内层结构体具体成员变量。

经过上面的例子分析发现, 要求的结构体所占内存的实际大小, 必先应求得有效对齐模数a, 下面给出在求取结构体有效对齐模的基础上, 进行结构体占用内存大小求取的一般算法:

(1) 结构体是否为空, 若为空则算法结束, 结果为1[10];

(2) 求取各声明变量的对齐模数mi;

(3) 判断有无指定对齐n, 若无, 则有效对齐a为已经声明变量中最大对齐模数的值Max (m1, m2, …, mi) , 转至第5步;

(4) 当有指定对齐n时, 有效对齐a与n的大小相同;

(5) 结构体实际大小为a*N, 其中N为声明变量的个数。

该计算思想, 对应流程图如10所示。

4结语

文章首先介绍了内存对齐的原因及必要性, 又列出了四种常见形式的结构体, 接着逐一分析了各自在Windows (32位) /Visual C++6.0平台及编译环境下所占内存大小的计算过程。在上面给出的四种结构体形式中, 第一种空间浪费严重, sizeof计算大小与预期不一致, 但是保持了每个字段的数据类型, 初学者极易出现此类问题;第二种形式, 介于第一种和第三种写法之间, 其空间上比较紧凑, 同时又保持了结构体中字段的数据类型;第三种形式, 最节省空间的写法, 也是使用sizeof求大小与预期一样的写法, 但是全部使用字节类型, 丢失了字段本生的数据类型, 不方便使用;第四种形式, 是结构体的嵌套, 使用时可能会同时存在前三种形式的优缺点。各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。在结构中出现的各成员变量, 根据声明的顺序依次申请存储空间, 同时按照上面的结论适当调整位置, 空缺的字节自动填充。为了保证结构体的大小为有效对齐值 (即该结构中占用最大空间的类型所占用的字节数) 的倍数, 有时候在为最后一个成员变量申请空间时还要根据实际情况自动填充空缺字节。总之, 内存对齐问题很灵活, C语言初学者很容易受其困扰, 本文希望通过以具例子分析能够帮助初学者对C语言结构体的占用内存大小的计算有更好的理解。

参考文献

[1]Hutchinson C L, Jin I, Stover L.Memory cell with alignment structure:US, US 8097870 B2[P].2012

[2]张顺吉.C语言数据的内存存储特性的教学研究[J].计算机时代, 2011 (11) :54-56

[3]郭政慧, 王岩.内存对齐对网络通信程序的影响[J].实验室研究与探索, 2010, 29 (5)

[4]胡超.C语言从入门到精通[M].机械工业出版社, 2011:34-78

[5]Lefsky B, Rodman P K, Corbin S S.Memory alignment system and method, US4750154[P].1988

[6]Knobe B K, Lukas J D, Dally W J.Dynamic memory alignment on distributed memory systems[C]//In Proc.Workshop on Compilers for Parallel Computers.1992

[7]郝长胜, 杜鹏东.C语言程序设计[M].高等教育出版社, 2012:132-134

[9]杨军, 王华驰, 闫京生等.Xml消息与c语言程序结构体转换的方法及装置:CN, CN 101739245 A[P].2010

[10]Vetter P, Ohmura Y, Uchida T.Study of Memory Alignment of Nematic Liquid Crystals on Polyvinyl Alcohol Coatings[J].Japanese Journal of Applied Physics, 1993, 32 (9A) :L1239-L1241

一种线材对齐卸卷的方法 篇4

关键词:品种钢,线材,卸卷,对齐

0 引言

针对目前线材市场的竞争日趋激烈,客户对线材产品的质量要求越来越高,不仅重视产品的内在质量,同时产品的表面质量也显得尤为重要。因此,为了满足高线生产质量的需求,结合本高线厂线材产品卸卷的实际情况对现有的卸卷控制程序进行了修改。使产品在卸卷过程中免于擦伤。

1 造成擦伤的原因

在轧钢高速线材厂轧制成线卷,经打包机打包、称重后,需要卸卷小车把线卷运送到卸卷抬架上,再经过行车掉离。

典型的卸卷方法是经过卸卷小车把线卷依次运送到卸卷抬架上卸卷台架上有A、B两通道,每个通道可分别放两卷线卷,当其中一个通道放满时自动换为另一通道,卸卷小车在一个通道里卸卷时,只是通过按在卸卷台架上的光电管信号来放置盘卷,因此,在同一通道的两个盘卷间距很大,行车在进行吊装入库或发货时,还需要进行二次吊装,把两个盘卷对齐贴紧,便于码堆,行车在二次对齐过程中盘卷与地面摩擦、盘卷与行车吊钩摩擦撞击,不仅造成盘卷表面擦伤严重,影响了线材的表面质量,而且很容易发生掉卷砸坏卸卷设备的设备安全事故,造成设备停机。(如图1所示)

通过观察,发现造成线材卸卷擦伤的原因主要有两个方面:

1)卸卷小车在对线卷进行卸卷时,两个盘卷之间的间隙很大,行车在吊离卸卷台架时往往要在台架上或地面上滑行使两个盘卷能头尾贴紧,方便盘卷在货场的摆放及发货;

2)卸卷小车在对较大规格的线卷进行卸卷时,为了提高卸卷效率和货场的发货,需要行车一次吊三卷,这样,行车在并卷过程中在地面上反复摩擦,极易造成对线卷表面的擦伤。

通过上述对线卷在卸卷时擦伤原因的分析,发现究其原因是由于线卷在卸卷台架时,线卷与线卷在台架上摆放有间隙造成,如何消除此间隙将是方案优化的目的。

2 程序优化方案

2.1 新增的电气检测元件

1)在卸卷小车和卸卷台架之间,在同一垂直面上,安装两个光电管,第一光电管(PH1)在高处,第二光电管(PH2)在低处,第一光电管(PH1)在卸卷小车最高面和位于卸卷小车上的线卷的最高面之间,第二光电管(PH2)在卸卷小车最高面之下(如图1所示);

2)在卸卷台架上方一前一后安装两个光电管,第三光电管在前,第四光电管在后(如图2所示);

3)在卸卷小车传动轴上加装一增量型编码器(如图2所示)。

2.2 优化流程

1)当选择并卷程序投入时,卸卷小车在卸料位升起,把第一盘卷托起,卸卷小车托着第一盘卷往卸料台架行走,根据当第一光电管有信号时卸卷小车编码器的码值(L10)与当第一光电管无信号时小车编码器的码值(L11)之差,得出第一盘卷的长度(LPJ1),即LPJ1=L11-L10,根据当第二光电管一有信号时卸卷小车行走的距离(L20)与第一光电管一有信号时卸卷小车行走的距离(L10)之差,得出第一盘卷端面与卸卷小车边缘的距离(LPC1),即LPC1=L20-L10,卸卷小车往卸卷台架行走,行走码值(LXC1)到大于某一固定码值长度时,卸卷小车停止前进,下降把第一盘卷卸到卸料台架上,并测出卸卷小车行走的距离,卸完卷后返回至卸卷初始位,并对编码器码值清零;(如图2所示)

2)卸第二卷时,卸卷小车停止位置为步骤(4)中卸卷小车行走的距离(LXC1)减去第一盘卷的长度(LPJ1),再减去第一盘卷端面与卸卷小车边缘的距离(LPC1),即LXC2=LXC1-LPJ1-LPC1;(如图2所示)

3)卸第三卷时,同理可得卸卷小车停止位置卸卷小车行走的距离(LXC2)减去第二盘卷的长度(LPJ2),再减去第二盘卷端面与卸卷小车边缘的距离(LPC2),即LXC3=LXC2-LPJ2-LPC2;(如图2所示)

4)卸完三卷后,卸料台架移动,换另一组卸卷通道,再重复步骤1~步骤3。(如图3所示)。

3 结论

经过以上几方面优化和改进,线材在卸卷时表面擦伤现象得以很好的控制,同时卸卷台架的线卷存放数由原来的四卷提高为六卷,卸卷效率大大提高,较好的适应了线材的高生产节奏。

参考文献

[1]廖常初主编.机械工业出版社.S7-300/400PLC应用技术.

对齐规范 篇5

在逆向过程中, 往往有许多大型件由于尺寸过大和部分区域受被测体几何形状干涉阻碍, 物体很难一次性进行点云数据采集, 其次还存在由于模型表面油漆与标签的反光度相似的问题, 导致无法用标签法进行定位对齐, 目前较有效的方法是特征对齐技术, 所以需要将多次采样获得的点云数据进行多视点云对齐。

多视点云对齐是零件外形轮廓测量中最基本的数据处理过程, 直接影响到后期的曲面拟合精度。

主要有两种对齐方式, 一是通过精密测量仪器实现测量数据的直接对齐, 二是事后的数据对齐处理[1]。第一种方法由于测量系统价格昂贵, 基本上不能满足特殊视角数据的采集, 用的较少。第二种方法即直接对齐, 应用的更广泛。

直接对齐问题的研究是一个高度的非线性问题, 在数学上可以描述为:设令参考点Q={qi|qi∈R3, i=1, 2, …, M}, 目标点集P={pi|pi∈R3, i=1, 2, …, M}, 找出两个点集的空间变换, 将两个点中的相同点进行匹配, 可以简化为求最小二乘目标函数问题[2]:

Hom等于1987年提出用四元素法来求解式 (1) 。Arun等于1987年提出用SVD法来求解点集的对齐问题。Besl和Mckay于1992年提出经典的最近迭代算法 (ICP) 来解决数据的映射对齐问题。前三种方法在针对数据量大的时候, 迭代时间长, 计算精度不高[3]针对这一问题2003年SoonYong和Murali提出了基于ICP和奇异值分解 (SVD相结合的算法, 这种对齐方法精度较高, 迭代速度快, 最大的优点是对于数量庞大的点云模型仍能进行快速精确对齐[4]。本文将应用此算法对驾驶室此类大型件对齐误差进行分析, 验证仅靠特征对齐能否达到逆向精度要求。

1 改进的ICP对齐算法

1.1 基本思路及算法

1.1.1基本思路:

通过最小二乘法迭代计算最优的坐标变换为式 (1) , 将非线性问题转化为下面误差函数最小问题[5]:

这里iclosest (Pi) 表示在{qi}中以Euclidean距离度量最靠近pi的点, 用C={ci|ci∈R3, i=1, 2, …, M表示。

1.1.2 算法步骤概括如下:

1) 迭代初始化, 设Q0=q, Q0=[l, 0, …, M]T

2) 计算最近点[6]

3) 坐标变换关系为:

其中δi为数据采集误差。

4) 求出R和T转换矩阵。下面将利用SVD奇异值分解法求旋转矩阵R’使目标函数F最小, 然后求出平移变换矩阵T’。具体步骤如下:

Step1:计算3×3矩阵

Step2:对称矩阵H作SVD分解得:

其中U和V为正交矩阵, 计算:

Step3:计算det (X) :

det (X) =1, 则R’=X;

det (X) =-1, 则算法失效 (基本不会出现) ;

Step4:根据旋转矩阵R和两个点集的质心p与c, 求出平移矢量T’;

5) 经过多次迭代找到最优的变换矩阵, 当:

则算法结束。

1.2 实例验证

本文以某厂驾驶室为例进行特征对齐的误差分析, 由于驾驶室点云数量巨大, 为了验证此类大型件的对齐误差是否能够达到企业要求, 本文仅选取驾驶室右边二片不同点云分别在Matlab2010b和Geomagic Studio中分别进行对齐误差分析。同时还探究了基准点的数量是否对点云对齐误差造成影响, 所以分别选取三点法和六点法利用Matlab编程[7]Geomagic Studio软件进行误差对比分析。二片点云整体图以及三点法和六点法基准点位分布图如图1和图2所示。

由Matlab编程可得到各个基准点的单位距离差之和△Ci, 三点法和六点法基准点坐标和最近距离点 (黑体) 如表1和表2所示。

根据三点法和六点法坐标计算出单位距离差之和, 寻找最近距离点, 从表1和表2可以看出三点法的最近距离点位为△CC点, 六点法的最近距离点为△CF点。并且C和F都满足许用误差0.005mm, 满足迭代要求。继续通过SVD分解法求出转换矩阵R和T, 同时给出参考点和目标点的对齐误差, 同软件对齐的平均误差进行对比[8]结果如表3和表4所示。

通过比较三点和六点的ICP改进算法在Matlab和Geomagic的软件对齐结果, 我们得出如下结论:

1) 通过表3和表4可以看出三点法和六点法最大误差才为0.23mm, 同时Matlab相对Geomagic软件的平均误差都没有超出15%, 验证了Geomagic Studio软件在没有借助任何标志点的前提下, 完全利用驾驶室曲面特征来进行对齐的方法能够将误差控制在生产误差范围以内。

2) 验证了六点法比三点法精度高, 特征点选择越多引入误差越小。三点法对齐更容易引入计算误差, 六点法的对齐能通过空间中的多个点求得转换矩阵, 可以提高拼接精度。

2 基于改进ICP算法的驾驶室逆向

本文以驾驶室逆向为例, 对改进的ICP算法对齐误差进行了验证, 具体技术路线如图3所示。

2.1 数据采集

本文利用海克斯康公司的Romer关节臂三坐标激光扫描仪, 结合专业数据采集软件Scan Works5.4对驾驶室进行分块扫描, 然后应用Geomagic Studio软件进行产品逆向设计[9]。采集所需设备如图4所示。

2.2 点云预处理

预处理阶段主要包含的功能有降噪、对齐、采样等。首先通过自动降噪和手动删除命令, 去除噪声点。接下来, 利用软件提供的N点手动注册, 选择不少于3个的特征点进行粗对齐, 然后执行全局注册, 整个驾驶室点云数据融合之后的标准偏差为1.08mm。最后进行数据精简, 经统一采样后, 驾驶室点云数量由采样前的89072614下降至采样后的22190302, 精简了大约1/4的点云, 为后续划分三角形阶段和曲面拟合大大提高了计算效率。驾驶室原始点云和对齐后的点云如图5和图6所示。

2.3 多边形阶段

对点云进行封装, 即连接点对象来创建三角形面片, 就可获得多边形网格模型, 为了保证模型左右对称, 提高工作效率, 通过创立对称平面裁剪了一半的三角网格。

2.4 拟合成NURBS曲面

NURBS曲面质量的好坏, 直接由构建的栅格网格均匀度决定, 网格越均匀构建的曲面越光顺。Geomagic Studio软件拥有自动曲面化功能, 软件将根据在多边形阶段提取设定的特征和编辑的曲面片自动拟合成NURBS曲面。图7为拟合一半的NURBS曲面。

2.5 曲面输出以及CATIA模型重构

将所生成的NURBS曲面保存为IGES文件, 导入到CATIA中作进一步处理:首先作实体化处理, 即把封闭曲面转变为实体, 并利用镜像操作得到整个车身壳体, 同时利用CATIA进行后期曲面优化, 具体步骤不在此详细论述。在CATIA中重构后的驾驶室三维模型如图8所示。

2.6 误差分析

将CATIA生成的驾驶室模型保存为IGES格式, 导入Geomagic Qualify中利用3D比较功能, 同驾驶室的原始点云数据进行误差分析[10]。驾驶室背面3D比较误差为1.153mm, 能够满足企业需要。结果如图9所示。

3 结束语

本文研究与学习了基于ICP与奇异值分解法相结合的对齐算法, 利用三点对齐与六点对齐同软件的多视点云对齐功能进行了误差分析, 验证了驾驶室此类大型件仅依靠特征对齐能够达到精度要求。后期继续应用Geomagic Studio进行驾驶室曲面拟合, 生成NURBS曲面, 由Geomagic Qualify进行误差检测, 成功的完成了驾驶的反求工作, 对其它相似大型件模型重构来说具有很大的实用价值。

参考文献

[1]金涛, 童水光, 等.逆向工程技术[M].北京:机械工业出版社, 2003:120-122.

[2]吴敏, 周来水, 王占东, 安鲁陵.测量点云数据的多视拼合技术研究[J].南京航空航天大学学报, 2003, 35 (5) :552-557.

[3]Besl P J, Mckay H D.A method for registration of 3-D shapes[J].Pattern Analysis and Machine Intelligence, IEEE Transactions on.1922, 14 (2) :239-256.

[4]董锦菊.逆向工程中数据测量和点云预处理研究[D].西安理工大学, 2007 (5) :34.

[5]刘江, 巩晓晴, 李积云.逆向工程中多视点云对齐方法研究[J].工程图学学报, 2009, 30 (6) :171.

[6]孙世为, 王耕耘, 李志刚.逆向工程中多视点云的拼合方法[J].计算机辅助工程, 2002, 11 (1) :8-12.

[7]连德忠, 许陆文, 张垣功.四元数的MATLAB计算程序[J].龙岩学院学报, 2005, 23 (6) :18-21.

[8]冯啸龙, 李尚平, 李冰.基于逆向工程的零件坐标系建立分析及应用[J].造业自动化, 2013, 35 (5) :86-88.

[9]李同方, 赵世平, 谢驰.基于Geomagic软件的鼠标包装壳逆向设计[J].工具技术.2005, 39 (5) :65-67.

对齐规范 篇6

关键词:Android系统,文本,控件

在Android应用开发中, 往往都会遇到对文本进行显示的需求, 这时, 通常会选 用Text View控件 , 但Text View控件对中文 排版的支 持并不十 分友好 , 它在显示 文本时 , 特别是有中西文混合的文本时, 文本框两端就会显得参 差不齐 ,影响了整 体的排版 效果。而 两端对齐 是中文显 示的基本 要求, 此时, 为了满足客户的需求往往会弃用Text View控件 ,寻求其他 迂回的方 法来解决 两端对不 齐的问题 。其实只 要弄清Text View控件实现 原理 , 完全可以 通过继承Text View控件并覆盖其文本输出方法, 自己实现一个具备条件两端对齐功能的文本显示控件New Text View。

1 Text View 控件的实现原理

Android的每一个控件虽然实现起来相当复杂 , 但对于可视控件而言, 都会涉及两个要素, 一个是与用户的交互的界面 (UI), 对于Text View控件来说, 用户界面是通过在画布上绘制界面; 另一个是实现人机交互的输入事件, 对于Text View控件来说, 用户输入主要包括键盘的输入和触 摸屏的输 入。因此, 分析Text View控件的实现原理, 关键就是要搞清控件界面的绘制框架及其获得输入的过程。由于两端对齐是文本的显示方面要求, 所以在此主要关注Text View控件的界面绘制步骤。Android控件的界面绘制 操作通常 分为测量 、布局和绘制。

1.1 测量

对于一个可视的控件必须要确定自己所占据的空间的大小 , 所以Text View要重写父 类View的成员函 数on Measure。该函数有两个参数, 分别是用来描述宽度测量规范的widthMeasure Spec和高度测量规范height Measure Spec。

1.2 布局

通过测量就确定了控件的大小, 但是控件具体的位置还没有确定。控件的位置 是通过布 局这步操 作来完成 的。android可视控件是按照树形结构组织来组织的 , 子控件的位置由父控件来设置, 也就是说, 只有容器类控件才需要执行布局操作, 它是通过重写父类View的成员函数on Layout来实现的。由于Text View控件不是容器类控件, 因此, 不需要重写父类View的成员函数on Layout。

1.3 绘制

经过测量和布局操作后, 控件TextView件的大小和位置就确定下来了, 接下来就可以对它的界面进行绘制了。控件要能够绘制自己的界面, 必须重写父类View的成员函数onDraw, 该函数只有一个参数canvas。canvas描述的是 一块画布, 控件的界面就是绘制在这块画布上面的。画布提供了多种多样 的接口来 绘制界面 , 例如画线 ( draw Line) 、画圆( draw Circle ) 、输出文 字 ( draw Text) 和贴图 ( draw Bitmap )等等。有了这些界面接口, 就可以随心所欲地绘制控件的界面了。

通过分析控件界面绘制过程, 不难发现, Text View对文本的显示是通过在画布 (canvas) 上输出文本来实现的。因此要在Text View的基础上实现文本的两端对齐, 关键是要重新安排每一 行的字符 数 , 控制字间 距 , 在Text View的画布(canvas) 上精确地输出每一个字符 , 从而确保每一行的第一个字符和最后一个字符在输出的水平坐标上是一致的, 也就确保了两端是对齐的。

2 控件设计

2.1 两端对齐显示的基本要求

要实现文本的两端对齐表面上是每一行的最后一个字符在水平坐标上保持一致, 其实还要考虑文本在显示格式上的要求, 特别是每一行的第一个字符 (行首) 和最后一个字符(行尾 ) 是否符合格式规范。需要考虑的格式规范要求有 :

(1) 连续的英文字母字符或数字字符 , 不在换行处强行分开。

(2) 行首字符不能是以 下全角和 半角的标 点符号字 符 : 句号 (。 .)、 问号 (? ?)、 叹号 (!!)、 逗号 (, ,)、 冒号 ( : :) 和分号 ( ; ;) 和引号 ( ” ” ) 、 括号 ( ))]} ) 、 书名号 ( 》 >) 的后一半等 。

(3) 行尾字符不能是以下 全角和半 角的标点 符号字符 : 引号 (“”)、 括号 ((([{)、 书名号 (《<) 的前一半。

2.2 New Text View 的设计

New Text View继承于android的Text View, 其继承关 系如图1所示, NewTextView的类图如图2所示。

(1) 主要属性

New Text View主要的属性包括文本框外观类的属性、绘制类的属性、 文本内容类属性、字体类属性等。外观类的属性包括: 文本框高度 (m_Height)、文本框宽度 (m_Width)、行间距 ( m_Line Space) 、左边距 ( left_Margin) 、右边距(right_Margin) 、上边距 (top_Margin) 、下边距 (bottom_Margin) 等 ; 绘制类的 属性包括 画笔 ( m_Paint) 、画布颜 色(Canvas Color) 等 , 其中画笔又有颜色、粗细等属性 。文本内容类属 性包括 : 文本 (Text)、所有行 属性 (m_Strings) 等 ;字体类属 性包括 : 字体名称 ( m_Font Name) 、字体颜 色( m_Font Color) 、字体大 小 ( m_Font Size) 、字体高 度(m_Font Height) 等。

其中, 描述字符单元的内部类TText Attr包含两个成员 ,分别是最小输出的字符单元 (unittext) 和字符单元的输出宽度 (textwidth)。描述行属性的内部类Tmy Line Attr包含两个成员, 分别是这一行所包含的字符单元列表 (Line Arr Text)、这一行的字间距 (extrawidth)。

(2) 主要方法

New Text View主要的方 法有3个 , ( 1) 中英文分 字Text Split() 方法 ; (2) 确定每一行字符的Ini Lines() 方法 ;

(3) 覆盖父类的On Draw() 方法。

Text Split() 方法主要是将中英文混合的文本内容按字符顺序把中文字符和英文 (数字) 字符区分开来, 每一个中文字符看作一个最小的输出单元, 连续的英文或数字看作一个最小的输出单元。

Ini Lines() 方法主要是确定第一行所包含的字符 , 保证行首字符和行尾字符符合格式规范的要求, 其判断逻辑如图3所示。

On Draw() 方法主要是根据每一行所包含的字符单位数据 , 确定这一行的字间距, 保证所有行的首字符的水平坐标值保持一致, 所有行的尾字符的水平坐标值保持一致, 其操作流程如图4所示。

3 控件的实现

3.1 主要代码

New Text View能够实现两端对齐 , 其核心是先要进行中英文分字、然后分配每一行的字符, 最后重写父类的成员函数on Draw()。

中英文混合分字Text Split() 的实现如下。

分配字符的方法Ini Lines() 的实现如下:

成员函数on Draw() 的实现代码如下。

3.2 应用实例

New Text View控件的使用与Text View控件的使用方法是一样的, 这里就不作详细介绍。对于同一段文本, 图5是Android自带的Text View的显示效果 , 图6是New Text View的显示效果。

4 结语

一种新的核磁共振谱峰对齐算法 篇7

生物样品NMR波谱的信号峰具有一定的稀疏性,因此,谱峰对齐算法通常先将参考谱和待对齐谱分割成若干个小段,再分别对各信号段进行谱峰对齐,最后拼接成一张完整谱。这种做法可以大幅度减小谱峰对齐算法时间复杂性。常用的谱峰对齐方法包括:相关优化解缠法(correlation optimized warping,COW)[9,10]、多尺度谱峰对齐法(multiscale peak alignment,MSPA)[11]等。COW利用动态规划方法寻找全局最优的谱图分割,并利用相关系数最大法计算各段的漂移量。但由于动态规划的执行、相关系数的计算都相当费时,因此COW算法的计算复杂度较大。近年来提出了一些改进方法来提高对齐的速度和增强对齐的效果,如:引入参数模型加快动态规划的执行效率[12,13]、利用快速傅里叶变换法(FFT-cross correlation)[14,15]寻找最大相关系数的漂移量等。MSPA算法利用谱峰检测与合并,将谱图划分为多重峰(谱峰团簇)的组合,再利用信息熵以谱峰团簇为单元对谱图进行逐步细分,通过叠代实现多尺度谱峰对齐。MSPA算法的计算复杂度低,但对齐效果取决于谱峰团簇的划分,算法的自适应不够。

提出一种基于高斯平滑的对齐算法:采用不同窗宽的高斯函数与待对齐谱进行卷积运算,实现待对齐谱的多尺度平滑;对平滑后的谱图进行分段并计算相应的漂移量;逐步减小高斯平滑函数的窗口大小,实现谱图由轮廓到细节的逐步对齐。与COW和MSPA两种常用对齐算法相比,新算法的时间复杂度适中,且对齐后的谱数据的平均相关系数更高,有利于后续的多变量建模。

1 理论方法

高斯平滑谱峰对齐算法利用不同尺度的高斯窗函数实现谱峰不同尺度的分段,进而实现由粗到精逐步对齐的过程。设S(x)为待对齐谱,R(x)为参考谱,具体步骤如下:

步骤1:初始化。设置高斯窗函数σ的初始值、最小值(最小尺度)和步长Δσ。用文献[11]的方法对S(x)进行谱峰识别,并标记谱峰位置。

步骤2:高斯平滑。用如下高斯函数对谱图进行平滑处理。

其中,⊗为卷积符号,σ为高斯窗口大小。

步骤3:产生分段。对S'(x)进行谱峰识别,将S'(x)每个谱峰当做一个分段。S'(x)的分段边界即为S(x)的分段边界,分段边界应避免将S(x)中谱峰分割在两部分,从而得到S(x)的分段Si(x),i=1,2,...。

步骤4:计算漂移量。用FFT方法计算各段Si(x)相对于参考谱R(x)对应分段的漂移量ΔPi。按ΔPi尝试移动Si(x),若与相邻分段Si-1(x)或Si+1(x)发生谱峰重叠,则让ΔPi=ΔPi-1(ΔPi0),直到不发生重叠为止,记录此时的ΔPi。

步骤5:终止条件。用各分段的位移量ΔPi校正相应的谱峰段Si(x),得到尺度σ下的对齐谱S(x)。若高斯窗口σ达到设定的最小尺度,则算法结束,否则让σ⇐σ-Δσ,转到步骤2。

上述算法中,大尺度主要对高强度谱峰进行对齐,小尺度主要对低强度谱峰进行对齐。在大尺度下不允许谱峰的移动引起谱峰重叠,保证调整谱峰位置时不会对谱峰形状产生破坏,也避免了因为个别谱峰调整量过大而改变该区域与参考谱对应区域的相关性。

下面用两个1H-NMR谱片段(δ2.42~δ2.62)说明新算法。如图1给出了三个不同尺度下的对齐结果,即σ=48,σ=12和σ=3。图中各图的红线为待对齐谱、蓝线为参考谱、绿色虚线为不同尺度的平滑结果、黑色虚线为相应尺度下的分段边界。图1a可见,待对齐谱和参考谱之间存在谱峰漂移,且不同谱峰的漂移量不同。对于GPA算法,各种线宽的谱峰均可以在适当的尺度σ下得到校正,大尺度下校正信号强度大的谱峰(线宽大),小尺度下校正信号强度弱的谱峰(线宽小)。

2 实验结果与讨论

2.1 实验数据

为了验证GPA算法的有效性,采用如下两个真实的代谢组学数据集进行谱峰对齐。

数据集1:来自于文献[16]。包含红、白和桃红三种葡萄酒40个样品的1H-NMR谱片段(化学位移δ0.5~δ6.0),每张谱图包含8 712个数据点,如图2a所示。

数据集2:来自于文献[17]。包含59张Wilson病模型大鼠尿样的1H-NMR波谱片段(化学位移δ6.0~δ9.5),每张谱图包含2 865个数据点,如图2b所示。用Varian NMR System 500 MHz谱仪上采集一维1H NMR谱。实验采用NOEPR-CPMG序列,谱宽为5kHz,累加256次。

数据集1样品由于在NMR信号采集前没有加缓冲液,样品间的pH值差异较大,因此谱峰漂移相对较大,谱图中高强度谱峰数目少且分散。数据集2样品的谱峰漂移相对较小,但高强度谱峰数目多且集中,谱峰对齐更困难。

2.2 对齐效果比较

利用COW、MSPA和GPA三种方法分别对数据集1和数据集2进行谱峰对齐。其中,COW方法的程序源代码来自于http://www.models.life.ku.dk/DTW_COW,MSPA的程序源代码来自于http://code.google.com/p/mspa。算法参数设置为:COW算法的初始段长为120个数据点,最大漂移量为90个数据点;MSPA算法的最大漂移量为90个数据点;GPA算法中高斯函数窗口初始值为24,最小值为1。

图3给出三种算法对数据集1的对齐结果。三种算法对数据谱图均具有一定的对齐作用,但COW和MSPA的对齐效果还不是很理想。如图3b所示,谱峰段2处对齐效果较好,但谱峰段1还存在严重的谱峰漂移。从图3c可见,MSPA算法在谱峰段1和谱峰段2均存在较为严重漂移现象。图3d表明GPA算法总体上具有较好的对齐效果。

图4为数据集2分别利用三种算法对齐结果的局部放大图,COW、MSPA和GPA对齐效果分别如图4b~图4d所示。图4说明了GPA算法对数据集2的对齐结果在直观上优于COW和MSPA算法。

为了定量衡量谱峰对齐效果,文中采用谱与谱之间的平均相关系数[18]、PCA第一主成分解释能力[6]及运行时间这三个指标对COW、MSPA和GPA方法对齐效果进行评估,结果如表1所示。算法在DELL台式电脑上运行,处理器为Pentium(R)Dual-core CPU 5300@2.6 GHz,内存2.0 GB。

从表1可见,在平均相关系数方面:三种对齐方法均有较大提高,GPA算法的平均相关系数较为理想。在PCA第一主成分解释方差方面:GPA方法在两个数据集实验中均较好,在一定程度上说明GPA方法更有利于后续的多变量统计分析。在运行时间方面:MSPA用时最少,COW用时最多,而GPA介于两者之间,其运行时间在可接受范围内。

3 总结与讨论

上一篇:教师书面反馈下一篇:作文批语的艺术