本发明涉及一种译码方法,尤其涉及一种在awgn信道上的spinal信源信道联合译码方法。
背景技术:
传统的数字通信以香农的信源信道分离编码作为理论基础。为提高传输效率,采用信源编码将大量数据进行压缩,信源编码通常在应用层完成;为提高传输质量,采用信道编码纠正数据在传输过程中出现的错误,信道编码通常在物理层完成。因此,物理层有一个约定成俗假设,即所要传输的数据已经被压缩,没有任何冗余。与这个假设矛盾的是,大量的应用向网络注入了没有压缩的数据,例如电子邮件、网页以及没有压缩的文件等,实际网络流量中存在着大量的可压缩数据。在物理层,不同类型的数据混合在一起不易区分,处理单元非常小且无法获得足够的统计信息。因此,当前物理层技术不能充分利用数据的冗余信息来提高系统性能。
技术实现要素:
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种在awgn信道上的spinal信源信道联合译码方法,spinal码是一种接近香农极限的纠错编码,采用信源信道联合编码的译码方式,可同时实现信源压缩,信道纠错保护以及无缝码率自适应。
本发明的目的可以通过以下技术方案来实现:
一种在awgn信道上的spinal信源信道联合译码方法,包括以下步骤:
s1,采用spinal编码方法将信源发出的数据编码,通过信道发送给译码端;
s2,对于二进制等概信源(即二进制信源中比特0和比特1出现的概率相同),译码端采用最大似然法译码,对于稀疏信源发出的数据,译码端采用
所述的步骤s1具体包括以下步骤:
s11,将编码块长度为nbits的信息比特序列m=b1b2...bn划分为以k比特为单位的n/k个子信息块,即
s12,对每个子信息块
s13,以si为随机数发生器rng的种子,多批次输出生成伪随机序列,运用线性映射函数把该序列映射成cbit的编码输出,其中,rng函数由下式表示:
s14,将同一批次的所有状态值si的输出符号{x1,j,x2,j,…xi,j…xn/k,j}组成一个编码通道,其中下标i表示对应状态值si的序号,下标j表示批次的序号;
s15,将编码通道上的符号发送到信道中,当第一个通道的符号全部发送后,继续编码发送下一个通道的符号,直到发送端接收到译码端正确译码的反馈信息,或者发送端放弃本信息,发送端才停止发送符号。
所述的步骤s12中,hash函数的输入为子信息块
h:{0,1}v×{0,1}k→{0,1}v
所述的步骤s15中,对xi,j进行以下操作:
其中,p表示发送信号的平均功率,把每条编码通道上的相邻两个ui,j组成一个复信号发送到信道中。
所述的步骤s15中,每条编码通道上的数据分为多个子通道发送,每个子通道分配的数据节点互不重复。
所述的步骤s2中,最大似然法译码的过程包括:使用与编码端相同的hash函数、状态初始值和随机数发生器,在译码端完整的复现译码树,以状态初始值为根节点,顺序考虑每个子信息块的所有可能值,依次穷举,最后从根节点遍历至叶节点,计算接收到的符号与所有可能的信源比特产生的编码后符号的欧式距离,欧式距离最小的路径即为译码结果。
所述的步骤s2中,在稀疏信源的译码过程中,在译码端复现译码树的某一级开始,只保留该级节点中译码开销和最大的b条路径,后续的每一级扩展,只计算b·2k个子节点的译码开销,并继续保留最大的b条路径,以此类推,最后只保留b条路径,译码开销最大的一条路径即为译码结果。
与现有技术相比,本发明具有以下优点:
(1)针对可压缩的稀疏信源,将压缩过程融入至spinal联合信源信道编码中,与传统的信源信道分离编码相比,信源信道联合编码可获得更高的频谱效率。
(2)传统的spinal编译码对二进制等概信源先经过信源编码进行压缩,再通过传统的信道编码发送,本发明提出的译码算法将信源压缩融入至传统spinal编译码过程中,考虑了传统的数字通信没有考虑到的物理层数据存在冗余的情况,在awgn信道上实现对二进制稀疏信源的信源压缩,节省了流程,适用于无线通信网络。
(3)将稀疏信源的统计信息(即
(4)步骤s15中,对发送数据进行打孔,即每条编码通道上的数据分为多个子通道发送,每个子通道分配的数据节点互不重复,可得到较为平滑的细粒度的谱效率。
(5)在稀疏信源的译码过程中,在译码端复现译码树的某一级开始,只保留该级节点中译码开销和最大的b条路径,后续的每一级扩展,只计算b·2k个子节点的译码开销,并继续保留最大的b条路径。在不影响译码性能的情况下,降低了译码复杂度。
附图说明
图1为本实施例spinal编码图;
图2为本实施例spinal星座图;
图3为本实施例数据发送的打孔过程示意图;
图4为本实施例译码过程示意图;
图5为本发明流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例
为实现spinal联合信源信道译码,本发明通过以下技术方案来实现,主要包括以下步骤:
1)spinal编译码的核心思想是使用与卷积码类似的结构,通过引入hash函数对输入比特序列进行散列随机编码。如图1所示,具体步骤如下:
11)将编码块长度为nbits的信息比特序列m=b1b2...bn划分为以k比特为单位的n/k个子信息块,即
12)每个子信息块
h:{0,1}v×{0,1}k→{0,1}v
13)信息编码后共有n/k个状态,以si(0<i≤n/k)为随机数发生器(randomnumbergenerator,rng)的种子,多批次输出生成伪随机序列,运用线性映射函数把该序列映射成cbit的编码输出。其中,rng函数由下式表示:
14)xi,j(i表示以第i个spine值si为种子,j为符号的批次序号),所有si对应同一批次的输出符号{x1,j,x2,j,…xi,j…xn/k,j}组成一个编码通道。
15)为了减小发送信号的功率,对xi,j做如下操作:
其中,p表示发送信号的平均功率。把每条编码通道上的相邻两个ui,j分配给i路和q路组成一个复信号直接发送到信道中。调制后的spinal星座图如图2所示。
16)spinal是无码率码,可持续地产生足够多个调制符号发送。当一个通道的编码结束发送出去后,继续编码发送下一个通道,直到发送端接收到译码端正确译码的反馈信息,或者发送端放弃本信息,发送端才停止发送符号。
17)为了得到较为平滑的细粒度的谱效率,spinal对发送数据进行打孔,即每条编码通道上的符号不是连续发送而是可以每隔几个符号发送一个。具体的打孔方案如下:
171)打孔的大致思想是:发送端非连续的发送一条通道的每一个节点的符号,而是把每条通道分成多个子通道来发送。
172)图3显示了具体的打孔过程。将每条通道分成8条子通道。在每条子通道中,只有黑色的节点才会被发送。灰色的节点表示已经发送过的符号。当接收到译码端正确译码的反馈信息后,剩下的子通道将不会再被发送。
2)对于信源等概数据,spinal的译码采用最大似然(maximumlikelihood,ml)译码,通过使用与编码端相同的初始值s0,hash函数h和rng可以在译码端完整的复现译码树,以s0为根节点,顺序的考虑
21)采用
p(x|y)=p(x)·p(y|x)
等式两边取对数,得,
其中,
22)为了降低复杂度,从译码树的某一级开始(设为第d级),只保留该级节点中译码开销和最大的b条路径,后续的每一级扩展,只计算b·2k个子节点的译码开销,并继续保留最大的b条路径,以此类推,最后只保留b条路径,译码开销最大的一条路径即为译码结果,如图4所示。
以下提供本发明的一个实例:信源码长256比特,呈不等概分布,p(1)=0.1,p(0)=0.9,k=4,c=6,v=32,b=256。
编码过程,具体步骤如下:
步骤1,将256bits的信息比特序列划分为以4比特为单位的64个子信息块。
步骤2,初始状态s0置为0,将s0与第一个子信息块输入hash函数,输出状态s1,重复该过程,生成s1~s64共64个状态值。每一个状态值称为一个spine,长度为32bits。
步骤3,以每个spine值作为rng的种子,信息编码后共有64个状态si(0<i≤64),以si为rng的种子,多批次输出生成伪随机序列,运用线性映射函数把该序列映射成6比特的编码输出。
步骤4,调制模块将编码输出的6bits作为i路和q路信息调制成适于信道传输的复数信号。
二、假设发送端传输2条编码通道,spinal利用先验信息译码,具体步骤如下:
步骤1,以s0为根节点,顺序的考虑每一个子信息块24个可能的值,即0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111。
步骤2,计算第一个spine节点的先验欧式距,译码端收到第一个spine节点两个通道上的数据为y1,1和y1,2。
步骤3,将0000和s0输入hash函数,生成ss0,ss0输入rng函数,生成a1,1和a1,2。利用公式
步骤4,重复步骤3,计算0001,0010…1111等的先验欧式距。
步骤5,重复步骤2、3、4。如果超过某个spine节点后的路径数据大于256,则从中选择最大开销的256个路径,其他裁剪掉,在最终剩余的256条路径中寻找最大的一条路径,即获得译码结果。