代码生成方法、代码生成装置以及计算机可读存储介质与流程

文档序号:11237262阅读:385来源:国知局
代码生成方法、代码生成装置以及计算机可读存储介质与流程
提出了一种代码生成方法和装置。特别地,本公开涉及用于将源代码字映射到目标代码字(例如适于对用于存储在合成核酸链中的信息进行编码)的方法和装置,并且涉及相应的计算机可读存储介质。
背景技术
:核酸是聚合大分子并且由称为核苷酸的单体序列组成。每个核苷酸由糖组分、磷酸基团和含氮碱基或核碱基组成。核苷酸的糖组分为脱氧核糖的核酸分子是dna(脱氧核糖核酸)分子,而核苷酸的糖组分为核糖的核酸分子被称为rna(核糖核酸)分子。dna和rna是出现在生物体中的生物聚合物。核酸分子被组装为核苷酸的串或链。可以人工生成核酸分子,并且它们的串结构可以用于对任何种类的用户数据进行编码。为了在合成的、即人工创建的dna或rna中存储数据,通常生成短dna或rna片段(低聚核苷酸,短:寡核苷酸)。利用这些核酸片段,可以实现数据存储系统,其中数据存储在核酸分子中。合成的核酸分子携带由形成核酸分子的一连串不同核苷酸所编码的信息。每个合成的核酸分子由通过使用合成器的生物化学处理所生成的核苷酸的序列或串组成,并且表现寡核苷酸或核酸片段,其中核苷酸的序列或级联对与信息单元的集合(例如,用户数据的信息位的集合)相对应的代码字序列进行编码。例如,在dna存储系统中生成短dna片段。可以存储这些分子,并且可以通过使用测序器读取核苷酸序列来从存储的分子中取回信息。测序是确定特定核酸片段内的核苷酸的顺序的处理。测序可以解释为读取处理。核苷酸的读出顺序被处理或解码以恢复存储在核酸片段中的原始信息。在该背景下,术语“核酸片段”、“低聚核苷酸”和“寡核苷酸”可互换地使用并且指代短核酸链。该背景下的术语“短”应理解为与天然dna的长度相比是短的,该天然dna对生物体使用的遗传指令进行编码并且可以由数百万个核苷酸组成。合成的寡核苷酸可以包含多于一个(例如多于百个,例如在100与300之间,或者几千个)核苷酸。该技术使得能够提供数据存储系统,其中写入处理基于作为对要存储的信息进行编码的核苷酸序列的核酸片段的创建。生成的核酸片段例如作为固体物质或者溶解于液体中而存储在核酸存储容器中。核酸存储的特性可以取决于存储的数据的量和在将发生数据的读出之前的预期时间。合成的dna或rna中的数字信息存储可以提供高容量、低维护的信息存储。已经在“next-generationdigitalinformationstorage”,church等人,科学(science)第337卷,第1628页,2012年和“towardspractical,high-capacity,low-maintenanceinformationstorageinsynthesizeddna”,goldman等人,自然(nature),第494卷,2013年中研究了dna存储。数据可以是要存储的任何种类的有序数字源数据(例如二进制或四进制代码符号的序列),对应于数字(例如二进制)编码的信息,诸如文本、图像、音频或视频数据。由于有限的寡核苷酸长度,数据通常分布到多个寡核苷酸。在这样的核酸存储系统中,寡核苷酸经历几个处理阶段:合成寡核苷酸,即创建要存储的核酸链,扩增寡核苷酸,即增加每个单寡核苷酸的数目,例如增加到几百个或数千个,以及测序寡核苷酸,即分析每个寡核苷酸的核苷酸序列。这些处理阶段可能经历错误,导致不可解码或者不正确解码的信息。dna链由通过它们各自的核碱基或含氮碱基识别的四种不同的核苷酸组成,即腺嘌呤、胸腺嘧啶、胞嘧啶和鸟嘌呤,分别简称为a、t、c和g。rna链也由通过它们各自的核碱基识别的四种不同的核苷酸组成,即腺嘌呤、尿嘧啶、胞嘧啶和鸟嘌呤,分别简称为a、u、c和g。信息被存储在核苷酸序列中。作为信息传输系统,从信息位到不同核苷酸的这种映射可以解释为以a、t、c、g作为调制符号(或者分别是a、u、c和g)的调制,其中符号字母表的大小为4。相反,从给定符号元组或目标代码字到信息位元组或源代码字的判决规则可以称为解调。核碱基倾向于经由氢键连接到它们的互补配对物。例如,天然dna通常显示双螺旋结构,其中一条链的a连接到另一条链的t,并且类似地,c倾向于连接到g。在该背景下,a和t以及c和g被称为互补。相应地,a与u和g与c形成互补rna碱基对。如果核苷酸序列的反向平行排列导致核碱基在每个位置与它们的配对物互补,则认为两个核苷酸序列彼此“反向互补”。反向互补性不只发生在单独的dna或rna链之间。核苷酸序列也可能具有内部或自反向互补性。作为示例,如果片段在互补、反向步骤之后与自身相同,则认为dna片段是自反向互补的。例如,dna片段aatctagatt是自反向互补的:原始dna片段-aatctagatt;互补-ttagatctaa;顺序反向-aatctagatt。可能不容易测序长的自反向互补片段,这妨碍在链中编码的信息的正确解码。此外,测试已经显示,如果核苷酸游程长度(即相同核苷酸的级联或序列)超过一定长度,则该游程长度可能降低测序精度。此外,由于扩增处理和测序在寡核苷酸中的不同位置引入错误,因此许多测序的寡核苷酸可能不包含正确信息。因此,应当使用特定的调制编码,其允许以高编码效率对信息或源数据进行编码,同时具有降低的不正确解码的概率。技术实现要素:根据本原理的一方面,一种将多个源代码字映射到多个目标代码字的计算机实现的代码本生成方法包括提供多个源代码字和多个目标代码字;将多个目标代码字分组成目标代码字的多个子集,目标代码字包括识别部分和剩余部分,其中与所述多个子集中的同一子集相对应的目标代码字的识别部分是相同的;选择用于寻址所述多个子集的源代码字的第一代码符号集合;针对所述子集确定所述多个子集内的一个或多个相应的相邻子集,其中一个或多个相邻子集的目标代码字的识别部分与相应子集的目标代码字的识别部分相差达预定数量的代码符号;以及将相应的第一代码符号集合寻址同一子集的源代码字分配到所述子集的目标代码字,使得所述源代码字所分配到的所述子集的目标代码字的剩余部分与所述子集的相邻子集的目标代码字的相应剩余部分相同的所述子集的目标代码字的数量对应于优化标准,例如被最大化。相应地,一种用于将多个源代码字映射到多个目标代码字的代码生成装置包括用于接收目标代码字的第一输入端(501)和用于接收源代码字的第二输入端(502);代码字分组单元,被配置为将多个目标代码字分组成目标代码字的多个子集,目标代码字包括识别部分和剩余部分,其中与所述多个子集中的同一子集相对应的目标代码字的识别部分是相同的;选择单元,连接到代码字分组单元,并且被配置为选择用于寻址所述多个子集的源代码字的第一代码符号集合;确定单元,连接到代码字分组单元,并且被配置为针对所述子集确定所述多个子集内的一个或多个相应的相邻子集,其中一个或多个相邻子集的目标代码字的识别部分与相应子集的目标代码字的识别部分相差达预定数量的代码符号;以及映射单元,连接到选择单元和确定单元,并且被配置为将相应的第一代码符号集合寻址同一子集的源代码字分配到所述子集的目标代码字,使得所述源代码字所分配到的所述子集的目标代码字的剩余部分与所述子集的相邻子集的目标代码字的相应剩余部分相同的所述子集的目标代码字的数量对应于优化标准,例如被最大化。此外,一种计算机可读存储介质,其中存储有使得能够将多个源代码字映射到多个目标代码字的指令,所述指令当由计算机执行时使得计算机:-提供多个源代码字和多个目标代码字;-将多个目标代码字分组成目标代码字的多个子集,目标代码字包括识别部分和剩余部分,其中与所述多个子集中的同一子集相对应的目标代码字的识别部分是相同的;-选择用于寻址所述多个子集的源代码字的第一代码符号集合;-针对所述子集确定所述多个子集内的一个或多个相应的相邻子集,其中一个或多个相邻子集的目标代码字的识别部分与相应子集的目标代码字的识别部分相差达预定数量的代码符号;以及-将相应的第一代码符号集合寻址同一子集的源代码字分配到所述子集的目标代码字,使得所述源代码字所分配到的所述子集的目标代码字的剩余部分与所述子集的相邻子集的目标代码字的相应剩余部分相同的所述子集的目标代码字的数量对应于优化标准。计算机可读存储介质其中存储有指令,该指令当由计算机执行时使得计算机进行所描述的方法的步骤。源代码字具有第一预定义长度,即由第一预定义数量的代码符号组成。目标代码字具有第二预定义长度,即由第二预定义数量的代码符号组成。在实施例中,目标代码字包括四进制代码符号的序列。源代码字可以包括二进制代码符号的序列。对于目标代码字的四进制代码符号的使用允许所使用的符号到dna或rna核苷酸或核碱基的直接对应或映射,并且实现比例如二进制符号0和1到四个不同核苷酸中的各自两个的映射更有效率的编码。相邻子集具有到相应子集的非零汉明距离。作为示例,预定数量的代码符号可以等于1,即,相邻子集的代码字在识别部分内与相应子集相差一个符号。针对多个子集中的每个子集确定相邻子集。在实施例中,术语“对应于优化标准”(即,满足优化标准)是指以下特征,即所述子集的目标代码字的剩余部分与所述子集的相邻子集的目标代码字的相应剩余部分相同的所述子集的目标代码字的数量被最大化。目标代码字的最大数量是指子集的目标代码字的剩余部分与子集的相邻子集的目标代码字的相应剩余部分相同的子集的目标代码字的最大可能数量。在另一实施例中,术语“对应于优化标准”是指以下特征,即目标代码字的所述数量适于接近但低于最大可能数量(例如低于最大可能数量1)的数目。代码字的术语“部分”不一定意味着属于该部分的代码符号形成代码字内的连续符号的序列。例如,剩余部分可以嵌入识别部分,反之亦然,在多个限定位置处的代码符号可以属于识别部分,而剩余符号属于剩余部分等。根据本原理的方面的解决方案提供了一种代码本生成方案,用于生成适于合成包含相应核苷酸序列的核酸分子的代码字序列。通过链接相应的目标代码字以生成适于合成寡核苷酸的代码字序列,来完成携带数据或信息单元的源代码字的编码。可应用该编码方案来适当地排列信息单元以存储在核酸片段中,同时可以降低的错误概率来解码。所提供的解决方案至少具有以下效果:在识别部分内经受单个或多达预定数量的符号错误的目标代码字将被正确地解码。因此,在使用所创建的经受失真的目标代码字的序列合成的核酸链或寡核苷酸中编码的信息将具有增加的正确解码的概率。寡核苷酸测序的可靠性得以提高,允许提供用于在核酸分子中存储信息的可靠系统,例如用于归档目的。在一个实施例中,在将多个目标代码字分组成目标代码字的多个子集之前,根据解码相关标准从多个目标代码字中移除目标代码字。这里,术语“根据解码相关标准”是指解码或解码精度对要解码的目标代码字的结构(即对目标代码字或目标代码字序列内的连续符号的实际序列)的依赖性。例如,如果目标代码字用作在合成的寡核苷酸中存储数据的基础,则合成、扩增和测序的生物化学处理的性能精度可以分别根据所生成的或要生成的寡核苷酸内的特定核苷酸序列而不同。其他参数也可以影响性能精度,例如其他分子的存在或物理参数,诸如例如温度,压力等。在所描述的实施例中,移除展现导致解码错误的较高概率的可能目标代码字以增加正确解码的概率。解码相关标准例如可以是代码符号的游程长度,即目标代码字或目标代码字序列内的连续相同的代码符号的数目,或者分别地寡核苷酸或寡核苷酸序列内的连续相同的核苷酸的数目。例如,对于寡核苷酸aatttgcc,a、t、g、c的游程长度分别为2、3、1、2。作为示例,根据解码相关标准,移除包括大于预定义的最大游程长度的相同代码符号的游程长度的目标代码字。这降低了由游程长度问题引起的解码错误的概率。例如,预定义的最大游程长度可以是3,因为实验结果已经显示应该避免4个或更多个核苷酸重复,诸如“aaaa”或“ttttt”,以便实现更可靠的测序结果。此外,移除当与另一目标代码字链接时包括大于预定义的最大游程长度的相同代码符号的游程长度的目标代码字。这允许避免当两个或更多个代码字的序列被链接时出现相同的目标代码符号的游程长度,例如以便创建适于从中生成合成的寡核苷酸的代码字序列。因此,进一步降低了由游程长度问题引起的解码错误的概率。考虑到游程长度约束而移除目标代码字增加了从(剩余)目标代码字生成的代码字序列对于合成相应寡核苷酸的适合性,因为较长的游程长度(例如超过3)在合成的寡核苷酸或核酸片段中可能较不适于正确测序。在不移除目标代码字的情况下,例如由于游程长度约束,目标代码字的每个符号可以表示源代码字的两个信息位或二进制符号。考虑游程长度约束的可能编码可以基于向每个源代码符号分配两个不同的目标代码符号。例如,对于源代码符号“0”和“1”以及目标代码符号“a”、“t”、“g”和“c”,分配“a”和“c”到“0”,以及“g”和“t”到“1”,并且在目标代码符号的游程长度超过允许的预定义最大游程长度的情况下用其配对物替代目标代码符号可以用来避免游程长度超过预定义最大游程长度。然而,这里每个目标符号只能表示一个源代码符号。根据以上描述的实施例,即使在游程长度约束下,游程长度受约束的序列的容量也高于1。在该背景下,“容量”是指源代码字的多少位可以由目标代码字的一个符号渐近地表示。由c=log2γ给出在调制之后游程长度被限制在范围[d,k]内的m级游程长度受限调制代码的容量c(其中m是调制的字母表大小,d和k分别表示最小和最大游程长度),其中γ是以下特征方程的最大实根:zk+1-zk-(m-1)zk-d+1+(m-1)=0。因此,对用于dna存储的调制避免游程长度超过3的游程长度约束可以解释为设计受d=1和k=3影响的四进制游程长度受限代码。相应的容量可以确定为c≈1.9957位/符号,即每个符号(核苷酸)可以渐近地表示1.9957个信息位。在数据存储的背景下,期望具有高调制效率r/c(具有码率r位/符号)的调制,因为存储密度随着调制效率而增加。在一个实施例中,确定步骤(即针对子集确定目标代码字的多个子集内的一个或多个相应的相邻子集)包括或被执行,使得基于核酸链内的核苷酸的测序错误概率,一个或多个相邻子集的识别部分与相应子集相差达与主导测序错误相对应的所选符号翻转。通过仅考虑用于翻转的主导符号错误来限制特定子集的相邻子集的数量。该附加约束使得相邻子集被选择为使得正好对于特定子集/相邻子集对,公共分配的数量最大化,即,目标代码字的数量量被最大化,其在识别部分内在子集及其相邻子集之间仅相差达所述预定义数量的代码符号,例如一个代码符号。当使用所生成的目标代码字来合成核酸链(诸如dna链)时,符号被解码的某些符号翻转(其不同于初始编码的符号)可以是主导的,即比其他更可能出现。例如,dna存储中的主导单个符号错误是a与g之间以及c与t之间的符号转换。通过使两个相邻子集之间的共同分配的数量最大化,对于源代码字的可解码性的影响,更精确地对于用于将源代码字分配到目标代码字的子集的第一源代码符号集合的影响,由于目标代码符号的识别部分内的主导单个符号错误被最小化或至少降低。这显著降低了剩余错误率。在一个实施例中,将多个源代码字和目标代码字划分成第一代码和第二代码的源代码字和目标代码字,第一代码和第二代码的目标代码字都具有以下属性,该属性为相应代码的目标代码字的反向互补字仍然属于相应代码,并且在第一代码与第二代码之间没有公共代码字,并且第二代码的目标代码字既不等于两个级联的第一代码的目标代码字的任何部分,也不等于级联的第一代码的一个目标代码字和第二代码的一个目标代码字的任何部分,以及其中该分组、选择、确定和分配应用于第一代码。在另一实施例中,代替或者除了第一代码之外,第二代码可以经历分组、选择、确定和分配。为了避免自反向互补性并且由此增加解码的正确性,通过复用第一和第二代码的代码字来生成代码字序列。这允许例如要合成的非自反向互补核酸寡核苷酸的生成由来自第一和第二代码的复用代码字组成。如果根据以上描述的实施例生成第一代码,则第二代码可以用作合适的划界代码字的提供者,以避免自反向互补性。在一个实施例中,为了通过以降低的错误概率使用用于附加信息传输的第二代码来增加编码效率,可以根据以下来生成所使用的第二代码:将第二代码的多个目标代码字分组成第二代码的目标代码字的多个子集,第二代码的目标代码字包括识别部分和剩余部分,其中与第二代码的目标代码字的多个子集中的同一子集相对应的第二代码的目标代码字的识别部分是相同的。选择用于寻址第二代码的目标代码字的多个子集的第二代码的源代码字的第一代码符号集合。然后,根据使第二代码的目标代码字的剩余部分之间的汉明距离最小化的成本函数,将相应的第一代码符号集合寻址第二代码的目标代码字的同一子集的第二代码的源代码字分配到所述子集。例如,第二代码的目标代码字的识别部分可以嵌入在相应的剩余部分的两个部分之间。此外,源代码字例如可以是第一预定义长度的二进制代码字,而目标代码字例如可以是第二预定义长度的四进制代码字。作为示例,使第二代码的目标代码字的剩余部分之间的汉明距离最小化的成本函数可以取决于符号错误概率。根据该示例实施例,成本函数并不均等地处理每个可能的错误,而是考虑到根据应用,某些符号错误可能比其他错误更可能发生。这允许编码方案适应于目标应用的特定错误约束。作为示例,符号错误概率基于核酸链内的核苷酸的测序错误概率。这允许编码方案适应于例如dna或rna存储系统的核酸存储系统的特定约束。在一个实施例中,生成来自一个或多个目标代码字的至少一个代码字序列;并且合成包括其中核苷酸序列排列为与该至少一个代码字序列相对应的片段的至少一个核酸分子。核酸分子例如可以是由接收所生成的代码字序列的合成器设备生成的dna片段或rna片段。换句话说,根据所生成的代码字的序列来合成dna或rna寡核苷酸。合成的寡核苷酸携带由形成寡核苷酸的核苷酸序列编码的信息。可以存储这些分子,并且可以通过使用测序器读取核苷酸序列并对提取的代码字进行解码来取回信息。例如,对于使用两个不同代码的实施例,从来自一个或多个目标代码字生成的至少一个代码字序列合成寡核苷酸,其中在预定数量的第一代码字之后插入至少一个第二代码字。寡核苷酸包含核苷酸序列排列为与代码字序列相对应的片段。可以生成多于一个的核酸分子。由合成器生成或合成的核酸分子或寡核苷酸的数量对应于生成的代码字序列的数量。对于每个代码字序列合成至少一个核酸分子。然而,可以为代码字序列的每个或选择的(例如高优先级的)子集生成多个寡核苷酸。例如可以在生成所有代码字序列之后或者在生成每个序列之后执行合成步骤。此外,在实施例中,配置为执行以上描述的方法的装置或设备包含在核酸存储系统中,诸如dna存储系统或rna存储系统。例如,核酸存储系统还包含核酸存储单元或容器和测序器单元或设备,该设备被配置为对合成和存储的核酸分子进行测序以取回和解码经编码的代码字序列。尽管没有明确描述,但是可以以任何组合或子组合来采用本实施例。附图说明图1示意性地图示了将多个源代码字映射到多个目标代码字的代码本生成方法的实施例;图2示意性地图示了将多个源代码字映射到多个目标代码字的代码本生成方法的实施例的步骤;图3示意性地图示了将多个源代码字映射到多个目标代码字的代码本生成方法的另一实施例;图4示意性地图示了相邻子集图的示例;以及图5示意性地图示了用于将多个源代码字映射到多个目标代码字的代码生成装置的实施例。具体实施方式为了更好地理解,现在将参考附图在以下描述中更详细地解释本原理。应当理解,本原理不限于这些示范性实施例,并且在不脱离如所附权利要求中定义的本原理的范围的情况下,也可以得当地组合和/或修改指定的特征。参考图1,示意性地示出了将多个源代码字映射到多个目标代码字的代码本生成方法100的实施例。术语“代码字”指代诸如二进制或四进制代码符号的代码符号的序列。“源代码字”用来提供多条信息,例如二进制编码位流,而“目标代码字”是用来以适于从中生成合成的寡核苷酸的代码转换的格式携带多条信息的代码符号的调制序列。在第一步骤101中,提供多个源代码字和多个目标代码字。在另一实施例中,这些初始的多个源代码字和目标代码字可以已经可用。在第二步骤102中,将多个目标代码字分组成目标代码字的多个子集。目标代码字包括识别部分和剩余部分,其中与多个子集中的同一子集相对应的目标代码字的识别部分是相同的。换句话说,子集的每个目标代码字由同一标识符标识,其中包括在标识部分中的标识符可以由在代码字上连续或分布的单个或多个代码符号来表示。在第三步骤103中,选择源代码字的第一代码符号集合以用于寻址多个子集。第一代码符号集合对应于源代码字的识别部分。在第四步骤104中,对于子集确定多个子集内的一个或多个相应的相邻子集。一个或多个相邻子集的目标代码字的识别部分与相应子集的目标代码字的识别部分相差达预定数量的代码符号,例如一个代码符号。在第五步骤105中,将相应的第一代码符号集合寻址同一子集的源代码字分配给子集(即所述同一子集),使得子集的目标代码字的剩余部分与其相邻子集的目标代码字的相应剩余部分相同的子集的目标代码字的数量对应于优化标准。另外参考图2,示意性地示出了将多个源代码字映射到多个目标代码字的代码本生成方法的步骤的实施例。所示步骤指代根据图1所示的方法提供源代码字和目标代码字的步骤101的实施例的示例。这里,该提供包括根据游程长度约束而预选择的目标代码字,以及被划分成第一和第二代码的多个源代码字和目标代码字。在步骤201中,提供源代码字和初始的多个目标代码字。在下一步骤202中,在将多个目标代码字分组成目标代码字的多个子集之前,根据解码相关标准从多个目标代码字(即初始的多个目标代码字)中移除目标代码字,其中根据解码相关标准,包括大于预定义的最大游程长度的相同代码符号的游程长度的目标代码字被移除。在示例实施例中,将该预定义的最大游程长度设置为三个代码符号。在其他实施例中,可以将预定义的最大游程长度设置为例如两个、四个或其他值。在下一步骤203中,当与另一目标代码字链接时包括大于预定义的最大游程长度的相同代码符号的游程长度的目标代码字被移除。这消除了单独或与另一目标代码字组合不能满足游程长度约束的所有目标代码字。因此,多个目标代码字的序列将满足游程长度约束。在另一步骤204中,将源代码字和目标代码字二者划分成适于避免自反向互补代码字序列的第一和第二代码。将多个源代码字和目标代码字划分成都具有以下属性的第一代码和第二代码的源代码字和目标代码字,该属性为相应代码的目标代码字的反向互补代码字仍然属于相应代码,并且在第一代码与第二代码之间没有公共代码字。对于第一代码执行如图1所示的分组102、选择103、确定104和分配105的步骤。在另一实施例中,这些步骤可以附加地或替代地应用于第二代码。参考图3,示意性地示出了将多个源代码字映射到多个目标代码字的代码本生成方法300的另一实施例。在不限制一般性的情况下,目标代码字由对应于dna核碱基并且分别由整数0、1、2、3表示的四进制代码符号a、t、c、g组成,而源代码字由整数0和1表示的二进制代码符号组成。在所示实施例中,在第一步骤301中,生成预定义长度l的所有四进制目标代码字,即所有四进制符号元组。术语“元组”用来指代元素的顺序的列表,诸如代码符号的序列。在第二步骤302中,从目标代码字的集合中,即从生成的四进制符号元组中消除通过自身或者通过级联两个符号元组而违反(d,k)游程长度约束的所有符号元组。通过下限d和上限k设置游程长度限制,例如利用参数d=1和k=3。利用该示例参数,调制之后游程长度将限制为1到3。符合游程长度约束的任何调制具有小于约1.9975位/符号的容量的码率。作为示例,通过将长度为9的位元组(即二进制源代码字)映射到长度为5的(目标)符号元组(即目标代码字)来生成调制代码。可以替代选择其他长度。对于所选择的示例参数,相应的码率为1.8位/符号。为了说明所示实施例,在调制前和调制后,将源代码字的位元组表示为(u1,u2,u3,u4,u5,u6,u7,u8,u9),并且将目标代码字的四进制符号元组表示为(x1,x2,x3,x4,x5),其中ui∈{0,1},1≤i≤9,并且xi∈{0,1,2,3},1≤i≤5。例如,对于上述所选择的参数,如下进行步骤301和302以符合游程长度约束:根据步骤301,构建从(0,0,0,0,0)到(3,3,3,3,3)的长度为5的所有1024个四进制目标符号元组。根据步骤302,消除步骤301中获得的以两个相同符号开始或结束的目标符号元组。换句话说,维持具有x1≠x2和x4≠x5的目标符号元组,使得链接两个目标符号元组仍然符合游程长度约束d=1、k=3。在下一步骤303中,如果需要,消除不具有反向互补配对物的目标符号元组。将剩余的目标符号元组(即目标代码字)的反向互补对表示为代码c。利用如上所述的所选择的示例参数,所得到的目标符号元组的集合自动地仅包含具有反向互补配对物的目标符号元组。在下一步骤304中,在c中找到目标代码符号元组(即目标代码字)的各自的反向互补对,其符合作为使得能够生成非自反向互补目标代码字序列的先决条件的以下自反向互补约束(i)和(ii)。所得到的集合具有576个目标代码字(属于c的长度为5的目标符号元组)。这些目标符号元组(即目标代码字)至少表现出以下属性:(i)它们不是自反向互补的;以及(ii)任何代码字的自反向互补配对物也是c内的一个代码字。换句话说,x∈c和分别表示代码字及其反向互补配对物,其中并且在该背景下,将x和称为反向互补对。换句话说,代码c由反向互补对组成。在示例中,在c中存在288个反向互补对。在下一步骤305中,找到符合自反向互补约束的目标代码字的反向互补对的组合,并将其选择为代码c2。将剩余的反向互补对表示为代码c1。更详细地,为了避免目标代码字序列的自反向互补性,将代码c划分成两个子集,表示为代码c1和c2。要合成的dna片段由来自c1和c2的复用代码字组成。作为示例,可以在两个阶段中进行根据步骤305的代码c1和c2的构建:在第一阶段中,选择表示为y=(y1,y2,y3,y4,y5)和的代码c中包括的反向互补对来构建代码c2,并且选择剩余的287个反向互补对属于c1。例如,可以选择y=(0,2,0,1,0)和来构建c2。其他选择是可能的。仅使用来自c2的反向互补对中的一个代码字(例如y)与来自c1的代码字复用以生成适于合成dna片段的序列,同时可以选择来自c1的所有代码字以用于复用。仅y(而不使用)用来复用确保对于dna片段,其反向互补配对物仅包括否则,对于一些排列不能保证dna片段是自反向互补的。为了解释的目的,使用y和二者以复用来给出反驳的示例。将可能适于dna片段的序列构建为并且由给出其反向互补配对物,表示初始构建的dna片段是自反向互补的。另一方面,如果仅y用于s,则y将从不出现在中。例如,(x1,x2,x3,x4,x5)和(x'1,x'2,x'3,x'4,x'5)表示来自c1的两个目标代码字。这些代码字可以但不必是不同的。由于c1和c2是排他的,即没有既属于c1又属于c2的公共代码字,因此c1的目标代码字不等于y。如果来自c1的两个代码字的任何组合或者来自c1的一个代码字和的任何组合等于y,则任何包括y的dna片段将不是自反向互补的。具体而言,检查y是否不等于以下组合中的任何一个:(x5,x'1,x'2,x'3,x'4),(x4,x5,x'1,x'2,x'3),(x3,x4,x5,x'1,x'2),(x2,x3,x4,x5,x'1),如果y不等于这些组合中的任一并且代码字序列包括y,则y将不出现在代码字序列的反向互补配对物的任何位置,使其适于合成相应的dna片段。对于如上所述的具体示例,可以使用总共18个反向互补对来构建c2:{(0,1,1,1,0),(1,0,0,0,1)},{(2,1,1,1,0),(1,0,0,0,3)},{(3,1,1,1,0),(1,0,0,0,2)},{(0,2,2,2,0),(1,3,3,3,1)},{(1,2,2,2,0),(1,3,3,3,0)},{(3,2,2,2,0),(1,3,3,3,2)},{(0,3,3,3,0),(1,2,2,2,1)},{(2,3,3,3,0),(1,2,2,2,3)},{(2,0,0,0,1),(0,1,1,1,3)},{(3,0,0,0,1),(0,1,1,1,2)},{(0,2,2,2,1),(0,3,3,3,1)},{(3,2,2,2,1),(0,3,3,3,2)},{(2,3,3,3,1),(0,2,2,2,3)},{(2,0,0,0,2),(3,1,1,1,3)},{(3,0,0,0,2),(3,1,1,1,2)},{(2,1,1,1,2),(3,0,0,0,3)},{(2,3,3,3,2),(3,2,2,2,3)},{(2,0,0,0,3),(2,1,1,1,3)}。通过检查c划分成c1和c2的所有可能划分可以找到该对。如果仅一对用来构建c2,并且因此仅一个代码字y用来构建用于通过复用来自c1的代码字和y来合成dna片段的序列,则单独使用代码c2来避免自反向互补性。如果更多的反向互补对用来构建c2,则除了避免自反向互补性之外,代码c2还可以用来编码和传输信息。设定以上给出的示例,在第二阶段,从所获得的18个对中选择16个反向互补对来构建c2,并且选择剩余的272个互补对来构建c1。作为第一阶段的结果,c2中的任何代码字不等于来自c1的两个代码字的任何组合。例如,(x1,x2,x3,x4,x5)和y=(y1,y2,y3,y4,y5)分别是来自c1和c2的代码字。检查y是否不等于以下组合中的任何一个:(x5,y'1,y'2,y'3,y'4),(x4,x5,y'1,y'2,y'3),(x3,x4,x5,y'1,y'2),(x2,x3,x4,x5,y'1),(y'2,y'3,y'4,y'5,x1),(y'3,y'4,y'5,x1,x2),(y'4,y'5,x1,x2,x3),(y'5,x1,x2,x3,x4),其中y'=(y'1,y'2,y'3,y'4,y'5)表示来自c2的代码字。再次,仅来自c2中的每个反向互补对的一个代码字用来复用以构建用于生成dna片段的序列,而没有限制从c1中选择代码字以用于复用。如果来自c2的所有32个代码字(对应于16个代码字对)都通过检查,则它们可以用来存储4位信息,因为除了用来与来自c1的代码字结合避免自反向互补性之外,仅来自c2中的每个反向互补对的一个代码字用来复用。如果不是所有32个代码字都通过检查,则8个反向互补对用来构建c2,并且再次执行以上检查。如果在这种情况下通过检查,则可以使用c2存储3位信息。继续这个处理,直到可以找到反向互补对的集合通过检查。设定以上示例,来自18个对的16个反向互补对的任何组合通过检查。因此,16个反向互补对的任何组合可以用作c2。在不限制一般性的情况下,使用以下16个反向互补对:{(0,1,1,1,0),(1,0,0,0,1)},{(2,1,1,1,0),(1,0,0,0,3)},{(3,1,1,1,0),(1,0,0,0,2)},{(0,2,2,2,0),(1,3,3,3,1)},{(1,2,2,2,0),(1,3,3,3,0)},{(3,2,2,2,0),(1,3,3,3,2)},{(0,3,3,3,0),(1,2,2,2,1)},{(2,3,3,3,0),(1,2,2,2,3)},{(2,0,0,0,1),(0,1,1,1,3)},{(3,0,0,0,1),(0,1,1,1,2)},{(0,2,2,2,1),(0,3,3,3,1)},{(3,2,2,2,1),(0,3,3,3,2)},{(2,3,3,3,1),(0,2,2,2,3)},{(2,0,0,0,2),(3,1,1,1,3)},{(3,0,0,0,2),(3,1,1,1,2)},{(2,1,1,1,2),(3,0,0,0,3)}。因此,c2可以用于存储每个代码字的4位,并且c1中有544个代码字,使得能够存储每个代码字的9位。如果在来自c1的每ns个代码字之后插入来自c2的一个代码字,则每5(ns+1)个四进制符号可以存储4+9ns个信息位,即通过来计算码率。例如,对于ns=10,码率约为1.709位/符号。仍然参考图3,在下一步骤306中,找到用于代码c2的位元组(即源代码字)与符号元组(即目标代码字)之间的分配,其使解调之后的位出错率最小化。设定以上给出的示例,来自c2中的每个反向互补对的一个代码字用来存储4位信息。在不限制一般性的情况下,可以选择以下目标代码字:{(0,1,1,1,0),(2,1,1,1,0),(3,1,1,1,0),(0,2,2,2,0),(1,2,2,2,0),(1,3,3,3,2),(0,3,3,3,0),(2,3,3,3,0),(2,0,0,0,1),(3,0,0,0,1),(0,2,2,2,1),(3,2,2,2,1),(2,3,3,3,1),(2,0,0,0,2),(3,0,0,0,2),(2,1,1,1,2)}。这些代码字的一个公共属性是,对于固定的中间3个符号元组,存在4个代码字,并且存在四个不同的中间3个符号元组。因此,可以根据中间3个符号元组将以上目标代码字划分成四个子集。可以将两个信息位映射到中间3个符号元组,并且可以根据代码字的开始/结束符号来分配其他两个信息位。例如,对于作为要映射到c2中的代码字的信息元组(即源代码字)的(u1,u2,u3,u4),可以根据表a将前两位映射到中间的3个符号:u1,u2x2,x3,x40,00,0,00,11,1,11,02,2,21,13,3,3(表a)对于解调,即从测序的3个符号元组到2位元组的判决,汉明距离,即两个符号元组之间的不同符号的数目可以用作判决标准。将判决以上查找表中具有到测序的符号元组的最小汉明距离的符号元组。因此,导致一个合成符号被测序为与正确符号不同的符号的一个单个符号错误不会引起任何位错误。例如,将位元组0,0调制到符号元组0,0,0,其将用于合成。如果在测序之后发生一个符号错误,并且将测序不正确的符号元组(例如1,0,0),但是在计算查找表中的符号元组之间的汉明距离之后,将判决符号元组0,0,0为正确的一个,没有导致位错误。此外,将u3,u4映射到目标符号x1,x5,以使位出错率最小化。例如,对于x2,x3,x4=0,0,0,x1,x5∈{(2,1),(3,1),(2,2),(3,2)}的情况,存在总共4·3·2·1=24种从u3,u4到x1,x5的可能的映射。由于单个符号错误,两符号元组(x1,x5)∈{(2,1),(3,1),(2,2),(3,2)}可能改变为另一元组(x'1,x'5)∈{(2,1),(3,1),(2,2),(3,2)}。例如,(x1,x5)=(2,1)改变为(x'1,x'5)=(3,1),表示为(x1,x5)→(x'1,x'5)。通过列出这样的单个符号错误的所有情况,可以将所得到的位错误的总数估计为其中dh((u3,u4),(u′3,u′4))表示(u3,u4)与(u'3,u'4)之间的汉明距离,并且将(u3,u4)和(u'3,u'4)映射到(x1,x5)和(x'1,x'5)以用于特定映射。根据(等式1)中给出的成本函数测试所有可能的24种映射。并且选择使(等式1)最小化的映射作为(u3,u4)与(x1,x5)之间的适当映射。表b中示出了一个这样的映射:u3,u4x1,x50,02,10,13,11,02,21,13,2(表b)因此,表c中示出了对于固定的中间3个符号x2,x3,x4=0,0,0的(u1,u2,u3,u4)与(x1,x2,x3,x4,x5)之间的映射:u1,u2,u3,u4x1,x2,x3,x4,x50,0,0,02,0,0,0,10,0,0,13,0,0,0,10,0,1,02,0,0,0,20,0,1,13,0,0,0,2(表c)可以相应地确定用于其他固定的中间3个符号样式的映射。总之,对于给定示例,获得用于c2的调制表,如表d所示:(u1,u2,u3,u4)(x1,x2,x3,x4,x5)(u1,u2,u3,u4)(x1,x2,x3,x4,x5)0,0,0,02,0,0,0,11,0,0,00,2,2,2,00,0,0,13,0,0,0,11,0,0,11,2,2,2,00,0,1,02,0,0,0,21,0,1,00,2,2,2,10,0,1,13,0,0,0,21,0,1,13,2,2,2,10,1,0,00,1,1,1,01,1,0,01,3,3,3,20,1,0,12,1,1,1,01,1,0,10,3,3,3,00,1,1,03,1,1,1,01,1,1,02,3,3,3,00,1,1,12,1,1,1,21,1,1,12,3,3,3,1(表d)如果符号错误概率可用,则可以将成本函数(等式1)修改为作为示例,p{2,1)→(3,1)}p{2→3}是合成符号2(对应于核苷酸c)但测序符号3(对应于核苷酸g)的概率。如果这样的符号错误概率可用,则可以找到适当的映射以使成本函数(等式2)最小化。仍然参考图3,在下一步骤307中,找到用于代码c1的位元组(即源代码字)与符号元组(即目标代码字)之间的分配,其使解调之后的位出错率最小化。如前所述,根据以上给出的示例,在c1中存在544个目标代码字。确定映射规则以将源代码字(u1,u2,u3,u4,u5,u6,u7,u8,u9)分配给目标代码字(x1,x2,x3,x4,x5),使得解调之后的位出错率最小化。首先,考虑代码字部分x1,x3,x5。可以验证,对于x1,x3,x5的64个不同组合中的每一个,在c1中存在8个或更多个代码字。因此,可以将x1,x3,x5分配给6位。在不限制一般性的情况下,将u1,u2映射到x1;将u3,u4映射到x3;并且将u5,u6映射到x5。例如,可以将一个映射定义为x1=u1+2u2,x3=u3+2u4,x5=u5+2u6。(等式3)作为另一示例,如果符号错误概率可用,则可以采用除了(等式3)之外的导致较少位出错概率的不同映射。换句话说,以下成本函数可以用来找到适当的映射:类似的成本函数可以用于u3,u4与x3之间以及u5,u6与x5之间的映射。根据x1,x3,x5,将c1划分成64个子集,表示为s1,s2,…,s64,其中si的索引等于i=x1+4x3+16x5+1。例如,s1={(01010),(02010),(03010),(01020),(02020),(03020),(01030),(02030),(03030)},其中x1=x3=x5=0。在子集的基础上执行将信息位(即源代码字)分配给符号(即目标代码字)同时使位出错概率最小化的目标。在该背景下,使用相邻子集的概念。由于每个子集由x1,x3,x5作为目标代码字的识别部分索引,因此通过翻转x1,x3,x5的预定义数量的符号(例如一个符号)来获得相邻子集。在所示实施例中,特定子集的相邻子集的数目是有限的,因为对于翻转仅考虑主导符号错误。作为示例,用于合成和测序dna片段的主导单个符号错误是a与g之间或c与t之间、或者等同地0与3之间或2与1之间的符号转变。因此,在所描述的示例中,每个子集确切地具有三个相邻子集。例如,s1具有x1=0,x3=0,x5=0,并且其相邻子集将具有x1=3,x3=0,x5=0,或x1=0,x3=3,x5=0,或x1=0,x3=0,x5=3。因此,s1的相邻子集是s4、s13、s49。另外参考图4,示意性地示出了相邻子集图的示例。通过连接相邻子集来获得相邻子集图,其中两个相邻子集之间的分支上的数字表示它们之间的公共x2,x4组合的数目。作为示例,s13={(01310),(02310),(03310),(01320),(02320),(03320),(01330),(02330)},其与s1具有8个公共x2,x4组合,即{11,21,31,12,22,32,13,23}。对于3位u7,u8,u9到x2,x4的分配,使两个相邻子集之间的公共分配的数目最大化,使得由于x1,x3,x5的主导单个符号错误所导致的对u7,u8,u9的影响最小化。换句话说,如果对于s1给出3位u7,u8,u9到x2,x4的分配,则相同的分配将应用于s13。另一方面,s4与s1仅具有6个公共分配。因此,对于s4需要另外的2个分配,这可以根据(等式1)或(等式2)类似地找到,以使解调之后的位出错概率最小化。设定以上示例,确定用于s1的映射以便将三位分配给集合{11,21,31,12,22,32,13,23}中的两个符号。表e中给出了映射的第一示例:(表e)作为示例,假设由于单个符号错误,子集中的代码字被改变为子集中的另一代码字。例如,11被修改为21,并且位元组000将在解调期间被判定为001,导致1位错误。通过列出这样的单个符号错误的所有情况,可以将所得到的位错误的总数估计为其中(x'2,x'4)由应用于(x2,x4)的单个符号错误引起,并且(x2,x4)和(x'2,x'4)都是s1内的组合。对于以上示例,j=51。总共地,在u7,u8,u9和与x2,x4之间存在8·7·6·5·4·3·2·1=40320种可能的映射。相对于估计成本函数(等式5)来测试所有映射。选择导致最小j值的映射作为适当的映射。表f中示出了一个这样的映射:u7,u8,u9x2,x40002210021010321103100123101130111211111(表f)这里,相应的成本函数导致j=36。因此,找到用于s1的映射规则为(表g)如果符号错误概率可用,则采用这样的错误概率的成本函数可以用来找到适当的映射:参考图4所示的相邻子集图,u7,u8,u9与x2,x4之间的映射规则也适用于s13。对于s4,检查s4与其相邻子集之间的公共分配。对于s1存在6个固定到它们的分配,如表h所示:u7,u8,u9x2,x4000221002100123101130111211111(表h)并且s4与s52之间存在6个公共分配,其中x2,x4∈{22,21,12,11,01,02},以及s4与s16之间存在9个公共分配,其中x2,x4∈{22,21,23,13,12,11,01,02,03}。因此,为了使相邻子集之间的公共分配最大化,x2,x4∈{22,21,23,13,12,11,01,02}用来向它们分配3位。由于u7,u8,u9与x2,x4之间的6个分配已经固定,因此确定u7,u8,u9∈{010,110}与x2,x4∈{01,02}之间的附加的合适的映射。再次,成本函数(等式5)或(等式6)可以用来找到适当的映射,同时固定u7,u8,u9与x2,x4之间的6个分配。并且通过采用(等式5),找到用于s4的映射规则,如表i所示:(对于s4,x1=3,x3=x5=0)(表i)可以对相邻子集图图4中的其他情况执行类似过程。对所有子集应用相同过程,可以获得用于代码c1的调制表,如下表j所示。表j包括256行和4列,其中第一和第三列示出了二进制源代码字(u1,u2,u3,u4,u5,u6,u7,u8,u9),并且第二和第四列示出了分别分配给第一和第三列的同一行中的源代码字的四进制目标代码字(x1,x2,x3,x4,x5),得到包含512个源代码字/目标代码字映射的代码本。因此,提供了一种以高效率生成调制代码的方法,其限制调制序列的游程长度,避免自反向互补性,并且使解调之后的位出错率最小化。参考图5,示意性地示出了用于将多个源代码字映射到多个目标代码字的代码生成装置500的实施例。所示装置允许将所描述的代码本生成方法的优点和特征实现为用于将多个源代码字映射到多个目标代码字的装置的一部分。装置500具有用于接收目标代码字的第一输入端501和用于接收源代码字的第二输入端502。在另一实施例中,两个输入可以实现为单个输入或接口。从存储设备或布置为生成代码字的处理设备接收代码字。在实施例中,存储设备或处理设备可以包括在装置500中。装置500包括代码字分组单元503,被配置为将通过第一输入端501中止的多个目标代码字分组成目标代码字的多个子集,目标代码字包括识别部分和剩余部分,其中与多个子集中的同一子集相对应的目标代码字的识别部分是相同的。装置500还包括选择单元504,其连接到代码字分组单元503,并被配置为选择源代码字的第一代码符号集合以用于寻址多个子集。通过第二输入502接收源代码字。此外,确定单元505连接到代码字分组单元503。代码字分组单元503被配置为针对子集确定多个子集内的一个或多个相应的相邻子集,其中一个或多个相邻子集的目标代码字的识别部分与相应子集的目标代码字的识别部分相差达预定数量的代码符号。此外,装置500包括至少连接到选择单元504和确定单元505的映射单元506。映射单元506被配置为将相应的第一代码符号集合寻址同一子集的源代码字分配给所述子集的目标代码字,所述源代码字被分配,使得其剩余部分与其相邻子集的目标代码字的相应剩余部分相同的所述子集的目标代码字的数量对应于优化标准,例如被最大化。生成的目标代码字可以输出和存储在存储器等中。在图5所示的实施例中,映射单元506连接到代码字序列生成单元507,其被配置为从一个或多个目标代码字生成至少一个代码字序列。将代码字序列提供给合成器单元508,其被配置为合成至少一个核酸分子,核酸分子包括其中核苷酸序列被排列为对应于至少一个代码字序列的片段。在图5所示的实施例中,所示装置500包括被连接以接收所生成的代码字序列的合成器单元508。合成器单元508被配置为合成核酸分子,例如dna或rna链,每个链包含其中核苷酸序列被排列为对应于特定代码字序列的片段。在另一实施例中,装置不包括合成器单元,但是通过接口连接或可连接到合成器单元。在实施例中,装置500是作为另一装置或系统(诸如存储系统,例如dna存储系统或rna存储系统)的一部分的设备。装置500例如可以是被布置为生成代码(即代码本)、连接到或包括用于存储代码的至少一个存储设备的可编程逻辑电路或处理设备。代码字分组单元503、选择单元504、确定单元505和映射单元506以及代码字序列生成单元507例如可以提供为单独的设备,共同作为至少一个设备或逻辑电路,或者由微处理器、微控制器或其他处理设备、计算机或其他可编程装置执行的功能。如本领域技术人员将理解的那样,本原理的各方面可以实施为装置、系统、方法或计算机可读介质。因此,本原理的各方面可以采取硬件实施例、软件实施例或将软件和硬件方面组合的实施例的形式。此外,本原理的各方面可以采取计算机可读存储介质的形式。可以使用一个或多个计算机可读存储介质的任何组合。本原理的各方面例如可以至少部分地实现在包括代码部分的计算机程序中,该代码部分用于当在可编程装置上运行或使得可编程装置能够进行根据本原理的实施例的装置或系统的功能时,进行根据本原理的实施例的方法的步骤。此外,任何所示连接可以是直接连接或间接连接。此外,本领域技术人员将认识到,逻辑块之间的边界仅仅是说明性的,并且替选实施例可以合并逻辑块或对各种逻辑块施加功能的替选分解。表j当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1