DNA序列完整性校验和纠错的编解码方法

文档序号:25043275发布日期:2021-05-14 11:23阅读:317来源:国知局
dna序列完整性校验和纠错的编解码方法
技术领域
:1.本发明属于生物信息学领域,具体涉及一种dna序列完整性校验和纠错的编解码方法。
背景技术
::2.生物信息学是一门利用应用数学、信息学、统计学和计算机科学等学科的方法研究生物学问题的交叉学科。早在19世纪60年代,学术界即提出了基于dna的数据存储的概念,经过近六十年的发展,dna存储相关的研究逐步成为生物信息学领域的重要分支。3.在dna存储的存储媒介方面,主要有基于体内的信息存储和基于体外的信息存储两大类。早期的启发性研究受限于当时的dna测序和合成技术水平,采用基于体内的信息存储方式,使用活细胞(如细菌等)来承载含有数字信息的dna。尽管对活细胞dna进行编辑的工作较为复杂,但将融合了数字信息的合成dna插入生物体的基因组,被认为比目前的媒介更有生命力。由于在生物体中dna可被复制并传递到下一代,因此使用dna材料的优点之一是在可遗传介质中长期存储数据。这种方法的一个缺点是,编码的数据可能会被dna的突变、删除和插入意外破坏,而这些在生物进化、繁衍或实验室的实验中都是自然发生的。4.近十年来,随着dna测序和合成技术的发展,体外信息存储方法在科学研究中更为常见。体外信息存储需要根据事先设计好的模板合成指定的dna片段。由于单个片段的长度一般不超过200个碱基,通常需由大量dna片段合作存储文件,每个dna片段只存储文件的一部分。通常人工设计dna序列仅通过编码或筛选的方式对最简单的异常情况(如gc含量异常的序列、重复序列)进行规避,以遵循最基本的生化规则,但实际在合成、存储、等过程中引入变异或在测序过程中出错的概率相对较高。5.由于存在发生变异的可能,无论是哪种dna存储媒介,都极大地依赖检错码给予完整性校验和纠错方面的支持。而目前已有方法为了提供此类支持,通常做出了一定让步,如:不得不牺牲一部分碱基序列或引入额外碱基序列作为完整性校验码的载体,导致信息容量下降或破坏原本序列的纯粹性;又如:大部分基于已有成熟纠错码进行改进的方案,一方面占用碱基位数过多,另一方面纠错能力受码距等因素限制,在方案设计时就必须设计为定值,即在方案设计之初,纠错能力就受到严格限制,因此很难进行扩展以继续发掘其纠错能力。技术实现要素:6.在体内信息存储的应用中,为了抵抗多种变异及测序本身所导致的测序结果差错问题,提高恢复原本数据的可能性,且在不引入额外碱基序列的情况下达到恢复原本存储数据的目的,本发明提供了一种数据完整性信息生成和嵌入、校验和纠错的方法,即一种dna序列完整性校验和纠错的编解码方法。7.为实现上述目的,本发明提供的dna序列完整性校验和纠错的编解码方法,其特征在于:由dna完整性编码算法和dna完整性解码算法两部分组成,包含如下步骤:8.1)所述dna完整性编码算法在编码端和解码端共有的共享参数下,利用密码子简并性,将待进行完整性保护的dna序列的有效信息,投影到该dna序列中装载完整性校验信息的氨基酸编码序列中,输出嵌入了完整性校验信息的dna序列;9.2)按照dna完整性编码算法的输出合成dna序列,合成的dna序列在经过生物过程后进行测序,得到dna序列的测序结果;10.3)所述dna完整性解码算法在相同的共享系统参数下,对dna序列的测序结果进行解码,解码过程提供纠错能力,目标是在解码者所愿意承担的错误位数内,使dna完整性解码算法的输出等于dna完整性编码算法的输出,若目标无法达成,则dna序列的错误碱基位数超出解码者所愿意承担的错误位数。11.作为优选方案,所述编码端和解码端共有的共享参数分为必选参数和可选参数,所述必选参数应至少包含密码子偏倚表,所述可选参数包含密钥。12.进一步地,所述待进行完整性保护的dna序列的有效信息必须包含装载完整性校验信息的氨基酸编码序列,还能包含若干碱基序列和/或若干额外的氨基酸编码序列。13.更进一步地,所述dna完整性编码算法的输入最少包含待进行完整性保护的dna序列、装载完整性校验信息的氨基酸编码序列的位置信息;14.所述dna完整性解码算法的输入最少包含dna序列的测序结果、装载完整性校验信息的氨基酸编码序列的位置信息。15.更进一步地,所述dna完整性解码算法所提供的纠错能力支持的错误类型包括替换错误、插入错误和删除错误,纠正上述错误以碱基为最小单位。16.更进一步地,所述密码子偏倚表应规定氨基酸与其密码子之间的映射规则,应至少包括每种氨基酸由一种或几种密码子表示,表示同一种氨基酸的一种或多种密码子的数量比例关系。17.更进一步地,所述编码端和解码端共有的共享参数中如果包含可选参数密钥,且dna完整性编码算法使用了密钥,则当且仅当dna完整性解码算法使用相同的密钥才能正确解码。18.更进一步地,所述投影过程基于确定性伪随机数发生器;投影过程在大前提下嵌入完整性校验信息,该大前提保证以dna完整性编码算法的输出作为模板经生化反应得到的氨基酸序列不变。19.相对于现有技术,本发明的优点及有益效果如下:20.本发明作为一种dna序列完整性校验和纠错的编解码方法,在进行可能引入插入、删除、替换错误的生物过程前后,对需要完整性保护的dna序列分别进行dna完整性编码和dna完整性解码。编码过程在dna序列中嵌入完整性校验信息,且由于是利用密码子简并性存储完整性校验信息,不需要额外引入碱基,因此不改变依照该dna序列所合成的氨基酸序列;解码过程对dna测序结果进行完整性校验,还可以提供一定纠错能力。21.本发明以碱基为最小运算单位,支持编码的dna序列长度相对较为灵活,非是根据码距严格设计,而是根据dna序列中编码氨基酸的部分所能提供的冗余密码子,在一定误判率下依概率计算设计。22.本发明引入了基于密码函数的确定性伪随机数发生器,使得基于试错的纠错方法成为可能,纠错能力取决于dna序列中编码氨基酸的部分所能提供的冗余密码子,当dna测序结果发生少量错误时,dna完整性解码算法可发现存在错误并纠错,保证纠错后结果可通过解码算法;当发生严重错误超过算法所能提供的纠错能力时,解码算法可以报告数据严重错误。23.本发明允许密钥的引入,以使得当且仅当解码者拥有与编码者完全相同的密钥,才能正确恢复出dna序列,否则,恢复出正确dna序列应工程上不可行。附图说明24.图1为本发明实施例的流程图;25.图2为本发明实施例的编码过程整体设计示意图;26.图3为本发明实施例在编码过程中分割待进行完整性保护的dna序列的方法;27.图4为本发明实施例在编码过程中逐单元求映射值的方法;28.图5为本发明实施例在编码过程中对映射值作模加操作的方法;29.图6为本发明实施例在编码过程中利用密码子偏倚表将氨基酸投影到特定密码子的方法。具体实施方式30.为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。31.如图1所示,本发明dna序列完整性校验和纠错的编解码方法,包括以下步骤:32.步骤1:编码(完整性信息的嵌入)。dna编码者利用dna完整性编码算法,使用编码者与解码者共享的密钥key和密码子偏倚表table_codonbias,对待进行完整性保护的dna序列s0进行运算,输出嵌入了完整性校验信息的dna序列s1,见图2。33.该步骤的主要输入输出如表1所示。34.表1.步骤1编码的主要输入输出[0035][0036]在本例中,步骤1的输入符合如下形式:[0037]1)待进行完整性保护的dna序列s0。s0必须包含装载完整性校验信息的氨基酸编码序列,还可以包含若干碱基序列和(或)若干氨基酸编码序列,且各部分是否编码氨基酸,氨基酸编码部分分别是否装载完整性校验信息应作为已知条件分别标识。其中,装载完整性校验信息的氨基酸编码序列越长,误判(使含错序列通过完整性校验)的可能性越小,潜在的检错能力越强,潜在的纠错能力也越强;装载完整性校验信息的氨基酸编码序列与不装载完整性校验信息的序列可以穿插分布,也可以各自相对集中地分布;每种氨基酸或碱基应定义由互不相同且无歧义的方式表示。如在本例中提供了这样一种可供参考但不限于此的表示方法:对于非氨基酸编码部分,每个碱基用大写字母字符表示;对于氨基酸编码部分,每个氨基酸由构成它的三个连续碱基的大写字母字符表示。因此在本例提供的可供参考的表示方法下,s0的形式为一个由大写字母字符组成的字符串。记s0的碱基数为n,非氨基酸编码部分碱基数为n1,氨基酸编码部分碱基数为n2,氨基酸编码部分氨基酸数为n3,则必有n2=3*n3,n=n1+n2=n1+3*n3。[0038]2)密钥key是一段由编码者与解码者共享的秘密信息,可以采用但不限定于字符串、二进制串等,其长度可以是0也可以是任意有限长。[0039]3)密码子偏倚表table_codonbias规定了在本次编码和结果过程中编解码双方所共享的一套氨基酸与其密码子之间的映射规则,包括:[0040]①每种氨基酸可以由哪(一种或)几种密码子表示;[0041]②表示同一种氨基酸的(一种或)多种密码子的数量比例关系,该比例关系可使用整型数字、浮点数、百分比等方式表示,但不限于以上方式。[0042]事实上,对于密码子偏倚表table_codonbias,只要能够准确表达规则②,那么规则①必然亦得到准确表达。如在本例中提供了这样一种可供参考的表示方法:设某种氨基酸aa可由k种密码子codon_aa1,codon_aa2,…,codon_aak表示,整型数字int_aa1,int_aa2,…,int_aak表示它们的比例关系,记aa的模数为mod_aa,表示它们的比例关系,记aa的模数为mod_aa,[0043]在本实施例中,使用全部氨基酸编码序列作为装载完整性校验信息的载体。实际上也可以仅使用部分氨基酸编码序列作为装载完整性校验信息的载体,那么对于其它氨基酸编码序列仅看作不可变更的碱基处理即可。[0044]步骤1.1:分割待进行完整性保护的dna序列s0,记分割后dna序列为s0′,,[0045]dna编码者将s0中的装载完整性校验信息的部分和不装载完整性校验信息的部分(在本例中,由于使用全部氨基酸编码序列作为装载完整性校验信息的载体,这二者即氨基酸编码序列和非氨基酸编码序列)分别作如下处理:[0046]4)对于非氨基酸编码部分,按碱基划分,每个碱基为一个单元,用可以唯一将其确定的特定标识表示;[0047]5)对于氨基酸编码部分,每三个相邻碱基划分为一个单元,即每个氨基酸为一个单元,用可以唯一将其确定的特定标识表示。[0048]如在本例中,提供了这样一种较为简单的可供参考的表示方法示例:用大写字母字符表示碱基单元,用小写字母字符表示氨基酸单元,该示例的表示规则可参考表2。应当注意的是,可采用但不限于该表示方法,此外还可以根据兼并碱基、人造氨基酸等新兴技术的要求,方便地对该表示方法进行扩展。[0049]经过上述过程,由s0得到s0′,s0′共有(n1+n3)个单元,每个单元是一个碱基或一个氨基酸,用di来表示,i=0,1,…,n1+n3‑1,图3展示了假如依照本例给出的这种可供参考的表示方法,对于待进行完整性保护的dna序列“atgcatga…gcatct…(第一个省略号省略了部分非氨基酸编码序列;第二个省略号省略了部分氨基酸编码序列;第一个省略号及其之前的部分均为碱基序列,第二个省略号及其与第一个省略号之间的部分均为氨基酸编码序列)”,其非氨基酸编码部分依据上述方法和表2划分成a、t、g、c、a、t、g、a……等共n1个单元,其氨基酸编码部分依据上述规则和表2划分成a、s……等共n3个单元。[0050]表2.氨基酸和碱基的编码方式[0051][0052]步骤1.2:逐单元对s0′求映射值[0053]dna编码者利用映射f,使用编码者与解码者共享的密钥key和密码子偏倚表table_codonbias,对s0′中的第i个单元di进行运算得到映射值hi=f(key,i,di,n3,table_codonbias),i=0,1,2,…,n1+n3‑1,如图4所示。[0054]所述映射f,有如下特征:[0055]1)f的一个输出有n3段;[0056]2)确定性,即每组合法输入对应唯一确定的输出,对于完全相同的两组输入,两输出应完全相同;[0057]3)抗碰撞性,即任意两组不同输入,在任意相同位置输出相同的概率应尽可能小;[0058]4)f的n3段输出,任意一个段的值与s0′的所有单元有关;[0059]5)f的n3段输出,任意两段之间相关性低;[0060]6)输入至少包含位置信息(序号)i、单元内容的无歧义表示di、长度n3和密码子偏倚表table_codonbias,其中table_codonbias为必选参数,在一次对应的编码和解码过程中应使用相同的必选参数;[0061]7)输入中应当允许可选函数的参与,也允许可选参数的缺席,并给以相应运算规则,如当key参与运算时,一方面无法通过编码前后数据反推出key的值;另一方面解码时若key未知,则计算出正确映射值应工程上不可行。[0062]如在本例中,提供了这样一种具备上述特征的可供参考的映射f:以md5、sha256、sm3等安全哈希函数或aes、sm4等强密码算法作为内核,封装为一个确定性伪随机数发生器,一方面能够生成足够的二进制序列,另一方面由于密码函数的引入,所生成序列具备确定性、抗碰撞性、与所有单元有关而与其它段相关性低的特性。将二进制序列分成每段足够长的n3段,按照s0′的氨基酸部分的每个氨基酸的模数mod_aai对每段取模,i=0,1,2,…,n3‑1。此时得到了一个n3位的序列,每一位是一个模mod_aai数。以图4为例,第1个氨基酸aa0为a,第2个氨基酸aa1为s,那么第1段为模mod_a数,第2段为模mod_s数,以此类推。记一个这样的n3段的序列为对s0′中的第i个单元di进行运算得到的映射值hi,i=0,1,2,…,n1+n3‑1,共得到(n1+n3)个映射值。[0063]还可以对上述本例提到的方法略作改变,如将所有氨基酸的模数统一为一个定值mod,那么相应密码子偏倚表table_codonbias中表示密码子比例的数字需等比计算(并取整),以适当合理牺牲比例精度的方式,方便使用统一的模mod运算进行该步映射以及后续其它计算。[0064]步骤1.3:将(n1+n3)个映射值对齐,同一位置模数相同,对应位置作模为mod_aai的模加,i=0,1,2,…,n3‑1,得到h。[0065]dna编码者将长度为n3段的映射值对齐,记s0′的氨基酸部分为那么对应每一段是一个模数,即不同位置的模数mod_aai可能相同也可能不同,取决于该位置的氨基酸种类。对齐后作每一段分别作模mod_aai加操作,记h=(h[0],h[1],…,h[n3‑1]),则有:[0066][0067]其中,表示模mod_aai加操作。以上过程如图5所示。[0068]步骤1.4:利用密码子偏倚表tαble_codonbias通过h=(h[0],h[1],…,h[n3‑1])将投影到特定的密码子。[0069]如图6所示,在本例中,此时s0′的氨基酸部分与(h[0],h[1],…,h[n3‑1])一一对应,各有n3个。前者为氨基酸的字符表示,后者h[i]是一个[0,mod_aai‑1]的数字。[0070]在本例中提供了这样一种可供参考但不限于此的方式,在密码子偏倚表table_codonbias中根据h[i]查找氨基酸di编码的特定密码子:[0071]根据di字符所代表的氨基酸,在密码子偏倚表table_codonbias中查找该氨基酸的所有密码子及其比例计算:[0072][0073]找到m使则即为所求密码子,确定性地得到其碱基字符表示[0074]按照此方法将转换成碱基字符表示形式:[0075][0076]以精氨酸为例,精氨酸在表2中的字符表示为“r”。假设密码子偏倚表中关于精氨酸的密码子偏倚使用json格式表示如下:[0077][0078]那么有精氨酸的模数mod_r=int_r_cgt+int_r_cgc+int_r_cga+int_r_cgg+int_r_aga+int_r_agg=85[0079][0080][0081][0082][0083][0084][0085][0086]假设此时对应的h[i]=77,可找到则将氨基酸的密码子确定为aga。[0087]本例提供的上述方法,可以确定性且无歧义地通过h将氨基酸映射到特定密码子,且对于每种氨基酸,其投影到的各种密码子依概率符合密码子偏倚表table_codonbias中隐含的比例分布。[0088]步骤1.5:得到纯碱基形式的嵌入了完整性校验信息的dna序列s1。[0089]纯碱基形式的嵌入完整性校验信息的dna序列纯碱基形式的嵌入完整性校验信息的dna序列经上述过程,完整性校验信息即被投影到(部分或全部)氨基酸编码序列中。[0090]步骤2:生物过程和测序。[0091]按照s1合成dna序列,对该dna序列进行一系列包括但不限于培养、扩增、存储的生物过程操作,对得到的dna序列进行测序,得到dna序列的测序结果s2。[0092]步骤2的过程可能会引入以下数据位错误中的一种或几种,错误类型、说明见表3前两行:[0093]表3.生物过程可能引入的错误类型及其还原方式[0094][0095]需要注意,由于后续解码(完整性校验)过程和纠错过程仅关注是否发生了错误以及如何恢复原有序列,而不关心发生错误的实际过程,因此对于任意一个或多个重合或不重合的位置上可能出现的相同或不同类型的错误,有的可能对于整个序列的最终结果造成变化,有的则可能无变化,有的还可以等价为其它错误过程,例如:[0096]1)在5号位置发生一个插入错误,又在5号位置发生一个删除错误,则无论先前发生的插入错误是什么,其最终结果未造成变化。在5号位置发生一个替换错误,将a替换成t,又在5号位置发生一个替换错误,将t替换成a,其最终结果未造成变化。即一个位置上发生多个错误,在解码过程中可能等价于没有错误。[0097]2)在5号位置发生一个插入错误,又在5号位置发生一个替换错误,其最终结果仍相当于仅在5号位置发生一个插入错误。即一个位置上发生多个错误,在解码过程中可能等价于发生了一个错误。[0098]3)在1‑4号位置碱基序列taaa,先在1号位置发生一个删除错误变成aaa,又在1号位置发生一个替换错误变成taa,又在3号位置发生一个插入错误变成taga,其结果相当于在3号位置发生一个替换错误。即多个不同位置上发生的不同类型的错误可能等价于发生了一个错误。[0099]4)在5号先发生一个删除错误,又在5号位置发生一个插入错误,其最终结果是否变化取决于插入错误引入的碱基与先前被删除的碱基是否相同。[0100]错误类型和具体错误过程的例子不胜枚举,需要具体情况具体分析。[0101]步骤3:解码(完整性校验和纠错)。[0102]该步骤的主要输入输出如表4所示。[0103]表4.步骤3解码的输入输出[0104][0105]dna解码者利用dna完整性解码算法,使用编码者与解码者共享的密钥key、密码子偏倚表table_codonbias和容许的最大试错代价位数max,对dna序列的测序结果s2进行运算,输出布尔型完整性校验的结果result和经过校验和纠正的dna序列的测序结果s3。[0106]步骤3.1:校验s2。[0107]调用校验方法v(s2)。校验方法v将重复步骤1,其中,输入中的“待进行完整性保护的dna序列s0”代入dna序列的测序结果s2。记输出为s1′,比较s2与s1′是否完全相等。[0108]若完全相等,则通过完整性校验,那么s2以极大概率未发生错误,以极小概率发生了错误,且完整性校验值发生了碰撞。令s3=s2,返回result=1,输出此时的s3和错误个数k(k初值为0,随进入步骤3.2的次数递增),若k≠0,另外输出还原方式c(c的生成方式在步骤3.2中描述)。[0109]若不完全相等,则无法通过完整性校验,那么s2必发生错误,进入步骤3.2。[0110]步骤3.2:纠k位错。[0111]k初始值为0,每次由步骤3.1进入步骤3.2,k的值加1(因此首次进入步骤3.2时,k=1),直到k>max。[0112]调用纠错方法t(s2,k),纠错方法t采用试错的方式穷举纠错。[0113]若k≤max,对于s2的任意k个位置(可能是重复位置)逐一假设其发生了1位表3中的任意错误,并针对该种错误类型,用表3中的试错恢复方式,对s2进行试还原,记还原方式为c,记s2试还原后的结果为s2′,代入s2′重复步骤3.1。[0114]若k>max,进入步骤3.3。[0115]步骤3.3:纠错失败。[0116]纠错失败,返回result=0,反馈实际出错位数超出容许的最大试错代价位数max。[0117]应当理解的是,本说明书未详细阐述的部分均属于现有技术;上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1