本发明涉及数据通信技术领域,特别涉及一种数据编码方法及译码方法。
背景技术:
随着数据通信技术的快速发展,保障数据通信安全的编码译码技术也得到了快速发展;但目前的编码译码技术,还存在着功能单一的问题,例如部分目前编码译码技术仅实现了加密功能或者仅实现检错功能,又例如部分目前编码译码技术仅实现了无损压缩的功能而导致加密效果较差。当功能单一的编码译码技术应用在芯片和系统底层时,无法在保持优良加密效果的同时又能降低能耗。
技术实现要素:
本发明的目的在于至少解决现有技术中存在的技术问题之一,提供了一种数据编码方法及译码方法。
本发明的第一方面,提供了一种数据编码方法,包括以下步骤:
获取待编码的二进制序列中符号x的个数cx、归一化概率p(x)以及非归一化概率
获取所述符号x的归一化概率模型的分布函数f(x)以及非归一化概率模型的分布函数f(x,r),并在任意时刻均有f(x,r)=rf(x);
设定r0=h0=1、l0=0,所述二进制序列中第i位符号x的算术编码公式为ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri,所述r0、h0以及l0分别为算术编码公式的计算变量ri、hi以及li的初始值;所述i为循环变量;
设定rmax为所述系数r的最大阈值,
设定所述二进制序列的长度为len以及设定编码后li的值为v;当所述二进制序列中的第i位符号为符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)以及li=li-1+ri-1f(0-1,r);当所述二进制序列中的第i位符号为符号1时,则将x=1代入算术编码公式得到ri=ri-1rp(1)以及li=li-1+ri-1f(1-1,r);直至第i位符号满足i>len时,编码完成,最终输出v、c0以及c1。
根据本发明第一方面所述的一种数据编码方法,还包括:对所述二进制序列进行预处理,所述预处理包括在所述二进制序列中的每一个符号1后面添加至少一个符号0;或者包括在所述二进制序列中的每一个符号0后面添加至少一个符号1,并将所述二进制序列中的所有符号进行翻转。
本发明的第二方面,提供了一种数据译码方法,包括以下步骤:
获取待译码的二进制序列中符号x的个数cx、归一化概率p(x)以及v,所述v为所述二进制序列在编码时li的值;
设定i=1、r0=h0=1、l0=0、len以及upsymbol,所述r0、h0以及l0分别为算术编码公式ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri中的计算变量ri、hi以及li的初始值;所述len为所述二进制序列的长度;所述upsymbol为所述二进制序列当前译码输出的符号,并设定upsymbol的初始值为0;所述i为循环变量;
将x=0代入公式
将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出所述二进制序列中第i位符号0的区间上标值
根据本发明第二方面所述的一种数据译码方法,还包括:若所述待译码的二进制序列在编码的过程中已对每一个符号1后面添加至少一个符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出所述二进制序列中第i位符号0的区间上标值
本发明的第三方面,提供了一种数据编码装置,包括:编码信息获取单元、第一编码单元以及第二编码单元;
所述编码信息获取单元用于获取待编码的二进制序列中符号x的个数cx、归一化概率p(x)以及非归一化概率
所述编码信息获取单元还用于获取所述符号x的归一化概率模型的分布函数f(x)以及非归一化概率模型的分布函数f(x,r),并在任意时刻均有f(x,r)=rf(x);
所述第一编码单元用于设定r0=h0=1、l0=0,所述二进制序列中第i位符号x的算术编码公式为ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri,所述r0、h0以及l0分别为算术编码公式的计算变量ri、hi以及li的初始值;所述i为循环变量;
所述第一编码单元还用于设定rmax为所述系数r的最大阈值,
所述第二编码单元用于设定所述二进制序列的长度为len以及设定编码后li的值为v;当所述二进制序列中的第i位符号为符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)以及li=li-1+ri-1f(0-1,r);当所述二进制序列中的第i位符号为符号1时,则将x=1代入算术编码公式得到ri=ri-1rp(1)以及li=li-1+ri-1f(1-1,r);直至第i位符号满足i>len时,编码完成,最终输出v、c0以及c1。
根据本发明的第三方面所述的一种数据编码装置,所述第一编码单元还用于对所述二进制序列进行预处理,所述预处理包括在所述二进制序列中的每一个符号1后面添加至少一个符号0;或者包括在所述二进制序列中的每一个符号0后面添加至少一个符号1,并将所述二进制序列中的所有符号进行翻转。
本发明的第四方面,提供了一种数据译码装置,包括:译码信息获取单元、第一译码单元以及第二译码单元;
所述译码信息获取单元用于获取待译码的二进制序列中符号x的个数cx、归一化概率p(x)以及v,所述v为所述二进制序列在编码时li的值;
所述第一译码单元用于设定i=1、r0=h0=1、l0=0、len以及upsymbol,所述r0、h0以及l0分别为算术编码公式ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri中的计算变量ri、hi以及li的初始值;所述len为所述二进制序列的长度;所述upsymbol为所述二进制序列当前译码输出的符号,并设定upsymbol的初始值为0;所述i为循环变量;
所述第一译码单元还用于将x=0代入公式
所述第二译码单元用于将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出所述二进制序列中第i位符号0的区间上标值
根据本发明第四方面所述的一种数据译码装置,
所述第二译码单元还用于若所述待译码的二进制序列在编码的过程中已对每一个符号1后面添加至少一个符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出所述二进制序列中第i位符号0的区间上标值
本发明的第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如本发明第一方面所述的一种数据编码方法和/或执行如本发明第二方面所述的一种数据译码方法。
本发明提供的一种数据编码方法及译码方法,至少具有如下有益效果:
(1)本发明通过设定系数r作用在二进制序列上,使得二进制的非归一化概率模型以及归一化概率模型均可达到实际的熵极限,实现二进制序列编码译码的无损压缩;同时r中也包含密码信息,提高了加密后强行破解的难度;
(2)本发明的应用广泛,特别是应用在芯片和系统底层时,具有极大的节能降耗的作用;
(3)在本发明中还可以对二进制序列进行预处理,在编码时,在每一个符号1后面添加至少一个符号0,在译码时,当二进制序列译码出连续的符号1后,说明译码错误;使得编码之后的二进制序列具备检错功能,从而实现无损压缩、加密以及检错功能的结合。
附图说明
下面结合附图和实施例对本发明进一步地说明;
图1为本发明实施例所提供的算术编码过程的部分结构示意图;
图2为本发明实施例所提供的一种数据编码方法的具体流程示意图;
图3为本发明实施例所提供的一种数据译码方法的具体流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
以下先对本发明中的算术编码公式进行说明:
可以理解的是,本发明可作用于离散随机序列当中,优选为二进制序列进行描述。设定二进制序列的符号x的归一化概率p(x)以及非归一化概率
于是,在任意时刻所有变量的概率之和均有如下:
当r=1时,则
设定符号x的归一化概率模型的分布函数为f(x)以及非归一化概率模型的分布函数为f(x,r),则计算出下式:
设定r0=1,l0=1,二进制序列中第i位符号x的算术编码公式如下:
li=li-1+ri-1f(x-1,r)(1-5)
在任意时刻下,当系数r=1时,则非归一化概率模型为标准模型即为归一化概率模型,
设定二进制序列中的符号0的个数为c0,符号1的个数c1,且二进制序列中每个符号1被一个符号0隔开;统计二进制序列中符号0和符号1的概率分别为
在去除二进制序列每一个符号1后面的符号0之后,再统计符号0和符号1的概率分别为
h(x)=-p′(0)log2p’(0)-p’(1)log2p’(1)=1bit(1-7)
根据公式(1-7)显然可知,归一化概率模型经压缩后的二进制长度是原二进制长度的
而非归一化概率模型的信息熵h(x,r)为:
其中
下面证明归一化概率模型无损编译码时
参照图1,图1提供了一种设定二进制序列中子串010起始于i+1时刻并使用
根据公式(1-9),设
当
因为hi=li+ri,
当二进制序列中连续出现两个符号1时,根据图1的分析,因
将
r2p(1)p(0)+rp(0)≤1(1-10)
设定ax2+bx+c=0,其中a=p(1)p(0),b=p(0),c=-1,且x>0,满足公式(1-10)的正实数根为:
因为p(1)=1-p(0),所以
令rmax为r的最大阈值,则
当系数r大于rmax时,即二进制序列在编码译码的过程中是有损的,因此系数r可以在(0,rmax]的范围内任意取值,均能实现无损压缩。
因此根据上述结论,可得出的一种数据编码的方法,具体如下:获取待编码的二进制序列中符号x的个数cx、归一化概率p(x)以及非归一化概率
获取符号x的归一化概率模型的分布函数f(x)以及非归一化概率模型的分布函数f(x,r),并在任意时刻均有f(x,r)=rf(x);
设定r0=h0=1、l0=0,二进制序列中第i位符号x的算术编码公式为ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri,r0、h0以及l0分别为算术编码公式的计算变量ri、hi以及li的初始值;i为循环变量;
设定rmax为系数r的最大阈值,
设定二进制序列的长度为len以及设定编码后li的值为v;当二进制序列中的第i位符号为符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)以及li=li-1+ri-1f(0-1,r);当二进制序列中的第i位符号为符号1时,则将x=1代入算术编码公式得到ri=ri-1rp(1)以及li=li-1+ri-1f(1-1,r);直至第i位符号满足i>len时,编码完成,最终输出v、c0以及c1。
同时根据上述结论,可得出的一种数据译码的方法,具体如下:获取待译码的二进制序列中符号x的个数cx、归一化概率p(x)以及v,v为二进制序列在编码时li的值;
设定i=1、r0=h0=1、l0=0、len以及upsymbol,r0、h0以及l0分别为算术编码公式ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri中的计算变量ri、hi以及li的初始值;len为二进制序列的长度;upsymbol为二进制序列当前译码输出的符号,并设定upsymbol的初始值为0;i为循环变量;
将x=0代入公式
将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出二进制序列中第i位符号0的区间上标值
例如:以一个
表1
其中系数r的取值为1.333333333333,因此得到编码后的结果为第29位符号的v=l29=0.211261480288;并根据解码v=0.211261480288进行译码,得到表1中译码结果。
参照图2,本发明的另一个实施例,提供一种数据编码方法,具体步骤如下:
s101、统计二进制序列中符号0的个数c0和符号1的个数c1,当c0≥c1时,输出标识sign=0,并进入步骤s102;当c0<c1时,每个符号取非,并且将c0和c1的值互换,输出标识sign=1,进入步骤s102;
s102、统计二进制序列中符号0和符号1的概率
s103、将p(0)代入公式
s104、设定r0=1,l0=0,i=1,v=0,将二进制序列的长度定为len,其中v为当前编码后li的值;
s105、编码第i位符号,若第i位符号为符号0,则进入步骤s106;若第i位符号为符号1,则跳转至步骤s107;
s106、将x=0代入公式ri=ri-1rp(x)以及公式li=li-1+ri-1f(x-1,r)中以计算ri和li的值,ri=ri-1rp(0),因f(-1)=0,得出li=li-1,并跳转至步骤s108;
s107、将x=1代入公式ri=ri-1rp(x)以及公式li=li-1+ri-1f(x-1,r)中以计算ri和li的值,ri=ri-1rp(1),因f(0)=rp(0),得出li=li-1+ri-1rp(0),并进入步骤s108;
s108、令i=i+1,若i≤len,则跳转至步骤s105;若i>len,v=llen,结束编码,最终输出v,c0,c1。
参照图3,进一步,提供一种数据译码方法,具体步骤如下:
s201、获取v,c0和c1,计算出二进制序列中符号0和符号1的概率
s202、将p(0)代入公式
s203、输入密码信息,从rmax小数点后第k+1位开始,替换成密码信息,得到r;
s204、将x=0代入公式ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri中,计算出第i位符号0的区间上标值:
s205、判断v与
s206、令i=i+1,若i≤len,则跳转至步骤s204;若i>len,进入步骤s207;
s207、删除每个符号1后面的一个符号0;若sign=1,将符号取非,译码完成;
s208、密码错误或编码后文件传输出现错误,结束译码。
可以理解的是,在本实施例中,添加的密码信息可以选择在rmax小数点后k+1位开始增加md5密码信息,编码时输入md5密码信息即可还原;还可以选择sha-1密码信息等,具体可根据实际情况选择添加合适的密码信息。可以理解的是,在每个符号1的后面添加一个符号0是对二进制序列的预处理,预处理还可以包括在每一个符号0后面添加至少一个符号1,并将二进制序列中的所有符号进行翻转,均能实现检错的目的,此处不再细述;本实施例优选在每一个符号0后面添加至少一个符号1。
在步骤s101用于确保二进制序列中符号0的数量大于或等于符号1的数量;步骤s102用于使二进制序列存在一种规律,即每一个符号被一个符号0隔开或者被多个符号0隔开,优选被一个符号0隔开;即可在译码时判断出现连续两个以上的符号1的情况为错误译码,达到检错的目的;步骤s103中,对r进行取值的过程中添加密码信息,使得在译码时,必须输入r的密码信息才能正确译码,提高了加密效果,使用本方法的编码数据还具有无损压缩的效果。在步骤s201中,在信道中可以无误的获取到v,c0和c1的值;在步骤s208中,当连续译码出两个符号1时,则说明编码后文件传输出现了错误,因此结束译码。
综上,在二进制序列编码译码过程中,因r含密码信息,且r必须正确才能按序无损译码,所以未知密码信息的情况下无法译码;由于r的取值范围在(0,rmax]上,能使得数据编码后具备无损压缩的优点,实现了数据无损压缩和加密功能的结合,当运用在芯片和系统底层中时,具有节能的优点;同时在编码时还对二进制序列进行了预处理,即每一个符号被一个符号0隔开,使得在译码时具有检错功能,实现了数据无损压缩、加密以及检错功能的结合。
进一步,本发明的另一个实施例,提供了一种数据编码装置,包括编码信息获取单元、第一编码单元以及第二编码单元;
编码信息获取单元用于获取待编码的二进制序列中符号x的个数cx、归一化概率p(x)以及非归一化概率
第一编码单元用于设定r0=h0=1、l0=0,二进制序列中第i位符号x的算术编码公式为ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri,r0、h0以及l0分别为算术编码公式的计算变量ri、hi以及li的初始值;i为循环变量;还用于设定rmax为系数r的最大阈值,
第二编码单元用于设定二进制序列的长度为len以及设定编码后li的值为v;当二进制序列中的第i位符号为符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)以及li=li-1+ri-1f(0-1,r);当二进制序列中的第i位符号为符号1时,则将x=1代入算术编码公式得到ri=ri-1rp(1)以及li=li-1+ri-1f(1-1,r);直至第i位符号满足i>len时,编码完成,最终输出v、c0以及c1。
进一步,第一编码单元还用于对二进制序列进行预处理,预处理包括在二进制序列中的每一个符号1后面添加至少一个符号0;或者包括在二进制序列中的每一个符号0后面添加至少一个符号1,并将二进制序列中的所有符号进行翻转。
进一步,本发明的另一个实施例,提供了一种数据解码装置,包括译码信息获取单元、第一译码单元以及第二译码单元;
译码信息获取单元用于获取待译码的二进制序列中符号x的个数cx、归一化概率p(x)以及v,v为二进制序列在编码时li的值;
第一译码单元用于设定i=1、r0=h0=1、l0=0、len以及upsymbol,r0、h0以及l0分别为算术编码公式ri=ri-1rp(x)、li=li-1+ri-1f(x-1,r)以及hi=li+ri中的计算变量ri、hi以及li的初始值;len为二进制序列的长度;upsymbol为二进制序列当前译码输出的符号,并设定upsymbol的初始值为0;i为循环变量;还用于将x=0代入公式
第二译码单元用于将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出二进制序列中第i位符号0的区间上标值
进一步,第二译码单元还用于若待译码的二进制序列在编码的过程中已对每一个符号1后面添加至少一个符号0时,则将x=0代入算术编码公式得到ri=ri-1rp(0)、li=li-1+ri-1f(0-1,r)以及hi=li+ri,得出二进制序列中第i位符号0的区间上标值
进一步,本发明的另一个实施例,提供了一种计算机可读存储介质,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令用于使计算机执行例如本发明上述实施例所述的一种数据编码方法以及一种数据解码方法,例如执行以上描述的图2中的方法步骤s101至s108,图3中的方法步骤s201至s208。
通过以上的实施方式的描述,本领域技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现。本领域技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,该程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述方法的实施例的流程。其中,该存储介质可为磁碟、光盘、只读存储记忆体(readonlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。