编码方法及系统、解码方法及系统、编解码方法及系统与流程

文档序号:17922121发布日期:2019-06-15 00:10阅读:172来源:国知局
编码方法及系统、解码方法及系统、编解码方法及系统与流程
本公开涉及数据处理领域,尤其涉及一种编码方法及系统、解码方法及系统、编解码方法及系统。
背景技术
:编码和解码是应用广泛的数据处理方式,其一般利用码表(包括编码表和解码表)对数据进行编码和解码。码表的大小与编码的码长密切相关,当编码码长增加时,码表的大小几乎呈指数级的增加,例如霍夫曼编码即是如此。现有的编码和解码技术都是直接存储码表。这样当编码码长较长时,其码表会非常庞大,需要大量的存储空间来存储码表,导致硬件资源消耗巨大。技术实现要素:(一)要解决的技术问题针对上述技术问题,本公开提供了一种编码方法及系统、解码方法及系统、编解码方法及系统。(二)技术方案本公开提供了一种编码方法,包括:对信源字符进行编码,得到一编码结构以及第一编码表;根据所述编码结构建立码表,并存储所述码表;选取所述第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表,存储所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于所述第一编码表所占的存储空间。本公开还提供了一种解码方法,包括:获取码表、以及与第二编码表对应的解码表,并存储所述码表和所述解码表;利用所述解码表对信源字符编码进行第一解码;若所述第一解码成功,则输出解码结果;若所述第一解码未成功,则利用所述码表对所述信源字符编码进行第二解码,并输出解码结果;其中,所述解码表和所述码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间,其中所述第一编码表可对信源字符进行编码。本公开还提供了一种编解码方法,包括:对信源字符进行编码,得到一编码结构以及第一编码表和信源字符编码;根据所述编码结构建立码表,并存储所述码表;选取所述第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表,存储所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于所述第一编码表所占的存储空间;获取所述码表、以及与所述第二编码表对应的解码表,并存储所述码表和所述解码表;利用所述解码表对所述信源字符编码进行第一解码;若所述第一解码成功,则输出解码结果;若所述第一解码未成功,则利用所述码表对所述信源字符编码进行第二解码,并输出解码结果;其中,所述解码表和所述码表所占的存储空间小于所述第一编码表所对应的解码表所占的存储空间。本公开还提供了一种编码系统,其包括:第一编码装置,用于对信源字符进行编码,得到一编码结构以及第一编码表;第二编码装置,用于根据所述编码结构建立码表;第三编码装置,用于选取所述第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表;存储装置,用于存储所述码表和所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于所述第一编码表所占的存储空间。本公开还提供了一种解码系统,包括:获取装置,用于获取码表、以及与第二编码表对应的解码表;第一解码装置,用于利用所述解码表对信源字符编码进行第一解码;判断装置,用于判断所述第一解码是否成功;输出装置,若所述第一解码成功,用于输出解码结果;第二解码装置,若所述第一解码未成功,用于利用所述码表对所述信源字符编码进行第二解码,并输出解码结果;存储装置,用于存储所述解码表和所述码表,其中,所述解码表和所述码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间,其中所述第一编码表可对信源字符进行编码。本公开还提供了一种编解码系统,包括:第一编码装置,用于对信源字符进行编码,得到一编码结构以及第一编码表和信源字符编码;第二编码装置,用于根据所述编码结构建立码表;第三编码装置,用于选取所述第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表;第一存储装置,用于存储所述码表和所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于所述第一编码表所占的存储空间;获取装置,用于获取码表、以及与第二编码表对应的解码表,并;第一解码装置,用于利用所述解码表对所述信源字符编码进行第一解码;判断装置,用于判断所述第一解码是否成功;输出装置,若所述第一解码成功,用于输出解码结果;第二解码装置,若所述第一解码未成功,用于利用所述码表对所述信源字符编码进行第二解码,并输出解码结果;第二存储装置,用于存储所述解码表和所述码表,其中,所述解码表和所述码表所占的存储空间小于所述第一编码表所对应的解码表所占的存储空间。本公开还提供了一种计算设备,包括:算力板和控制板;所述算力板和所述控制板的至少一者包括:上述编码系统、解码系统、编解码系统的至少其中之一。(三)有益效果本公开只需存储霍夫曼树状链表以及第二编码表即可完成编码,只需存储解码表和霍夫曼树状链表即可完成解码,而无需存储整个霍夫曼编码表、以及与整个霍夫曼编码表对应的解码表,大大减少了编码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾编、解码效率。附图说明图1是本公开第一实施例编码方法的流程图。图2是构建霍夫曼二叉树结构第一步的示意图。图3是构建霍夫曼二叉树结构第二步的示意图。图4是构建霍夫曼二叉树结构第三步的示意图。图5是构建霍夫曼二叉树结构第四步的示意图。图6是构建霍夫曼二叉树结构第五步的示意图。图7是霍夫曼二叉树结构的示意图。图8是构建霍夫曼树状链表的第一示意图。图9是构建霍夫曼树状链表的第二示意图。图10是本公开第二实施例解码方法的流程图。图11是本公开第二实施例解码方法的过程图。图12是本公开第三实施例编解码方法的流程图。图13是本公开第四实施例编码系统的结构示意图。图14是本公开第五实施例解码系统的结构示意图。图15是本公开第六实施例编解码系统的结构示意图。具体实施方式下面将结合实施例和实施例中的附图,对本公开实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。本公开第一实施例提供了一种编码方法,如图1所示,该编码方法包括:步骤s101:对信源字符进行编码,得到一编码结构以及第一编码表。步骤s102:根据编码结构建立码表,并存储码表。步骤s103:选取第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表,存储所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于第一编码表所占的存储空间。在本实施例中,步骤s101对信源字符进行霍夫曼编码,构建霍夫曼二叉树结构,并得到霍夫曼编码表。具体过程包括:子步骤s101a:将信源字符的出现次数按预定规则排队,该预定规则为从多到少的顺序。例如,对于8个信源字符(a、b、c、d、e、f、g和f)组成的一字符串,信源符号的长度是l=3,即信源字符的个数为2l=23=8。babacacadadabbcbabebeddabeeebbffgh统计该字符串中各个信源字符的出现次数,并将信源字符按出现次数从多到少的顺序排队,如表1所示。表1信源字符出现次数b10a8e5d4c3f2g1h1当多个信源字符的出现次数相同时,这多个信源字符之间的顺序不做限制,可以任意排列。例如g和h的排列顺序,可以如表1所示,也可以将h排在g前面。子步骤s101b:构建霍夫曼二叉树结构,将下一层的出现次数最少的两个结点的出现次数相加,作为上一层的中间结点,其中,第一层为两个叶子结点,最后一层的中间结点称为顶层结点。其中,该相加的两个结点可以是两个叶子结点、两个中间结点、一个叶子结点和一个中间结点。叶子结点是指信源字符及其对应的出现次数,中间结点是指两个结点的出现次数相加之和。在构建的过程中,在每一层重复上述过程,始终将出现次数较多的结点放在右边,直到最后一层的顶层结点,顶层结点的出现次数为字符串的信源字符个数。若霍夫曼二叉树结构的一层中包括出现次数相同的三个以上结点,可将其中任意两个结点的出现次数相加,作为该层的上一层的中间结点。例如,对于步骤s101a中的字符串,根据表1将信源字符及其对应的出现次数作为一个叶子结点,并将叶子结点从左到右一字排开,如图2所示。首先,将出现次数最少的两个叶子结点(g和h)作为最下层的结点,并将二者的出现次数相加,得到中间结点(2),得到上一层的七个结点:一个中间结点(2)和六个叶子结点(b、a、c、e、d、c、f),如图3所示。再将出现次数最少的中间结点(2)和叶子结点(f)的出现次数相加,得到中间结点(4),如图4所示。再将出现次数最少的两个叶子结点(e、d)的出现次数相加,得到中间结点(9),将叶子结点(c)和中间结点(4)的出现次数相加,得到中间结点(7),如图5所示。最后,将中间结点(12)和叶子结点(a)的出现次数相加,得到中间结点(15),将中间结点(9)和叶子结点(10)的出现次数相加,得到中间结点(19)。中间结点(15)和中间结点(19)的出现次数相加,得到顶层结点(34),如图6所示。子步骤s101c:对霍夫曼二叉树结构的结点进行编号,得到信源字符编码以及霍夫曼编码表,将霍夫曼编码表作为第一编码表。编号方法为:对于霍夫曼二叉树结构的每一个结点,如果该结点处于其上一层中间结点的左分支,则将该结点编号为0;如果该结点处于其上一层中间结点的右分支,则将该结点编号为1,顶层结点不编号,如图7所示。沿霍夫曼二叉树结构的最后一层至第一层搜索每个信源字符的路径,将该路径经过的结点编码序列作为该信源字符的霍夫曼编码,将所有信源字符按照出现次数由多至少排列,组成霍夫曼编码表。霍夫曼编码表的大小取决于信源字符编码的最大码长n,一般n>l。当信源字符编码的最大码长为n时,霍夫曼编码表包括2n条记录。如表2所示,其第一列为信源字符,第二列为信源字符编码,第三列为码长。在表2中信源字符编码的最大码长n=5。表2的每一行数据作为一条记录,每条记录包括信源字符、信源字符编码和码长。需要说明的是,表2并非完整的霍夫曼编码表,完整的霍夫曼编码表还包括冗余信息。对于最大码长n=5的霍夫曼编码表,其共有25=32条记录,为简化起见,表2去除了霍夫曼编码表中的冗余记录。表2信源字符信源字符编码码长a012b112c0003d1003e1013f00104g001105h001115在本实施例中,步骤s102根据霍夫曼二叉树结构建立霍夫曼树状链表,霍夫曼树状链表作为码表,并存储霍夫曼树状链表。步骤s101得到霍夫曼二叉树结构后,步骤s102利用该霍夫曼二叉树结构建立一个或多个霍夫曼树状链表。霍夫曼树状链表中的元素结构如表3所示。表3霍夫曼树状链表中的每个元素包含10bit数据,其中[9:9]bit为leaf_node字段(结点类型字段),该字段的含义是:若该元素对应的结点是叶子结点,则leaf_node=1:若该元素对应的结点是中间结点,则leaf_node=0。[8:0]bit为pointer字段(指针编码字段),该字段的含义是:当leaf_node=1时,pointer字段表示该叶子结点对应的信源字符;当leaf_node=0时,pointer字段表示该中间结点的左分支中间结点或叶子结点的指针,该中间结点的右分支中间结点或叶子结点的指针为pointer+1,所谓指针是指中间结点和叶子结点在存储器中的存储地址。这样,该霍夫曼树状链表可表示出霍夫曼二叉树结构的整个结构,包括结点以及结点之间的连接关系。建立霍夫曼树状链表的过程为:首先选取正整数n,且n<n。对于霍夫曼二叉树结构的第(n-n+1)层,该层的每一个中间结点对应一个霍夫曼树状链表。第(n-n+1)层的中间结点的左分支结点作为该中间结点对应的霍夫曼树状链表的首个元素,从第(n-n)层至第一层,依次将各层中间结点、各层中间结点的左分支结点和右分支结点作为霍夫曼树状链表的连续三个元素。当左分支结点和右分支结点为中间结点时,其对应的元素的leaf_node=0,pointer代表该中间结点的左分支的中间结点或叶子结点对应元素的指针。当左分支结点和右分支结点为叶子结点时,其对应的元素的leaf_node=1,pointer代表该叶子结点的信源字符。建立霍夫曼树状链表后,将霍夫曼树状链表进行存储。其中,霍夫曼树状链表在存储器中占据连续的存储空间,即霍夫曼树状链表中后一个元素的指针为前一个元素的指针+1。如果霍夫曼树状链表有多个,多个霍夫曼树状链表在存储器中也可以占据连续的存储空间,即后一个霍夫曼树状链表的首个元素的指针为前一个霍夫曼树状链表最后一个元素的指针+1。所有霍夫曼树状链表的元素总个数≤2*2l。以下以图7所示的霍夫曼二叉树结构为例,说明如何建立和存储霍夫曼树状链表。在该示例中,信源字符编码的最大码长n=5。当取正整数n=3时,如图8所示,从霍夫曼二叉树结构的第(n-n+1)层,即第3层,建立霍夫曼树状链表。第3层中只有一个中间结点(4),所以该示例只需建立一个霍夫曼树状链表。首先将第3层的中间结点(4)的左分支结点,即叶子结点(f)作为中间结点(4)对应的霍夫曼树状链表的首个元素。然后将第2层的中间结点(2)、第2层中间结点(2)的左分支叶子结点(g)和右分支叶子结点(h)作为霍夫曼树状链表的连续三个元素,至此霍夫曼树状链表建立完成。霍夫曼树状链表共包括四个元素:依次分别是叶子结点(f)、中间结点(2)、叶子结点(g)和叶子结点(h)对应的元素。存储该霍夫曼树状链表时,霍夫曼树状链表在存储器中占据连续的存储空间,即四个元素在存储空间中连续存储。霍夫曼树状链表如表4所示:表4元素指针leaf_nodepointer00001f00010001000101g00111h首个元素为叶子结点(f)对应的元素,因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是f。第二个元素为中间结点(2)对应的元素,当首个元素的指针为0000时,第二元素的指针为0001。因为该元素对应中间结点,所以其leaf_node为0,pointer存储的是其左分支叶子结点(g)对应元素的指针0010。第三个元素为叶子结点(g)对应的元素,其指针为0010。因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是g。第四个元素为叶子结点(h)对应的元素,其指针为0011。因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是h。当取正整数n=2时,如图9所示,从霍夫曼二叉树结构的第(n-n+1)层,即第4层,建立霍夫曼树状链表。第4层中有两个中间结点(7)和(9),所以该示例需建立两个霍夫曼树状链表。首先建立中间结点(7)对应的霍夫曼树状链表。将中间结点(7)的左分支结点,即叶子结点(c)作为该霍夫曼树状链表的首个元素。然后将第3层的中间结点(4)、第2层的叶子结点(f)和中间结点(2)作为霍夫曼树状链表的第二、第三个元素。再将第1层的叶子结点(g)和(h)作为霍夫曼树状链表的第四、第五个元素,至此该霍夫曼树状链表建立完成。该霍夫曼树状链表共包括六个元素:依次分别是叶子结点(c)、中间结点(4)、叶子结点(f)、中间结点(2)、叶子结点(g)和叶子结点(h)对应的元素。存储该霍夫曼树状链表时,霍夫曼树状链表在存储器中占据连续的存储空间,即六个元素在存储空间中连续存储。霍夫曼树状链表如表5所示:表5元素指针leaf_nodepointer00001c00010001000101f00110010001001g01011h然后建立中间结点(9)对应的霍夫曼树状链表。将中间结点(9)的左分支结点,即叶子结点(d)作为该霍夫曼树状链表的首个元素,将右分支结点,即叶子结点(e)作为该霍夫曼树状链表的第二个元素,至此该霍夫曼树状链表建立完成。该霍夫曼树状链表共包括两个元素:依次分别是叶子结点(d)、叶子结点(e)对应的元素。将该霍夫曼树状链表与中间结点(7)对应的霍夫曼树状链表连续存储,该霍夫曼树状链表在存储器中占据连续的存储空间,即两个元素在存储空间中连续存储。两个霍夫曼树状链表如表6所示:表6元素指针leaf_nodepointer00001c00010001000101f00110010001001g01011h01101d01111e其中,前六个元素属于中间结点(7)对应的霍夫曼树状链表,后两个元素属于中间结点(9)对应的霍夫曼树状链表。元素指针并不以表8为限(0000-0111),而是以霍夫曼树状链表在存储器中实际存储地址为准。在本实施例的步骤s103中,第一编码表的部分记录包括:霍夫曼二叉树结构的第(n-n+1)层至最后一层的所有叶子结点所对应的记录,以及第(n-n+1)层的所有中间结点所对应的记录。其中,霍夫曼二叉树结构第(n-n+1)层的叶子结点仅对应一条记录,其余层的叶子结点对应多条冗余记录。对于其余层的叶子结点,通过将其所对应的信源字符编码高位对齐,低位补充0或1得到冗余记录。冗余记录的信源字符编码位数与第(n-n+1)层的叶子节点对应的信源字符编码位数相等。建立所述码表的链接记录包括:将第(n-n+1)层中间结点所对应的记录链接至步骤s102得到的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,得到码表的链接记录。链接记录第一列为第(n-n+1)层中间结点的编码,第二列为的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,第三列为空。将第一编码表的部分记录和码表的链接记录组成一个新的编码表:第二编码表,并存储第二编码表和码表。第二编码表共包括2n条记录,n为步骤s102中的正整数n。例如,当取正整数n=3时,霍夫曼二叉树结构的第3层至最后一层包括:叶子结点(a)、(b)、(c)、(d)、(e),第3层的中间结点(4)。所以第一编码表的部分记录包括:叶子结点(c)、(d)、(e)各自对应的一条记录,以及叶子结点(a)、(b)各自对应的两条冗余记录。如表7所示。表7信源字符信源字符编码码长c0003a0102a0112d1003e1013b1102b1112链接记录包括:第3层中间结点(4)链接至其对应的霍夫曼树状链表的首个元素指针,即表4中的0000。链接记录如表8所示。表8第一编码表的部分记录和码表的链接记录组成的第二编码表如表9所示,其第一例为字符或指针,第二列为编码,第三列为码长。表9当取正整数n=2时,霍夫曼二叉树结构的第4层至最后一层包括:叶子结点(a)、(b),第3层的中间结点(7)、(9)。所以第一编码表的部分记录包括:叶子结点(a)、(b)各自对应的一条冗余记录。如表10所示。表10信源字符信源字符编码码长a012b112链接记录包括:第4层中间结点(7)和中间结点(9)链接至其对应的霍夫曼树状链表的首个元素指针,即表6中的0000和0110。链接记录如表11所示。表11第一编码表的部分记录和码表的链接记录组成的第二编码表如表12所示,其第一例为字符或指针,第二列为编码,第三列为码长。表12这样,本实施例根据霍夫曼编码结果(即霍夫曼二叉树结构)建立码表(即霍夫曼树状链表),只需存储霍夫曼树状链表(≤2*2l个元素)以及第二编码表(2n条记录)即可完成编码,相对于存储整个霍夫曼编码表(2n条记录),大大减少了编码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾编码效率。以上只是示例性的说明,本实施例并不以此为限。例如,l应根据信源字符的个数来确定。当信源字符的个数为m时,l的取值为使2m>m成立的最小的m值。对霍夫曼二叉树结构的结点进行编号时,也可以将处于上一层中间结点左分支的结点编码为1,将处于其上一层中间结点右分支的结点编码为0。n可以取小于或等于n/2的数值。本公开第二实施例提供了一种解码方法,其是与第一实施例的编码方法相对应的解码方法,利用码表和第二编码表对信源字符编码进行解码。如图10所示,该解码方法包括:步骤s201:获取码表、以及与第二编码表对应的解码表,并存储码表和解码表。步骤s202:利用解码表对信源字符编码进行第一解码。步骤s203:若第一解码成功,则输出解码结果;若第一解码未成功,则利用存储的码表对信源字符编码进行第二解码,并输出解码结果;其中,解码表和码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间。在本实施例的步骤s201中,与第二编码表相同,解码表也包括2n条记录。对于表9所示的第二编码表,解码表如表13所示,对于表12所示的第二编码表,解码表如表14所示,其第一例为编码,第二列为字符或指针,第三列为码长。“描述”部分对每条记录的含义进行了解释。表13表14在本实施例中,步骤s202利用解码表对信源字符编码的nbit符号进行第一解码,具体包括:子步骤s202a:从信源字符编码取出nbit符号;子步骤s202b:利用霍夫曼解码表对nbit符号进行第一解码。因为码长越短的信源字符,其出现次数越多。所以首先对nbit符号解码,解码成功的概率较高,可以提高解码效率。上述过程如图11所示,子步骤s202a包括:初始化步骤:在初始状态,设置寄存器bit_cnt、word_len,并将二者置为0。在第一解码和第二解码的过程中,寄存器bit_cnt用于存储缓存器dec_buf中的字符位数,寄存器word_len用于存储解码结果的码长,即解码出的信源字符对应的编码码字的长度。信源字符编码组成的字符串存储于fifo存储器中。取码步骤:从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k。图11中所述k取64。取出步骤:从缓存器dec_buf取出nbit符号。图11中取出4bit符号。在本实施例中,步骤s203首先判断步骤s202的第一解码是否成功,若第一解码成功,则直接输出解码结果;若第一解码未成功,则利用霍夫曼树状链表继续对信源字符编码的nbit字符进行第二解码。如果步骤s202的第一解码成功,那么一个时钟周期解码即可结束。本实施例在输出解码结果后,还包括如下步骤:首先,获取被解码信源字符对应的编码码字的长度,将编码码字的长度赋予寄存器word_len。缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。判断寄存器bit_cnt的值是否小于k,如果是,则返回子步骤s202a,从取码步骤开始执行,再次进行第一解码。如果否,则返回子步骤s202a,从取出步骤开始执行再次进行第一解码。其中,k<k。在图11中,所述k取16。本实施例利用霍夫曼树状链表对信源字符编码进行第二解码具体包括:解码步骤和更新步骤。解码步骤读取霍夫曼树状链表,利用霍夫曼树状链表对nbit符号进行解码,在图11中,首先对4bit符号进行解码。该步骤需要获得初始链表指针,并读取链表信息。解码步骤具体包括:初始化子步骤:从解码表获取码表的指针,该指针为霍夫曼树状链表的首个元素指针;寄存器word_len=n。搜索子步骤:从缓存器dec_buf再取出1bit符号;更新寄存器word_len,word_len=word_len+1;更新所述指针,指针=指针+再取出的1bit符号;查找码表中所述指针对应的元素。判断子步骤:判断所述指针对应的元素的leaf_node字段是否为1,如果是1,则解码成功,如果leaf_node字段是否为0,则解码不成功。输出子步骤:如果解码成功,所述指针对应的元素的pointer字段存储的信源字符作为解码结果,并输出该解码结果。与第一解码类似,输出该解码结果后还包括如下步骤:缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。判断寄存器bit_cnt的值是否小于k,如果是,则返回子步骤s202a,从取码步骤开始执行,再次进行第一解码。如果否,则返回子步骤s202a,从取出步骤开始执行再次进行第一解码。更新步骤:如果解码不成功,更新所述指针,指针=指针+1;返回上述搜索子步骤,并从上述搜索子步骤开始再次执行解码步骤的各个子步骤,直至解码成功。例如,对于字符串“0100000110”,利用表13所示的解码表和表4所示的码表进行解码的过程如下:首先进行第一解码。n取3,所以先从缓存器dec_buf获取前3bit字符:“010”。查找解码表,第一解码成功得到“a”,根据码长word_len=2,缓存器dec_buf左移2bit。再次从缓存器dec_buf获取3bit字符:“000”。查找解码表,第一解码成功得到“c”,根据码长word_len=3,缓存器dec_buf左移3bit。再次从缓存器dec_buf获取3bit字符:“001”。查找解码表,第一解码不成功。接下来进行第二解码,寄存器word_len=3。从解码表中获取“001”对应的码表的首个元素的指针x(0000)。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=3+1=4;更新所述指针,指针=0000+1=0001;查找指针0001对应的元素(表4中第二行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0001+1=0010。从缓存器dec_buf再取出1bit符号:“0”,更新寄存器word_len,word_len=4+1=5;更新所述指针,指针=0010+0=0010;查找指针0010对应的元素(表4中第三行的元素)。由于该元素的leaf_node=l,判断第二解码成功,得到“g”。输出该解码结果后缓存器dec_buf平移寄存器word_len=5位,并将寄存器bit_cnt的值减去寄存器word_len=5。字符串“0100000110”的解码结果即为“acg”。对于字符串“0100000110”,还可以利用表14所示的解码表和表6所示的码表进行解码,过程如下:首先进行第一解码。n取2,所以先从缓存器dec_buf获取前2bit字符:“01”。查找解码表,第一解码成功得到“a”,根据码长word_len=2,缓存器dec_buf左移2bit。再次从缓存器dec_buf获取2bit字符:“00”。查找解码表,第一解码不成功。接下来进行第二解码,寄存器word_len=2。从解码表中获取“00”对应的码表的首个元素的指针x0(0000)。从缓存器dec_buf再取出1bit符号:“0”;更新寄存器word_len,word_len=2+1=3;更新所述指针,指针=0000+0=0000;查找指针0000对应的元素(表6中第一行的元素)。由于该元素的leaf_node=1,判断第二解码成功,得到“c”。输出该解码结果后缓存器dec_buf平移寄存器word_len=3位,并将寄存器bit_cnt的值减去寄存器word_len=5。再次进行第一解码,再次从缓存器dec_buf获取2bit字符:“00”。查找解码表,第一解码不成功。接下来再进行第二解码,寄存器word_len=2。从解码表中获取“00”对应的码表的首个元素的指针x0(0000)。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=2+1=3;更新所述指针,指针=0000+1=0001;查找指针0001对应的元素(表6中第二行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0001+1=0010。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=3+1=4;更新所述指针,指针=0010+1=0011;查找指针0011对应的元素(表6中第四行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0011+1=0100。从缓存器dec_buf再取出1bit符号:“0”;更新寄存器word_len,word_len=4+1=5;更新所述指针,指针=0100+0=0100;查找指针0100对应的元素(表6中第五行的元素)。由于该元素的leaf_node=l,判断第二解码成功,得到“g”。输出该解码结果后缓存器dec_buf平移寄存器word_len=5位,并将寄存器bit_cnt的值减去寄存器word_len=5。字符串“0100000110”的解码结果仍为“acg”。这样,本实施例的解码方法,只需存储解码表(2n条记录)和霍夫曼树状链表(≤2*2l个元素),而无需存储与整个霍夫曼编码表对应的解码表(2n条记录),大大减少了解码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾解码效率。本公开第三实施例提供了一种编解码方法。如图12所示,该编解码方法包括:步骤s301:对信源字符进行编码,得到一编码结构以及第一编码表和信源字符编码。步骤s302:根据编码结构建立码表,并存储码表。步骤s303:选取第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表,存储所述第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于第一编码表所占的存储空间。步骤s304:获取码表、以及与第二编码表对应的解码表,并存储码表和解码表。步骤s305:利用解码表对信源字符编码进行第一解码。步骤s306:若第一解码成功,则输出解码结果;若第一解码未成功,则利用存储的码表对信源字符编码进行第二解码,并输出解码结果;其中,解码表和码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间。在本实施例中,步骤s301对信源字符进行霍夫曼编码,构建霍夫曼二叉树结构,并得到霍夫曼编码表。具体过程包括:子步骤s301a:将信源字符的出现次数按预定规则排队,该预定规则为从多到少的顺序。例如,对于8个信源字符(a、b、c、d、e、f、g和f)组成的一字符串,信源符号的长度是l=3,即信源字符的个数为2l=23=8。babacacadadabbcbabebeddabeeebbffgh统计该字符串中各个信源字符的出现次数,并将信源字符按出现次数从多到少的顺序排队,如表15所示。表15信源字符出现次数b10a8e5d4c3f2g1h1当多个信源字符的出现次数相同时,这多个信源字符之间的顺序不做限制,可以任意排列。例如g和h的排列顺序,可以如表1所示,也可以将h排在g前面。子步骤s301b:构建霍夫曼二叉树结构,将下一层的出现次数最少的两个结点的出现次数相加,作为上一层的中间结点,其中,第一层为两个叶子结点,最后一层的中间结点称为顶层结点。其中,该相加的两个结点可以是两个叶子结点、两个中间结点、一个叶子结点和一个中间结点。叶子结点是指信源字符及其对应的出现次数,中间结点是指两个结点的出现次数相加之和。在构建的过程中,在每一层重复上述过程,始终将出现次数较多的结点放在右边,直到最后一层的顶层结点,顶层结点的出现次数为字符串的信源字符个数。若霍夫曼二叉树结构的一层中包括出现次数相同的三个以上结点,可将其中任意两个结点的出现次数相加,作为该层的上一层的中间结点。例如,对于步骤s301a中的字符串,根据表15将信源字符及其对应的出现次数作为一个叶子结点,并将叶子结点从左到右一字排开,如图2所示。首先,将出现次数最少的两个叶子结点(g和h)作为最下层的结点,并将二者的出现次数相加,得到中间结点(2),得到上一层的七个结点:一个中间结点(2)和六个叶子结点(b、a、c、e、d、c、f),如图3所示。再将出现次数最少的中间结点(2)和叶子结点(f5)的出现次数相加,得到中间结点(4),如图4所示。再将出现次数最少的两个叶子结点(e、d)的出现次数相加,得到中间结点(9),将叶子结点(c)和中间结点(4)的出现次数相加,得到中间结点(7),如图5所示。最后,将中间结点(12)和叶子结点(a)的出现次数相加,得到中间结点(15),将中间结点(9)和叶子结点(10)的出现次数相加,得到中间结点(19)。中间结点(15)和中间结点(19)的出现次数相加,得到顶层结点(34),如图6所示。子步骤s301c:对霍夫曼二叉树结构的结点进行编号,得到霍夫曼编码表,将霍夫曼编码表作为第一编码表。编号方法为:对于霍夫曼二叉树结构的每一个结点,如果该结点处于其上一层中间结点的左分支,则将该结点编号为0;如果该结点处于其上一层中间结点的右分支,则将该结点编号为1,顶层结点不编号,如图7所示。沿霍夫曼二叉树结构的最后一层至第一层搜索每个信源字符的路径,将该路径经过的结点编码序列作为该信源字符的霍夫曼编码,将所有信源字符按照出现次数由多至少排列,组成霍夫曼编码表。霍夫曼编码表的大小取决于信源字符编码的最大码长n,一般n>l。当信源字符编码的最大码长为n时,霍夫曼编码表包括2n条记录。如表16所示,其第一列为信源字符,第二列为信源字符编码,第三列为码长。在表16中信源字符编码的最大码长n=5。表16的每一行数据作为一条记录,每条记录包括信源字符、信源字符编码和码长。需要说明的是,表16并非完整的霍夫曼编码表,完整的霍夫曼编码表还包括冗余信息。对于最大码长n=5的霍夫曼编码表,其共有25=32条记录,为简化起见,表16去除了霍夫曼编码表中的冗余记录。表16信源字符信源字符编码码长a012b112c0003d1003e1013f00104g001105h001115在本实施例中,步骤s302根据霍夫曼二叉树结构建立霍夫曼树状链表,霍夫曼树状链表作为码表,并存储霍夫曼树状链表。步骤s301得到霍夫曼二叉树结构后,步骤s302利用该霍夫曼二叉树结构建立一个或多个霍夫曼树状链表。霍夫曼树状链表中的元素结构如表17所示。表17霍夫曼树状链表中的每个元素包含10bit数据,其中[9:9]bit为leaf_node字段(结点类型字段),该字段的含义是:若该元素对应的结点是叶子结点,则leaf_node=1:若该元素对应的结点是中间结点,则leaf_node=0。[8:0]bit为pointer字段(指针编码字段),该字段的含义是:当leaf_node=1时,pointer字段表示该叶子结点对应的信源字符;当leaf_node=0时,pointer字段表示该中间结点的左分支中间结点或叶子结点的指针,该中间结点的右分支中间结点或叶子结点的指针为pointer+1,所谓指针是指中间结点和叶子结点在存储器中的存储地址。这样,该霍夫曼树状链表可表示出霍夫曼二叉树结构的整个结构,包括结点以及结点之间的连接关系。建立霍夫曼树状链表的过程为:首先选取正整数n,且n<n。对于霍夫曼二叉树结构的第(n-n+1)层,该层的每一个中间结点对应一个霍夫曼树状链表。第(n-n+1)层的中间结点的左分支结点作为该中间结点对应的霍夫曼树状链表的首个元素,从第(n-n)层至第一层,依次将各层中间结点、各层中间结点的左分支结点和右分支结点作为霍夫曼树状链表的连续三个元素。当左分支结点和右分支结点为中间结点时,其对应的元素的leaf_node=0,pointer代表该中间结点的左分支的中间结点或叶子结点对应元素的指针。当左分支结点和右分支结点为叶子结点时,其对应的元素的leaf_node=1,pointer代表该叶子结点的信源字符。建立霍夫曼树状链表后,将霍夫曼树状链表进行存储。其中,霍夫曼树状链表在存储器中占据连续的存储空间,即霍夫曼树状链表中后一个元素的指针为前一个元素的指针+1。如果霍夫曼树状链表有多个,多个霍夫曼树状链表在存储器中也可以占据连续的存储空间,即后一个霍夫曼树状链表的首个元素的指针为前一个霍夫曼树状链表最后一个元素的指针+1。所有霍夫曼树状链表的元素总个数≤2*2l。以下以图7所示的霍夫曼二叉树结构为例,说明如何建立和存储霍夫曼树状链表。在该示例中,信源字符编码的最大码长n=5。当取正整数n=3时,如图8所示,从霍夫曼二叉树结构的第(n-n+1)层,即第3层,建立霍夫曼树状链表。第3层中只有一个中间结点(4),所以该示例只需建立一个霍夫曼树状链表。首先将第3层的中间结点(4)的左分支结点,即叶子结点(f)作为中间结点(4)对应的霍夫曼树状链表的首个元素。然后将第2层的中间结点(2)、第2层中间结点(2)的左分支叶子结点(g)和右分支叶子结点(h)作为霍夫曼树状链表的连续三个元素,至此霍夫曼树状链表建立完成。霍夫曼树状链表共包括四个元素:依次分别是叶子结点(f)、中间结点(2)、叶子结点(g)和叶子结点(h)对应的元素。存储该霍夫曼树状链表时,霍夫曼树状链表在存储器中占据连续的存储空间,即四个元素在存储空间中连续存储。霍夫曼树状链表如表18所示:表18元素指针leaf_nodepointer00001f00010001000101g00111h首个元素为叶子结点(f)对应的元素,因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是f。第二个元素为中间结点(2)对应的元素,当首个元素的指针为0000时,第二元素的指针为0001。因为该元素对应中间结点,所以其leaf_node为0,pointer存储的是其左分支叶子结点(g)对应元素的指针0010。第三个元素为叶子结点(g)对应的元素,其指针为0010。因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是g。第四个元素为叶子结点(h)对应的元素,其指针为0011。因为该元素对应叶子结点,所以其leaf_node为1,pointer存储的是h。当取正整数n=2时,如图9所示,从霍夫曼二叉树结构的第(n-n+1)层,即第4层,建立霍夫曼树状链表。第4层中有两个中间结点(7)和(9),所以该示例需建立两个霍夫曼树状链表。首先建立中间结点(7)对应的霍夫曼树状链表。将中间结点(7)的左分支结点,即叶子结点(c)作为该霍夫曼树状链表的首个元素。然后将第3层的中间结点(4)、第2层的叶子结点(f)和中间结点(2)作为霍夫曼树状链表的第二、第三个元素。再将第1层的叶子结点(g)和(h)作为霍夫曼树状链表的第四、第五个元素,至此该霍夫曼树状链表建立完成。该霍夫曼树状链表共包括六个元素:依次分别是叶子结点(c)、中间结点(4)、叶子结点(f)、中间结点(2)、叶子结点(g)和叶子结点(h)对应的元素。存储该霍夫曼树状链表时,霍夫曼树状链表在存储器中占据连续的存储空间,即六个元素在存储空间中连续存储。霍夫曼树状链表如表19所示:表19元素指针leaf_nodepointer00001c00010001000101f00110010001001g01011h然后建立中间结点(9)对应的霍夫曼树状链表。将中间结点(9)的左分支结点,即叶子结点(d)作为该霍夫曼树状链表的首个元素,将右分支结点,即叶子结点(e)作为该霍夫曼树状链表的第二个元素,至此该霍夫曼树状链表建立完成。该霍夫曼树状链表共包括两个元素:依次分别是叶子结点(d)、叶子结点(e)对应的元素。将该霍夫曼树状链表与中间结点(7)对应的霍夫曼树状链表连续存储,该霍夫曼树状链表在存储器中占据连续的存储空间,即两个元素在存储空间中连续存储。两个霍夫曼树状链表如表20所示:表20元素指针leaf_nodepointer00001c00010001000101f00110010001001g01011h01101d01111e其中,前六个元素属于中间结点(7)对应的霍夫曼树状链表,后两个元素属于中间结点(9)对应的霍夫曼树状链表。元素指针并不以表8为限(0000-0111),而是以霍夫曼树状链表在存储器中实际存储地址为准。在本实施例的步骤s303中,第一编码表的部分记录包括:霍夫曼二叉树结构的第(n-n+1)层至最后一层的所有叶子结点所对应的记录,以及第(n-n+1)层的所有中间结点所对应的记录。其中,霍夫曼二叉树结构第(n-n+1)层的叶子结点仅对应一条记录,其余层的叶子结点对应多条冗余记录。对于其余层的叶子结点,通过将其所对应的信源字符编码高位对齐,低位补充0或1得到冗余记录。冗余记录的信源字符编码位数与第(n-n+1)层的叶子节点对应的信源字符编码位数相等。建立所述码表的链接记录包括:将第(n-n+1)层中间结点所对应的记录链接至步骤s302得到的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,得到码表的链接记录。链接记录第一列为第(n-n+1)层中间结点的编码,第二列为的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,第三列为空。将第一编码表的部分记录和码表的链接记录组成一个新的编码表:第二编码表,并存储第二编码表和码表。第二编码表共包括2n条记录,n为步骤s302中的正整数n。例如,当取正整数n=3时,霍夫曼二叉树结构的第3层至最后一层包括:叶子结点(a)、(b)、(c)、(d)、(e),第3层的中间结点(4)。所以第一编码表的部分记录包括:叶子结点(c)、(d)、(e)各自对应的一条记录,以及叶子结点(a)、(b)各自对应的两条冗余记录。如表21所示。表21信源字符信源字符编码码长c0003a0102a0112d1003e1013b1102b1112链接记录包括:第3层中间结点(4)链接至其对应的霍夫曼树状链表的首个元素指针,即表18中的0000。链接记录如表22所示。表22第一编码表的部分记录和码表的链接记录组成的第二编码表如表23所示,其第一例为字符或指针,第二列为编码,第三列为码长。表23当取正整数n=2时,霍夫曼二叉树结构的第4层至最后一层包括:叶子结点(a)、(b),第3层的中间结点(7)、(9)。所以第一编码表的部分记录包括:叶子结点(a)、(b)各自对应的一条冗余记录。如表24所示。表24信源字符信源字符编码码长a012b112链接记录包括:第4层中间结点(7)和中间结点(9)链接至其对应的霍夫曼树状链表的首个元素指针,即表20中的0000和0110。链接记录如表25所示。表25第一编码表的部分记录和码表的链接记录组成的第二编码表如表26所示,其第一例为字符或指针,第二列为编码,第三列为码长。表26字符或指针编码码长x000-a012x110-b112这样,本实施例根据霍夫曼编码结果(即霍夫曼二叉树结构)建立码表(即霍夫曼树状链表),只需存储霍夫曼树状链表(≤2*2l个元素)以及第二编码表(2n条记录)即可完成编码,相对于存储整个霍夫曼编码表(2n条记录),大大减少了编码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾编码效率。以上只是示例性的说明,本实施例并不以此为限。例如,l应根据信源字符的个数来确定。当信源字符的个数为m时,l的取值为使2m>m成立的最小的m值。对霍夫曼二叉树结构的结点进行编号时,也可以将处于上一层中间结点左分支的结点编码为1,将处于其上一层中间结点右分支的结点编码为0。n可以取小于或等于n/2的数值。在本实施例的步骤s304中,与第二编码表相同,解码表也包括2n条记录。对于表23所示的第二编码表,解码表如表27所示,对于表26所示的第二编码表,解码表如表28所示,其第一例为编码,第二列为字符或指针,第三列为码长。“描述”部分对每条记录的含义进行了解释。表27表28在本实施例中,步骤s305利用解码表对信源字符编码的nbit符号进行第一解码,具体包括:子步骤s305a:从信源字符编码取出nbit符号;子步骤s305b:利用霍夫曼解码表对nbit符号进行第一解码。因为码长越短的信源字符,其出现次数越多。所以首先对nbit符号解码,解码成功的概率较高,可以提高解码效率。上述过程如图11所示,子步骤s305a包括:初始化步骤:在初始状态,设置寄存器bit_cnt、word_len,并将二者置为0。在第一解码和第二解码的过程中,寄存器bit_cnt用于存储缓存器dec_buf中的字符位数,寄存器word_len用于存储解码结果的码长,即解码出的信源字符对应的编码码字的长度。信源字符编码组成的字符串存储于fifo存储器中。取码步骤:从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k。图11中所述k取64。取出步骤:从缓存器dec_buf取出nbit符号。图11中取出4bit符号。在本实施例中,步骤s306首先判断步骤s305的第一解码是否成功,若第一解码成功,则直接输出解码结果;若第一解码未成功,则利用霍夫曼树状链表继续对信源字符编码的nbit字符进行第二解码。如果步骤s305的第一解码成功,那么一个时钟周期解码即可结束。本实施例在输出解码结果后,还包括如下步骤:首先,获取被解码信源字符对应的编码码字的长度,将编码码字的长度赋予寄存器word_len。缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。判断寄存器bit_cnt的值是否小于k,如果是,则返回子步骤s305a,从取码步骤开始执行,再次进行第一解码。如果否,则返回子步骤s305a,从取出步骤开始执行再次进行第一解码。其中,k<k。在图11中,所述k取16。本实施例利用霍夫曼树状链表对信源字符编码进行第二解码具体包括:解码步骤和更新步骤。解码步骤读取霍夫曼树状链表,利用霍夫曼树状链表对nbit符号进行解码,在图11中,首先对4bit符号进行解码。该步骤需要获得初始链表指针,并读取链表信息。解码步骤具体包括:初始化子步骤:从解码表获取码表的指针,该指针为霍夫曼树状链表的首个元素指针;寄存器word_len=n。搜索子步骤:从缓存器dec_buf再取出1bit符号;更新寄存器word_len,word_len=word_len+1;更新所述指针,指针=指针+再取出的1bit符号;查找码表中所述指针对应的元素。判断子步骤:判断所述指针对应的元素的leaf_node字段是否为1,如果是1,则解码成功,如果leaf_node字段是否为0,则解码不成功。输出子步骤:如果解码成功,所述指针对应的元素的pointer字段存储的信源字符作为解码结果,并输出该解码结果。与第一解码类似,输出该解码结果后还包括如下步骤:缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。判断寄存器bit_cnt的值是否小于k,如果是,则返回子步骤s305a,从取码步骤开始执行,再次进行第一解码。如果否,则返回子步骤s305a,从取出步骤开始执行再次进行第一解码。更新步骤:如果解码不成功,更新所述指针,指针=指针+1;返回上述搜索子步骤,并从上述搜索子步骤开始再次执行解码步骤的各个子步骤,直至解码成功。例如,对于字符串“0100000110”,利用表27所示的解码表和表18所示的码表进行解码的过程如下:首先进行第一解码。n取3,所以先从缓存器dec_buf获取前3bit字符:“010”。查找解码表,第一解码成功得到“a”,根据码长word_len=2,缓存器dec_buf左移2bit。再次从缓存器dec_buf获取3bit字符:“000”。查找解码表,第一解码成功得到“c”,根据码长word_len=3,缓存器dec_buf左移3bit。再次从缓存器dec_buf获取3bit字符:“001”。查找解码表,第一解码不成功。接下来进行第二解码,寄存器word_len=3。从解码表中获取“001”对应的码表的首个元素的指针x(0000)。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=3+1=4;更新所述指针,指针=0000+1=0001;查找指针0001对应的元素(表18中第二行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0001+1=0010。从缓存器dec_buf再取出1bit符号:“0”,更新寄存器word_len,word_len=4+1=5;更新所述指针,指针=0010+0=0010;查找指针0010对应的元素(表18中第三行的元素)。由于该元素的leaf_node=l,判断第二解码成功,得到“g”。输出该解码结果后缓存器dec_buf平移寄存器word_len=5位,并将寄存器bit_cnt的值减去寄存器word_len=5。字符串“0100000110”的解码结果即为“acg”。对于字符串“0100000110”,还可以利用表28所示的解码表和表20所示的码表进行解码,过程如下:首先进行第一解码。n取2,所以先从缓存器dec_buf获取前2bit字符:“01”。查找解码表,第一解码成功得到“a”,根据码长word_len=2,缓存器dec_buf左移2bit。再次从缓存器dec_buf获取2bit字符:“00”。查找解码表,第一解码不成功。接下来进行第二解码,寄存器word_len=2。从解码表中获取“00”对应的码表的首个元素的指针x0(0000)。从缓存器dec_buf再取出1bit符号:“0”;更新寄存器word_len,word_len=2+1=3;更新所述指针,指针=0000+0=0000;查找指针0000对应的元素(表20中第一行的元素)。由于该元素的leaf_node=1,判断第二解码成功,得到“c”。输出该解码结果后缓存器dec_buf平移寄存器word_len=3位,并将寄存器bit_cnt的值减去寄存器word_len=5。再次进行第一解码,再次从缓存器dec_buf获取2bit字符:“00”。查找解码表,第一解码不成功。接下来再进行第二解码,寄存器word_len=2。从解码表中获取“00”对应的码表的首个元素的指针x0(0000)。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=2+1=3;更新所述指针,指针=0000+1=0001;查找指针0001对应的元素(表20中第二行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0001+1=0010。从缓存器dec_buf再取出1bit符号:“1”;更新寄存器word_len,word_len=3+1=4;更新所述指针,指针=0010+1=0011;查找指针0011对应的元素(表20中第四行的元素)。由于该元素的leaf_node=0,判断第二解码不成功。更新所述指针,指针=0011+1=0100。从缓存器dec_buf再取出1bit符号:“0”;更新寄存器word_len,word_len=4+1=5;更新所述指针,指针=0100+0=0100;查找指针0100对应的元素(表20中第五行的元素)。由于该元素的leaf_node=1,判断第二解码成功,得到“g”。输出该解码结果后缓存器dec_buf平移寄存器word_len=5位,并将寄存器bit_cnt的值减去寄存器word_len=5。字符串“0100000110”的解码结果仍为“acg”。这样,本实施例的解码方法,只需存储解码表(2n条记录)和霍夫曼树状链表(≤2*2l个元素),而无需存储与整个霍夫曼编码表对应的解码表(2n条记录),大大减少了解码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾解码效率。本公开第四实施例提供了一种编码系统,如图13所示,该编码系统包括:第一编码装置,用于对信源字符进行编码,得到一编码结构以及第一编码表。第二编码装置,用于根据编码结构建立码表。第三编码装置,用于选取第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表;存储装置,用于存储码表和第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于第一编码表所占的存储空间。在本实施例中,编码系统还包括输入装置和控制装置。输入装置用于接收输入的信源字符,并将信源字符输出给第一编码装置。控制装置连接第一编码装置、第二编码装置、第三编码装置、存储装置和输入装置,用于控制各个装置的操作。第一编码装置为霍夫曼编码装置,霍夫曼编码装置对输入装置传来的信源字符进行霍夫曼编码,构建霍夫曼二叉树结构,并得到霍夫曼编码表。霍夫曼编码装置包括:排队单元,用于将信源字符的出现次数按从小到大的顺序排队。当多个信源字符的出现次数相同时,这多个信源字符之间的顺序不做限制,可以任意排列。构建单元,用于构建霍夫曼二叉树结构,将下一层的出现次数最少的两个结点的出现次数相加,作为上一层的中间结点,其中,第一层为两个叶子结点,最后一层的中间结点称为顶层结点。其中,该相加的两个结点可以是两个叶子结点、两个中间结点、一个叶子结点和一个中间结点。叶子结点是指信源字符及其对应的出现次数,中间结点是指两个结点的出现次数相加之和。在构建的过程中,在每一层重复上述过程,始终将出现次数较多的结点放在右边,直到最后一层的顶层结点,顶层结点的出现次数为字符串的信源字符个数。若霍夫曼二叉树结构的一层中包括出现次数相同的三个以上结点,可将其中任意两个结点的出现次数相加,作为该层的上一层的中间结点。编码单元,用于对霍夫曼二叉树结构的结点进行编号,得到信源字符编码以及霍夫曼编码表,将霍夫曼编码表作为第一编码表。对于霍夫曼二叉树结构的每一个结点,如果该结点处于其上一层中间结点的左分支,则将该结点编号为0;如果该结点处于其上一层中间结点的右分支,则将该结点编号为1,如图7所示。沿霍夫曼二叉树结构的最上层至最下层搜索每个信源字符的路径,将该路径经过的结点编码作为该信源字符的霍夫曼编码,将所有信源字符按照出现次数由多至少排列,组成霍夫曼编码表。霍夫曼编码表的大小取决于信源字符编码的最大码长n,一般n>l。当信源字符编码的最大码长为n时,霍夫曼编码表包括2n条记录。在本实施例中,第二编码装置根据霍夫曼二叉树结构建立霍夫曼树状链表,霍夫曼树状链表作为码表。第一编码装置将霍夫曼二叉树结构传输给第二编码装置,第二编码装置利用该霍夫曼二叉树结构建立一霍夫曼树状链表。霍夫曼树状链表中的元素结构如表29所示。表29霍夫曼树状链表中的每个元素包含10bit数据,其中[9:9]bit为leaf_node字段(结点类型字段),该字段的含义是:若该元素对应的结点是叶子结点,则leaf_node=l:若该元素对应的结点是中间结点,则leaf_node=0。[8:0]bit为pointer字段(指针编码字段),该字段的含义是:当leaf_node=l时,pointer字段表示该叶子结点对应的信源字符;当leaf_node=0时,pointer字段表示该中间结点的左分支中间结点或叶子结点的指针,该中间结点的右分支中间结点或叶子结点的指针为pointer+1,所谓指针是指中间结点和叶子结点在存储器中的存储地址。这样,该霍夫曼树状链表可表示出霍夫曼二叉树结构的整个结构,包括结点以及结点之间的连接关系。建立霍夫曼树状链表的过程为:首先选取正整数n,且n<n。对于霍夫曼二叉树结构的第(n-n+1)层,该层的每一个中间结点对应一个霍夫曼树状链表。第(n-n+1)层的中间结点的左分支结点作为该中间结点对应的霍夫曼树状链表的首个元素,从第(n-n)层至第一层,依次将各层中间结点、各层中间结点的左分支结点和右分支结点作为霍夫曼树状链表的连续三个元素。当左分支结点和右分支结点为中间结点时,其对应的元素的leaf_node=0,pointer代表该中间结点的左分支的中间结点或叶子结点对应元素的指针。当左分支结点和右分支结点为叶子结点时,其对应的元素的leaf_node=1,pointer代表该叶子结点的信源字符。建立霍夫曼树状链表后,存储装置存储霍夫曼树状链表。其中,霍夫曼树状链表在存储装置中占据连续的存储空间,即霍夫曼树状链表中后一个元素的指针为前一个元素的指针+1。如果霍夫曼树状链表有多个,多个霍夫曼树状链表在存储装置中也可以占据连续的存储空间,即后一个霍夫曼树状链表的首个元素的指针为前一个霍夫曼树状链表最后一个元素的指针+1。所有霍夫曼树状链表的元素总个数≤2*2l。第一编码装置和第二编码装置分别将霍夫曼编码表和霍夫曼树状链表发送给第三编码装置。第三编码装置用于选取霍夫曼编码表的部分记录,建立霍夫曼树状链表的链接记录,所述链接记录与所述部分记录组成第二编码表。霍夫曼编码表的部分记录包括:霍夫曼二叉树结构的第(n-n+1)层至最后一层的所有叶子结点所对应的记录,以及第(n-n+1)层的所有中间结点所对应的记录。其中,霍夫曼二叉树结构第(n-n+1)层的叶子结点仅对应一条记录,其余层的叶子结点对应多条冗余记录。对于其余层的叶子结点,通过将其所对应的信源字符编码高位对齐,低位补充0或1得到冗余记录。冗余记录的信源字符编码位数与第(n-n+1)层的叶子节点对应的信源字符编码位数相等。建立霍夫曼树状链表的链接记录包括:将第(n-n+1)层中间结点所对应的记录链接至第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,得到码表的链接记录。链接记录第一列为第(n-n+1)层中间结点的编码,第二列为的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,第三列为空。将第一编码表的部分记录和码表的链接记录组成一个新的编码表:第二编码表,并存储第二编码表。第二编码表共包括2n条记录,n为正整数。第一编码装置还可以将信源字符编码发送至存储装置,由存储装置存储信源字符编码。这样,本实施例根据霍夫曼编码结果(即霍夫曼二叉树结构)建立码表(即霍夫曼树状链表),只需存储霍夫曼树状链表(≤2*2l个元素)以及第二编码表(2n条记录)即可完成编码,相对于存储整个霍夫曼编码表(2n条记录),大大减少了编码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾编码效率。以上只是示例性的说明,本实施例并不以此为限。例如,l应根据信源字符的个数来确定。当信源字符的个数为m时,l的取值为使2m>m成立的最小的m值。对霍夫曼二叉树结构的结点进行编号时,也可以将处于上一层中间结点左分支的结点编码为1,将处于其上一层中间结点右分支的结点编码为0。n可以取小于或等于n/2的数值。所述存储装置可以是sram存储器,当然也可以是其他任何类型的存储器,例如但不限于各种易失性/非易失性存储器、光学/磁/半导体存储器等。本公开第五实施例提供了一种解码系统,其是与第四实施例的编码系统相对应的解码系统,如图14所示,该解码系统包括:获取装置,用于获取码表、以及与第二编码表对应的解码表。第一解码装置,用于利用解码表对信源字符编码进行第一解码。判断装置,用于判断所述第一解码是否成功。输出装置,若第一解码成功,用于输出解码结果。第二解码装置,若第一解码未成功,用于利用码表对信源字符编码进行第二解码,并输出解码结果。存储装置,用于存储解码表和码表,其中,解码表和码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间。解码系统还包括输入装置和控制装置。输入装置用于接收输入的信源字符编码,并将信源字符编码输出给第一解码装置。控制装置连接获取装置、存储装置、第一解码装置、判断装置、输出装置、第二解码装置,用于控制各个装置的操作。在本实施例中,与第二编码表相同,解码表也包括2n条记录。在本实施例中,第一解码装置利用霍夫曼解码表对信源字符编码的nbit符号进行第一解码。第一解码装置包括:初始化单元、寄存器bit_cnt和word_len。初始化单元用于将寄存器bit_cnt、word_len置为0。在解码过程中,寄存器bit_cnt用于存储缓存器dec_buf中的符号位数,寄存器word_len用于存储解码结果的码长,即解码出的信源字符的码长。信源字符编码组成的字符串存储于fifo存储器中。取码单元和缓存器dec_buf。取码单元用于从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k。取出单元:从缓存器dec_buf取出nbit符号。第一解码单元,利用霍夫曼解码表对nbit符号进行解码。在本实施例中,判断装置判断第一解码是否成功,若第一解码成功,输出装置输出解码结果。若第一解码未成功,第二解码装置利用霍夫曼树状链表对信源字符编码的nbit字符进行第二解码。如果第一解码单元解码成功,那么一个时钟周期解码即可结束。本实施例在输出解码结果后,解码系统还进行如下操作:第一解码装置获取被解码信源字符对应的编码码字的长度,将编码码字的长度赋予寄存器word_len。缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。第一解码装置判断寄存器bit_cnt的值是否小于k,如果是,取码单元继续从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k,再次进行第一解码。如果否,取出单元继续从缓存器dec_buf取出nbit符号,再次进行第一解码。本实施例的第二解码装置包括:初始化单元,从解码表获取码表的指针,该指针为霍夫曼树状链表的首个元素指针;寄存器word_len=n。搜索单元,从缓存器dec_buf再取出1bit符号,更新寄存器word_len,word_len=word_len+1,更新所述指针,指针=指针+再取出的1bit符号,查找码表中所述指针对应的元素。判断单元,判断所述指针对应的元素的leaf_node字段是否为1,如果是1,则解码成功,如果leaf_node字段是否为0,则解码不成功。输出单元,如果解码成功,所述指针对应的元素的pointer字段存储的信源字符作为解码结果,并输出该解码结果。与第一解码类似,输出该解码结果后解码系统还进行如下操作:缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。第二解码装置判断寄存器bit_cnt的值是否小于k,如果是,取码单元继续从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k,再次进行第一解码。如果否,取出单元继续从缓存器dec_buf取出前nbit符号,再次进行第一解码。更新单元,如果解码不成功,更新所述指针,指针=指针+1;搜索单元再次执行搜索操作,直至解码成功。这样,本实施例的解码系统,只需存储解码表(2n条记录)和霍夫曼树状链表(≤2*2l个元素),而无需存储与整个霍夫曼编码表对应的解码表(2n条记录),大大减少了解码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾解码效率。本公开第六实施例提供了一种编解码系统,如图15所示,该编解码系统包括:本公开第四实施例提供了一种编码系统,如图13所示,该编码系统包括:第一编码装置,用于对信源字符进行编码,得到一编码结构以及第一编码表和信源字符编码。第二编码装置,用于根据编码结构建立码表。第三编码装置,用于选取第一编码表的部分记录,建立所述码表的链接记录,所述链接记录与所述部分记录组成第二编码表;第一存储装置,用于存储码表和第二编码表,其中,所述第二编码表和所述码表所占的存储空间小于第一编码表所占的存储空间。获取装置,用于获取码表、以及与第二编码表对应的解码表。第一解码装置,用于利用解码表对信源字符编码进行第一解码。判断装置,用于判断所述第一解码是否成功。输出装置,若第一解码成功,用于输出解码结果。第二解码装置,若第一解码未成功,用于利用码表对信源字符编码进行第二解码,并输出解码结果。第二存储装置,用于存储解码表和码表,其中,解码表和码表所占的存储空间小于第一编码表所对应的解码表所占的存储空间。在本实施例中,编解码系统还包括第一输入装置和第一控制装置。第一输入装置用于接收输入的信源字符,并将信源字符输出给第一编码装置。第一控制装置连接第一编码装置、第二编码装置、第三编码装置、存储装置和输入装置,用于控制各个装置的操作。编解码系统还包括第二输入装置和第二控制装置。第二输入装置用于从第一存储装置读取信源字符编码,并将信源字符编码输出给第一解码装置。第二控制装置连接获取装置、第二存储装置、第一解码装置、判断装置、输出装置、第二解码装置、第二输入装置,用于控制各个装置的操作。第一编码装置为霍夫曼编码装置,霍夫曼编码装置对第一输入装置输入的信源字符进行霍夫曼编码,构建霍夫曼二叉树结构,并得到霍夫曼编码表。霍夫曼编码装置包括:排队单元,用于将信源字符的出现次数按从小到大的顺序排队。当多个信源字符的出现次数相同时,这多个信源字符之间的顺序不做限制,可以任意排列。构建单元,用于构建霍夫曼二叉树结构,将下一层的出现次数最少的两个结点的出现次数相加,作为上一层的中间结点,其中,第一层为两个叶子结点,最后一层的中间结点称为顶层结点。其中,该相加的两个结点可以是两个叶子结点、两个中间结点、一个叶子结点和一个中间结点。叶子结点是指信源字符及其对应的出现次数,中间结点是指两个结点的出现次数相加之和。在构建的过程中,在每一层重复上述过程,始终将出现次数较多的结点放在右边,直到最后一层的顶层结点,顶层结点的出现次数为字符串的信源字符个数。若霍夫曼二叉树结构的一层中包括出现次数相同的三个以上结点,可将其中任意两个结点的出现次数相加,作为该层的上一层的中间结点。编码单元,用于对霍夫曼二叉树结构的结点进行编号,得到霍夫曼编码表,将霍夫曼编码表作为第一编码表。对于霍夫曼二叉树结构的每一个结点,如果该结点处于其上一层中间结点的左分支,则将该结点编号为0;如果该结点处于其上一层中间结点的右分支,则将该结点编号为1,如图7所示。沿霍夫曼二叉树结构的最上层至最下层搜索每个信源字符的路径,将该路径经过的结点编码作为该信源字符的霍夫曼编码,将所有信源字符按照出现次数由多至少排列,组成霍夫曼编码表。霍夫曼编码表的大小取决于信源字符编码的最大码长n,一般n>l。当信源字符编码的最大码长为n时,霍夫曼编码表包括2n条记录。在本实施例中,第二编码装置根据霍夫曼二叉树结构建立霍夫曼树状链表,霍夫曼树状链表作为码表。第一编码装置将霍夫曼二叉树结构传输给第二编码装置,第二编码装置利用该霍夫曼二叉树结构建立一霍夫曼树状链表。霍夫曼树状链表中的元素结构如表30所示。表30霍夫曼树状链表中的每个元素包含10bit数据,其中[9:9]bit为leaf_node字段(结点类型字段),该字段的含义是:若该元素对应的结点是叶子结点,则leaf_node=l:若该元素对应的结点是中间结点,则leaf_node=0。[8:0]bit为pointer字段(指针编码字段),该字段的含义是:当leaf_node=l时,pointer字段表示该叶子结点对应的信源字符;当leaf_node=0时,pointer字段表示该中间结点的左分支中间结点或叶子结点的指针,该中间结点的右分支中间结点或叶子结点的指针为pointer+1,所谓指针是指中间结点和叶子结点在存储器中的存储地址。这样,该霍夫曼树状链表可表示出霍夫曼二叉树结构的整个结构,包括结点以及结点之间的连接关系。建立霍夫曼树状链表的过程为:首先选取正整数n,且n<n。对于霍夫曼二叉树结构的第(n-n+1)层,该层的每一个中间结点对应一个霍夫曼树状链表。第(n-n+1)层的中间结点的左分支结点作为该中间结点对应的霍夫曼树状链表的首个元素,从第(n-n)层至第一层,依次将各层中间结点、各层中间结点的左分支结点和右分支结点作为霍夫曼树状链表的连续三个元素。当左分支结点和右分支结点为中间结点时,其对应的元素的leaf_node=0,pointer代表该中间结点的左分支的中间结点或叶子结点对应元素的指针。当左分支结点和右分支结点为叶子结点时,其对应的元素的leaf_node=1,pointer代表该叶子结点的信源字符。建立霍夫曼树状链表后,第一存储装置存储霍夫曼树状链表。其中,霍夫曼树状链表在第一存储装置中占据连续的存储空间,即霍夫曼树状链表中后一个元素的指针为前一个元素的指针+1。如果霍夫曼树状链表有多个,多个霍夫曼树状链表在第一存储装置中也可以占据连续的存储空间,即后一个霍夫曼树状链表的首个元素的指针为前一个霍夫曼树状链表最后一个元素的指针+1。所有霍夫曼树状链表的元素总个数≤2*2l。第一编码装置和第二编码装置分别将霍夫曼编码表和霍夫曼树状链表发送给第三编码装置。第三编码装置用于选取霍夫曼编码表的部分记录,建立霍夫曼树状链表的链接记录,所述链接记录与所述部分记录组成第二编码表。霍夫曼编码表的部分记录包括:霍夫曼二叉树结构的第(n-n+1)层至最后一层的所有叶子结点所对应的记录,以及第(n-n+1)层的所有中间结点所对应的记录。其中,霍夫曼二叉树结构第(n-n+1)层的叶子结点仅对应一条记录,其余层的叶子结点对应多条冗余记录。对于其余层的叶子结点,通过将其所对应的信源字符编码高位对齐,低位补充0或1得到冗余记录。冗余记录的信源字符编码位数与第(n-n+1)层的叶子节点对应的信源字符编码位数相等。建立霍夫曼树状链表的链接记录包括:将第(n-n+1)层中间结点所对应的记录链接至第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,得到码表的链接记录。链接记录第一列为第(n-n+1)层中间结点的编码,第二列为的第(n-n+1)层中间结点对应的霍夫曼树状链表的首个元素指针,第三列为空。将第一编码表的部分记录和码表的链接记录组成一个新的编码表:第二编码表,并存储第二编码表。第二编码表共包括2n条记录,n为正整数。第一编码装置还可以将信源字符编码发送至的第一存储装置,由第一存储装置存储信源字符编码。以上只是示例性的说明,本实施例并不以此为限。例如,l应根据信源字符的个数来确定。当信源字符的个数为m时,l的取值为使2m>m成立的最小的m值。对霍夫曼二叉树结构的结点进行编号时,也可以将处于上一层中间结点左分支的结点编码为1,将处于其上一层中间结点右分支的结点编码为0。n可以取小于或等于n/2的数值。在本实施例中,与第二编码表相同,解码表也包括2n条记录。第一解码装置利用霍夫曼解码表对信源字符编码的nbit符号进行第一解码。第一解码装置包括:初始化单元、寄存器bit_cnt和word_len。初始化单元用于将寄存器bit_cnt、word_len置为0。在解码过程中,寄存器bit_cnt用于存储缓存器dec_buf中的符号位数,寄存器word_len用于存储解码结果的码长,即解码出的信源字符的码长。信源字符编码组成的字符串存储于fifo存储器中。取码单元和缓存器dec_buf。取码单元用于从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k。取出单元:从缓存器dec_buf取出nbit符号。第一解码单元,利用霍夫曼解码表对nbit符号进行解码。在本实施例中,判断装置判断第一解码是否成功,若第一解码成功,输出装置输出解码结果。若第一解码未成功,第二解码装置利用霍夫曼树状链表对信源字符编码的nbit字符进行第二解码。如果第一解码单元解码成功,那么一个时钟周期解码即可结束。本实施例在输出解码结果后,编解码系统还进行如下操作:第一解码装置获取被解码信源字符对应的编码码字的长度,将编码码字的长度赋予寄存器word_len。缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。第一解码装置判断寄存器bit_cnt的值是否小于k,如果是,取码单元继续从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k,再次进行第一解码。如果否,取出单元继续从缓存器dec_buf取出nbit符号,再次进行第一解码。本实施例的第二解码装置包括:初始化单元,从解码表获取码表的指针,该指针为霍夫曼树状链表的首个元素指针;寄存器word_len=n。搜索单元,从缓存器dec_buf再取出1bit符号,更新寄存器word_len,word_len=word_len+1,更新所述指针,指针=指针+再取出的1bit符号,查找码表中所述指针对应的元素。判断单元,判断所述指针对应的元素的leaf_node字段是否为1,如果是1,则解码成功,如果leaf_node字段是否为0,则解码不成功。输出单元,如果解码成功,所述指针对应的元素的pointer字段存储的信源字符作为解码结果,并输出该解码结果。与第一解码类似,输出该解码结果后编解码系统还进行如下操作:缓存器dec_buf平移寄存器word_len位,并将寄存器bit_cnt的值减去寄存器word_len的值。第二解码装置判断寄存器bit_cnt的值是否小于k,如果是,取码单元继续从fifo存储器中取出kbit符号存入缓存器dec_buf,并将寄存器bit_cnt的值+k,再次进行第一解码。如果否,取出单元继续从缓存器dec_buf取出前nbit符号,再次进行第一解码。更新单元,如果解码不成功,更新所述指针,指针=指针+1;搜索单元再次执行搜索操作,直至解码成功。所述第一存储装置和第二存储装置可以是sram存储器,当然也可以是其他任何类型的存储器,例如但不限于各种易失性/非易失性存储器、光学/磁/半导体存储器等。这样,本实施例的编解码系统,只需存储霍夫曼树状链表(≤2*2l个元素)以及第二编码表(2n条记录)即可完成编码,只需存储解码表(2n条记录)和霍夫曼树状链表(≤2*2l个元素)即可完成解码,而无需存储整个霍夫曼编码表、以及与整个霍夫曼编码表对应的解码表(2n条记录),大大减少了编码中所需的存储空间,可大幅降低硬件资源开销,并同时兼顾编解码效率。本公开的第七实施例提供了一种计算设备,该计算设备可以是矿机或挖矿机。计算设备包括:外壳、外壳内的算力板和控制板。算力板和控制板的至少一者包括:第四实施例的编码系统、第五实施例的解码系统、第六实施例的编解码系统的至少其中之一。其中,对于本公开的编码系统、解码系统以及编解码系统,其包含的各个装置可以分别由不同的芯片实现,也可以由同一芯片实现。这些芯片包括但不限于cpu、gpu、dsp、fpga、asic等芯片。同时,编码系统各个装置的功能可以由硬件、软件、或软硬件相结合来实现。至此,已经结合附图对本实施例进行了详细描述。依据以上描述,本领域技术人员应当对本公开有了清楚的认识。需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属
技术领域
中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换,例如:(1)实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向,并非用来限制本公开的保护范围;(2)上述实施例可基于设计及可靠度的考虑,彼此混合搭配使用或与其他实施例混合搭配使用,即不同实施例中的技术特征可以自由组合形成更多的实施例。以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1