⑴ BCJR算法的介绍
BCJR算法由贾里尼克(FredJelinek)和波尔,库克(Cocke)以及拉维夫(Raviv)设计,这是今天数字通信的最广泛的两个算法之一(另一个是维特比算法)。
⑵ 怎样使用matlb中的lteturboencode函数
tail-biting的卷积码和RM码,以及奇偶校验码,最后一个CRC码!
RM码由Reed 和Muller提出,非常适合采用大数逻辑译码,其译码运算非常简单。当然了,不是最佳译码
算法。但对RM而言,大数逻辑译码的性能损失很小。
RM码采用大数逻辑译码的缺点是:不能接收软输入。这将直接降低编码增益。
从而,在3GPP LTE协议中,上行链路的CQI信息,采用的是改进的RM码(32,O)和(20,O)。这种码的最大似然译码算法
实现的运算量很小。(其算法的详细流程,由TI提供,汇编写的,有些奇怪的指令,没看懂。)
为分组码寻找可实现的最大似然译码算法,也是纠错码研究的一个方向。比如对RM码采用类似卷积码的网格表示方法,
从而将Viterbi,BCJR等ML算法移植过来,就是基于这种考虑。
⑶ BCJR算法的算法步骤
计算前向概率
计算后向概率
基于其他信息(例如高斯白噪声的方差,二进制对称信道的位交叉概率)计算出平滑的概率。
⑷ 基于图结构应用《编码,译码器》的设计与实现 这个毕业设计应该从什么思路下手啊~~计算机专高手请指点
兄弟你这个论文有点难度了。不是随便拉拉就行了。得找专业书籍慢慢找和高人指导了。
我查到点不指导有没有用。
Turbo卷积码(TCC)是3G无线系统中所采用的前向错误校正(FEC)机制的整体部分。然而,Turbo译码器所带来的计算负担非常重,并不太适合采用传统DSP或RISC处理器实现。由于现场可编程逻辑阵列(FPGA)内在的并行结构,FPGA为解决3G基站收发器中所需要的符号速率FEC和其它计算密集的任务提供了一个高性能信号处理平台基础。
Turbo 编码
级联码方案(Concatenated coding schemes)是为了通过结合两个或更多相对简单的分量或构造模块码来获得较高的编码增益。Turbo码认为是对级联码结构的一种改进,其中采用迭代算法对相关的码序列进行译码。Turbo码是通过将两个或更多分量码应用到同一数据序列的不同交织版本上构成的。对于任何传统单分量编码,译码器的最后一级生成的都是硬判决译码数据位。为了使象Turbo码这样的级联码方案工作得更好,译码算法不应被限制为只能在译码器间传递硬判决。为最好地利用每个译码器获得的信息,译码算法必须可以实现软判决交换,而不是采用硬判决。对于采用两个分量码的系统,译码的概念是指将来自一个译码器的软判决输入到另一个译码器的输入,并将此过程重复几次以获得更好的判决,如图1所示 。
3GPP Turbo 编码器
图2为3GPP编码器。
输入数据流输入到RSC1,它为每个输入比特生成一个对等比特(Parity Bit)。输入数据还经过交织后由RSC2处理生成第二个对等比特流。
3GPP标准定义,输入块的长度在40至5114 位之间。编码器生成一个速率为1/3的包括原始输入位和两个对等位的系统码。通过打孔方法可以获得1/2编码速度的编码。递归系统编码器的实现比较直接,然而交织器则不那么简单,要比标准的卷积或块交织器复杂。
一旦将输入数据块长度K 提供给编码器以后,编码器将计算交织矩阵行数R和列数 C,并创建相应的交织数据结构。R 和 C 是数据块长度K的函数。在输入符号被加载到交织矩阵以后,那么将根据一定的顺序进行行间交换和列间交换。交换模式是根据块长度K选择的(即依赖于K)。行和列交换完成后,通过逐列读出交织矩阵数据就可以得到最终的交织序列。在数据读出时需要进行删减操作,以保证在输出中只有正确的输入符号,请注意,交织阵列包含的数据位通常比K个原始输入符号要多 ,因为R C>K。然后,新的序列经过RSC2编码生成第二个对等位流。
实现交织器的一种方法是在存储器中存储完整的交换序列。即,一旦K 给定,即调用一个初始化例程(运行在处理器上的软件例程或利用FPGA中的功能单元)生成相应的交换序列,然后将这一信息存储在存储器中。然而,这一方法需要大量的存储器。利用Virtex -E FPGA 技术提供的 4096位每块的片上存储器,将需要[5114 13/4096]=17个存储器块。
在我们的方法中,采用一个预处理引擎生成一个序列值(存储),这一序列值被存储起来,交织器地址发生器将使用这些序列值。这一硬件单元采用几个小型数据结构(素数表)来计算所需要的序列。这一准备过程需要的时钟周期数与信息块的长度成比例。例如,对于K=40的块需要280时钟周期,而对于最大块长度K=5114,则需要 5290个时钟周期。该过程只需要在块长度变化时进行。地址发生器利用这些更为紧凑的数据结构来实时生成交织地址。
3GPP Turbo 译码器
译码器包括两个MAP(最大后验概率)译码器和几个交织器。Turbo算法的优良的性能源于可以在两个MAP译码器间共享可靠性信息(extrinsic data,外数据,或称先验数据)。
在我们的设计中,MAP译码器采用的是Bahl, Cocke, Jelinek 和 Rajiv (BCJR) 算法。BCJR算法计算每个符号的最大后验对数似然率,并且是一种真正的软判决算法。考虑到数据是以块的形式传输的,因此可以在时间维中前向或反向搜索一个符号序列。对于任一序列,其出现概率都是单独符号出现概率的乘积。由于问题是线性的,因此序列概述可以利用概率的对数和来代替。
为了与一般文献中的习惯一致,我们将译码迭代的前向和反向状态概率分别利用 和 来表示。通常,BCJR算法要求在接收到整个信息后才开始解码。对于实时应用,这一限制可能太严格了。例如,3GPP Turbo译码器将需要大量存储器存储一个5114符号信息块的完全状态结构(state trellis)。对于单片FPGA设计来说,这需要的存储资源太多了。与维特比(Vitebi)算法类似,我们可以先从全零向量 O和数据{yk}(k 从 n 到 n-L) 开始反向迭代。L次反向迭代可获得非常好的 n-L近似值。只要L选择合适,最终的状态标志(state metric)就是正确的。可以利用这一性质在信息结束前就开始进行有效的位译码。
L 被称为收敛长度。其典型值大约是译码器约束长度的数倍(通常为5至10倍),并随着信噪比的降低而增加。
通常,Turbo译码算法将计算所有的 (对整块信息),将这些数值存储起来,然后在反向迭代中与反向状态概率一起用来计算新的外信息(extrinsic information,或称先验信息)。我们的设计中采用了窗口化方法。
译码过程以一个前向迭代开始,计算包含L 个接收符号的块i的 值。同时,对未来(i+1)块进行一个反向迭代(标号 )。对块i+1的反向迭代结束时,就获得了开始对块i 进行反向迭代所需要的正确的 初始向量。 与此同时对数似然函数(Lall)也在进行。 每一 和 处理过程都需要8个max* 操作 - 每个针对状态结构(tellis)中的8个结点之一。最终的对数似然计算需要14个并行max* 运算符。为了提供可接受的译码速率,在设计中采用了38个max* 功能单元。
从 C描述到FPGA设计
FPGA Turbo 编码译码器设计是利用基于C的设计和验证方法进行的,如图3所示。
算法开发阶段采用具有定点C类型的Art Library 来对定点计算的位真(bit-true)效应进行准确建模。在这一阶段考察了几种可能算法的定点性能。一旦选定正确的量化算法,就可利用A|rtDesignerPro创建一个专用DSP架构。A|rtDesignerPro的一个最强大的功能之一是可以插入和利用专用的数据通道核心(称为专用单元,ASU)。利用这些ASU加速器核心可以使我们处理Turbo译码器算法内在的计算复杂性。
A|rtDesignerPro可自动完成寄存器分配、调度和控制器生成。在Turbo编码译码器设计中, A|rtDesignerr的自动循环合并可获得最佳的;任务调度,MAP译码步骤的内部循环都只有一个周期长。
A|rtDesignerPro生成的最终结果是可综合的寄存器级(RT-level) VHDL或Verilog 描述。基于C的工具流支持FPGA专用功能。例如,可利用BlockRAM自动构造RAM,而寄存器文件也可利用分布式存储器而不是触发器来实现 。
最后,逻辑综合和Xilinx实施工具套件将RTL HDL 转换为 FPGA 配置位流。
FPGA Turbo 编码译码器实现
A|rtDesigner创建的Turbo编码器和译码器核心硬件结构包含许多专用ASU加速器。其中最重要的一个加速器完成max* 操作。max* 运算符根据下式计算两个幂值a 和 b:
max* (a,b)=ln(expc(a)+expc(b))。
如 图4所示, max* 运算是通过选择(a,b)最大值,并应用一个存储在查找表(LUT)中的校正因子近似进行的。这一近似算法非常适合利用Xilinx FPGA 实现,其中LUT是其最终基本构造单元。
结果
Turbo译码算法硬件字长的选择极大地影响总体性能。利用C-to-FPGA设计流程,这一定点分析是完全在C环境中完成的。结果示于图 5。
上图显示出了我们的浮点Turbo译码器算法和对应的定点算法之间的性能差别。仿真是在5114块长度、5次译码迭代和AWGN信道模型情况下进行的。结果清晰明显出性能的损失是非常小的。
我们的Turbo译码器的定点性能做为译码器迭代次数的函数 ,对于1.5 dB SNR,位错率为10-6。
译码器功能的实现非常具有挑战性,我们同时针对Virtex-E和 Virtex-II 器件进行了适配。Virtex-II 器件实施是采用运行在1.85 speedfile数据库上的Xilinx 4.1i 实施工具集完成的。利用XC2V1000BG575-5 FPGA实现的最终设计,达到了66 MHz 的时钟性能,消耗了3,060个逻辑片 和 16个块RAM。对于从40至 5114符号长度的块,采用5次译码迭代循环的情况下,译码器达到了2 至6.5 百万符号每秒(Msym/s)的吞吐量。编码器占用了903个逻辑片、3个块RAM并支持83 MHz时钟频率。对于从40至5114位的块长度,速率可达到9 至20 Msym/s。
能用上就好了,用不上别怪我。对不起哈~祝福你~
⑸ 乘积码的三个步骤
(1)将信息元填入一个 2 k 行 1 k 列的矩阵;
(2)对矩阵的每一行,用一个( , ) 1 1 n k 系统分组码 1 V 进行编码,得到一个2 k 行1 n 列
的矩阵;
(3)对这个矩阵的每一列,用一个( , ) 2 2 n k 系统分组码 2 V 进行编码,最终得到一个2 n
行1 n 列的矩阵。
这样得到的纠错码是一个1 2 1 2 (n ×n, k ×k)分组码,所以称为乘积码。乘积码的两个编码器是对排列顺序不同的同一组信息元进行编码,两个编码
器并行工作,没有“内”“外”之分,统称为分量编码器。乘积码也因此被称为二维码。同
样,乘积码也可以先按列编码,再按行编码,得到的码字是完全一样的。乘积码的传输方式
也不唯一,可以按行传输、按列传输甚至按对角线传输。
与串行级联码一样,传统的乘积码译码方法把译码过程分为两步,先按行译码,给出判
决结果,再按列译码(先列后行也一样)。这种译码方式的复杂度只是两个分量译码器的复杂
度之和,译码过程简单,但不能充分发挥乘积码的纠错能力。采用前面提到的迭代译码方式
能大大改善纠错效果,但是为了使分组码能采用迭代译码,需要将它表示成卷积码的网格图
形式。1974 年Bahl、Cocke、Jelinek 和Raviv 提出的BCJR 迭代译码算法利用分组码的校验
矩阵解决了这个问题
⑹ 弗莱德里克贾里尼克是什么专家
弗莱德里克贾里尼克是语音识别和自然语言处理的专家。
贾里尼克1932年出生,他家是捷克的一个较富裕犹太家庭,本来可以有很好的教育。但是,这些都被二战打破了。父亲死在了集中营,而贾里尼克整天混迹于街头,战争结束后回到学校,很快赶上同班同学,但是也没有得过A。
1949年母亲带她移民到美国,很穷,他只有打工补贴家用,上学自然也被耽误。但是,他为的理想而努力的想法一直很坚定。最初,他想成为律师,为父亲一样的冤屈者辩护。但很快发现浓厚口语会让他在法庭上吃亏。
他又立志成为医生,但是被哈佛医学院高昂学费挡在门外,刚好麻省理工给他提供全额奖学金,他就开始了电气工程专业学习。在麻省理工,遇到了信息论鼻祖香浓博士,语言学大师贾格布森,这些大师对他影响很重要。
贾里尼克在麻省理工取得博士学位,在康奈尔任教,后去了IBM,在那里,建立了空前绝后强大的研究队伍,提出了统计语言识别的框架。他们的BCJR算法被IBM列为IBM有史以来对人类贡献的最大贡献之一。
贾里尼克曾经跟随信息论的创始人劳德·艾尔伍德·香农教授,深入地研究过数据通信的问题,是那个时代最好的通信专家。所以他在面对语音识别问题的时候,就自然而然地想到,语音识别其实可以类比成一个通信问题。
语音识别的本质,就是“说的人”要让“听的人”,明白自己的想法。这个过程可以分成三个步骤:
说话人把大脑里的想法组织成语言,通过语音表达出来;语音传递给收听的人,在收听人的大脑里从声音信号转变成神经信号;收听人把神经信号转换成说话人的想法。
这个过程,其实就相当于通信过程里的“编码-传输-解码”。所以,贾里尼克就想到了借用通信问题的解决思路,把语音识别不准的问题当成是通信过程里的噪音干扰问题,用大数据解决干扰的方法来解决语音识别的问题。
⑺ 简单描述turbo译码过程
Turbo码主要的创新点在于利用似然比来调解两个译码器输出的差异。每个译码器都产生一>组对应m-输入比特的假设(似然比),然后比较两组假设结果,如果存在差异,则译码器交换假设的结果。每个译码器都可以利用对方的假设来估计新的假设,然后它们对新的假设结果进行比较,重复上述过程直至两个译码器得到同样的假设为止。
这个过程与小强填字或者数独类似。可以这么理解,两个不同的人(译码器)拿到同一个小强填字,但是他们采用不同的方式来解决填字的问题,一个只看横/竖方向,另一个只看斜>线方向。当然,他们独立做出来的结果不能保证完全正确,于是他们在填字的同时记下他们对于该结论的确定度,比如某些字他们敢保证绝不会出错,某些字吃不准,某些是胡乱猜的。。。然后他们对比各自的结果及相应的确定度,通过参考对方的结果,双方都可以根据差异得到一些启示,然后他们根据这些启示再次尝试填字,重复以上过程直至两人的结果完全相符(但还是不能确保和正确答案一样,只能保证差不离)。是概率译码算法,也就是最大后验概率算法(MAP)。但在Turbo码出现之前,信道编码使用的概率译码算法是最大似然算法(ML)。ML算法是MAP算法的简化,即假设信源符号等概率出现,因此是次优的译码算法。Turbo码的译码算法采用了MAP算法,在译码的结构上又做了改进,再次引入反馈的概念,取得了性能和复杂度之间的折衷。同时,Turbo 码的译码采用的是迭代译码,这与经典的代数译码是完全不同的。
Turbo 码的译码算法是最早在BCJR 算法的基础上改进的,我们称以MAP算法,后来又形成Log-MAP算法、Max-Log-MAP以及软输入软输出(SOVA)算法。Turbo 码的译码结构图
⒈Turbo 码的译码结构如图所示. Turbo 译码器有以下的特点:
1) 串行级联
2) 迭代译码
3) 在迭代译码过程中交换的是外部信息
⒉ 概率译码译码原理及结构
译码时首先对接收信息进行处理,两个成员译码器之间外部信息的传递就形成了一个循环迭代的结构。由于外部信息的作用,一定信噪比下的误比特率将随着循环次数的增加而降低。但同时外部信息与接受序列间的相关性也随着译码次数的增加而逐渐增加,外部信息所提供的纠错能力也随之减弱,在一定的循环次数之后,译码性能将不再提高。
⑻ 8PSK的调制解调
对1800Hz单载波进行码元速率恒为2400Bd的8PSK调制,即对于每个码元调制所得的信号长度等于四分之三个载波信号周期。发送端完整的信号调制框图如下所示:
信息的发送是以数据帧的形式进行发送的,每次只发送一个数据帧,而不是连续发送的,这样信息在发送前发送端就不需要先跟接收端建立连接,但同时在对信号进行信源编码,信道编码和前导及探测报头序列的过程中则降低了信号传送的效率。数据帧主要包括两部分即前导及探测报头序列和所要传输的数据部分。
1、截尾卷积编码
一般情况下,卷积编码的时候在输入信息序列输入完毕后都还要再输入一串零比特的数据用于对移位寄存器进行复位,这样在一定程度上影响了信源的编码效率。而截尾卷积编码则是在每次编码完成后不对移位寄存器进行复位操作,而是将上次编码后编码寄存器的状态作为下次编码时移位寄存器的初始状态。这样一方面使得信源的编码的码率得到了提高,另一方面也增加了信息的安全性,因为接收端只有知道发送端编码器中的移位寄存器的初始状态或者付出比较大的解码代价的情况下才能对接收到的信号进行解调,否则解调出来的永远是乱码。
2、交织
码元的交织其实是属于信道编码,交织的目的是通过将信息在信道中受到的突发连续差错分散开来,使得接收到的信号中的差错趋向于随机差错,降低接收端信息解调出错的概率,从而提高通信中信息的可靠性。交织的方法一般是用两个适当大小的矩阵,同一时间一个用于数据的存储另外一个则用于数据的读取,而且两个矩阵的存取或者输出是交替的。输入序列按照逐行(列)的顺序存储到其中的一个矩阵中,而输出序列则是按照逐列(行)的顺序从另一个矩阵中读取。通常矩阵越大,则对于连续性的突发错误的分散效果越好,但是编码的时延也就越大。
3、Walsh码
Walsh码是一种同步正交码,在同步传输的情况下,具有良好的自相关特性和处处为零的互相关特性。其编码所得到的码元都是取自Hadamard矩阵的行或者列。理论上,信号如果在信道中是相互正交的,那么信号之间的相互干扰就可以达到零了。但是由于信号的多径效应和其他异步信号的干扰,使得信道中的信号并不是完全正交的,干扰也就不为零了。所以实际情况下,Walsh码一般都只是作为扩频码来使用。
扩频简单地说就是将传输信号的带宽扩展到更宽的频带上去。在信道的传输过程中,由于信号的频谱扩展了,其幅值也随之减小,使得信号很好地隐藏在噪声之中,即可以用比较低的发送功率来传输信号,同时提高信号的保密性。而在接收端对信号进行解调的时候,只是将扩展后的信号的功率谱缩回来使得其功率谱的幅值大大增加,而并没有改变接收信号中噪声功率谱的幅值,这样就能够大大提高接收端的信噪比,从而提高信号的抗干扰能力。
4、PN码
Walsh码的自相关特性和互相关特性在实际的应用中都不够理想,即信号经过多径信道时,不同径之间不同信号之间都会产生严重的干扰。为此,可以用相关性较好的伪随机序列与Walsh码模8相加,这时得到的码元序列既保持了Walsh码的正交性,同时又大大改善了其相关特性,使其相关功率谱的旁瓣大大减小。该调制中所用到的伪随机序列即PN序列(Pseudorandom Noise伪噪声序列)。通常所说的M序列和m序列即为短PN序列和长PN序列。将Walsh编码和PN码模8相加后,所得到的信息序列在传输中的抗多径引起的干扰性能就能够得到较大的提高了。
5、前导及探测报头序列
前导序列及探测报头就是在信息发送之间加在数据帧前相对于接收端已知的序列。前导及探测报头序列的作用是用于接收端对信号的捕获,信道的估计、均衡和对接收信号频偏的估计。若没有在发送信息前加上前导及探测报头,则接收端没法判断接收到的信号到底是噪声还是发送端发送的消息,信号也就无法解调。
6、8PSK调制
8PSK信号的调制主要包括对每输入的三个比特信号映射到同相支路和正交支路上的相应电平,并对两路的电平分别进行滤波,最后再将滤波所得的同相支路和正交支路的信号调制到频带上去。其调制框图如下所示:
对信号进行滤波的作用是一方面对信号所占的带宽进行压缩,另一方面是提高信号抗噪声干扰的能力。当发送端和接收端所用到的滤波器都为根号升余弦滤波器的时候,能够有效地滤除信号传输过程中所受到的噪声干扰,降低系统的误码率。
根号升余弦滤波器的冲激响应为:
其中为根号升余弦滤波器的滚降系数,滤波器的滚降系数越高则其滤波性能越好,同时减少抽样定时脉冲的误差,但是占用的带宽也就越宽,一般选择在0.2—0.6之间。 接收端在对信号进行解调的时候主要解决的问题包括:
·传输过程中多普勒效应产生的频移;
·时延产生的多径效应;
·对接收到的码元序列进行解码。
8PSK信号接收端的解调框图如下所示:
其中所包含的各个模块及其功能如下所示:
1、去载波低通滤波
该模块的是利用已知的发送端载波频率的正弦波信号和接收采样所得的信号进行相乘,所得的结果包括两部分,即载波的倍频部分和基带部分,其中不考虑接收信号在传输过程中由于干扰导致的频率变化。然后将所得的信号进行低通滤波,即可将前一步所得的信号中的载波倍频部分滤除而只保留信号的基带部分。该过程相当于将接收到信号的频谱从一定的频段上搬移到基带上,以便于后面模块对信号的解调。
2、信号的捕获
在对信号进行解调前应先解决的问题是从什么时候开始接收到的不是噪声而是发送端发送过来的信息,即寻找信号的起始时刻。这时候就可以利用已知的发送数据帧的前导及探测报头序列,在接收端用已知的前导及探测报头序列和接收信号进行相关,理想情况下当接收端正好接收到完整的前导及探测报头序列的时候相关值会达到最大,而在离最大相关值较远的地方则相关值都会相对小得多。实现时,落入滑动窗的序列和本地序列做相关,然后做FFT变换,对变换后的谱峰进行判断。之所以不直接用序列的相关值来进行判断是因为相关值会受频差的影响而使相关失效。当接收序列和本地序列同步的时候会,相关FFT会出现明显的谱峰,而当没有同步的时候,相关FFT不会出现明显的谱峰。如果谱峰没有达到门限,则采样序列向前移动,若达到门限则将其记录,并向前移动,将连续几个点的谱峰都达到门限值的点作为粗同步的位置(一般要求要有连续五个相关值达到门限)。比较其谱峰值,选取谱峰最大的点作为捕获点。谱峰的门限要根据实际经验而定,因为信号在传输过程中信道的参数是变化的。实现信号的捕获时即实现了信号的粗同步,粗同步可以用来实现粗频偏估计。
数据帧头位置的捕获只是实现了信号的码元级同步,之后还需进行位同步。捕获是否成功很大程度上决定了接收端是否能够接收到发送的信号,所以捕获时的相关序列应该足够长(探测报头384码元),从而确保系统有足够的抗干扰能力。但是当序列太长时,FFT变换的计算量就很大,所需的时间也会比较长,可以将本地序列进行分段,然后进行分段的相关和FFT变换,以减少计算量,但是这样带来的后果是信号的捕获率将会有所降低,所以要对运算量和捕获率进行权衡。
滑动步长的大小和每次作相关FFT运算所需要的指令数有关,每个步长内DSP所能执行的指令数应该不少于每次相关FFT运算所需的指令数,不然就会影响到信号解调的实时性。
3、第一次频偏估计
实际情况下,信号在传输的过程中由于受到各种各样的干扰和多普勒效应的影响,当信号达到接收端的时候其频率或多或少的都会发生一定的变化。所以接收机的目的不是在一个不变的频率上接收信号,而是在不同的频率上得到信号的不同部分,在对信号进行采样之前要么对接收信号的频率进行调整,要么对接收端的采样频率进行调整,事实上对接收到的信号频率进行调整要比对采样率进行调整简单,所以一般情况下都是对接收信号的频率进行调整,具体调整多少就要先对接收信号进行频偏估计才知道。
第一次频偏估计采用的方法是利用探测报头码元与本地序列进行相乘,若本地序列的频率为,接收到的信号频率为,那么理想情况下,两序列相乘则得到的结果中仅包含频率为和的分量,其中即为所想要求的频偏值。这时可以对相乘所得的结果进行FFT变换,将时域上的信号变换到频域上去,就可以很容易地根据频域中低频段上的频谱峰值的位置估计出频偏的大小,最后再利用估计出的频偏值对接收到的信号进行调整。由于前面的粗同步只是码元级别上的同步,所以第一次频偏估计所得到的频偏值不够精确,调整后的信号可能还存在一定的相位差。
4、位同步
信号的捕获位置并不一定是最佳的采样时刻,接收信号经过粗同步的调整后虽然频率已经基本正确,但是其中可能还存在一定的相位差,所以必须对信号再次进行同步,即精同步。由于信号经过粗同步以后就已经实现了码元级的同步,表明信号的精确采样位置肯定在粗同步位置及其前一码元和后一码元之间的某个位置上,要找出其确切的位置则可以利用本地已知的探测报头序列和从粗同步位置的前一码元到后一码元之间的序列进行滑动相关。相关值最大的位置即为所要寻找的精同步位置,即最佳采样时刻的位置。
5、第二次频偏估计
在对接收信号进行第一次频偏估计和位同步之后,就基本上能够使得探测报头的位置精确到采样点级别。但是由于第一次频偏估计具有估计范围大,估计精度差的特点,为了使得就收信号的频率更加准确有必要对位同步后的信号再进行一次频偏估计。第二次频偏估计利用前面已经得到的接收信号中主径和多径的精确位置,将本地序列分别和主径信号和多径信号进行相关FFT,再将得到的两个信号频谱进行线性叠加,并进行线性拟合,这样得到的频谱图包含主径和多径的信息,为频偏估计提供了更加可靠的信息。第二次频偏估计具有频偏估计范围小,估计精度高的特点,所以在高速移动的环境下,将两次频偏结合起来就能够大大地提高信号传输的可靠性。
对于双方都有信息收发的通信系统而言,可以将主要的频偏工作交给其中的一方,而另一方则只要对收到的信号频率进行稍微的调整就行了。如开始的时候发送端发送的信号频率为,传输过程中由于多普勒效应使得接收端接收到的信号频率为,若接收端能将其中的频偏准确地估计出来,则下次原来的接收端在将新的消息发送给原来的发送端的时候就可以调整其发送信号的频率为,而不是。理想情况下,如果信道的特性在两个信号传输的过程中都保持不变的情况下,那么原来发送端接收到的信号的频率就为,就不用再对接收的信号进行频偏估计了。
6、均衡
信道均衡的主要功能是用于消除由于信号在传输过程中经历频率选择性衰落所引起的码间干扰。一般情况下若要使用的不是自适应均衡,那么在对信号进行均衡的时候要用到信道的各种参数,那么就应先对信道进行估计。
信号在传输过程中会有多径效应,所以应该对接收信号进行信道估计,找出其中的主径和多径(一般情况下只要找出其中一条主要的多径即可)。信道估计即在粗同步位置周围将接收信号和本地序列进行相关,找出其中的峰值,其目的就是找出接收信号中主径信号和多径信号的精确起始位置。在好的信道中,若信道的信噪比比较低,则主径的第一个旁瓣和多径的主瓣有可能重叠在一起,导致多径判决出现偏差。这时可以采用主径重构的方法来解决该问题,即利用本地序列的相关图重构出理想情况下主径的相关图,然后再用总的相关图减去主径序列的相关图,即可得到多径序列的相关图根据所得的主径和多径的位置就可以进行均衡了。
自适应均衡器中的均衡系数可以实现自动调整,所以均衡前可以先不对信道进行估计,经常使用的线性横向均衡器(LTE)如下图所示:
图中抽头系数的调整算法包括最小均方误差法(LMS)和递归最小二乘法(RLS)。其中LMS采用的准则是使均衡器的期望输出值和实际输出值之间的均方误差(MSE)最小化。而RLS的准则是对初始时刻到当前时刻所有误差的平方进行平均并使其最小化。由此可以看出虽然RLS算法收敛性好,但是其运算量也大得多。
除了图中所示的线性横向均衡器外,还包括线性格型均衡器(LLE)、判决反馈均衡器(DFE)和分数间隔均衡器。其中线性格型均衡器最复杂,但收敛速度也快,系数也优良。判决反馈均衡器能够很好地解决后尾效应,适于有严重失真的无线信道,但同时也可能导致误码扩散。分数间隔的均衡器和其他的均衡器不一样,其他均衡器的采样周期都是码元周期,即都可以称得上是码率均衡器,但是分数间隔均衡器的采样周期小于码元周期的一半,故所得的信号不会出现频谱的混叠现象。
7、截尾卷积译码
由于截尾卷积码在进行编码前没有对编码器的移位寄存器进行复位操作,所以在接收端对其进行解码的情况下,如果不清楚其初始状态,那么就要付出额外的代价才能对其进行解码。目前主要的截尾卷积译码方法包括循环维特比译码算法(CAV)和BCJR译码算法。通常在进行截尾卷积编码时,会将一段数据序列的后m个码字初始化编码移位寄存器,从而使得其移位寄存器在编码前和编码后的状态保持一致。其中循环维特比译码算法就是利用这一性质在接收端将接收到码字序列的多个拷贝首尾相连,然后进行维特比译码,在经过一定长度的译码后最佳路径和幸存路径在很大程度上是一致的,这是就可以将找到的首尾状态相等的码块作为最终的译码结果。这样就可以在不知道编码移位寄存器初始状态的情况下进行截尾卷积译码,但其计算量要比一般情况下的卷积码译码计算量大得多。
⑼ Turbo码的译码原理
香农信息论告诉我们,最优的译码算法是概率译码算法,也就是最大后验概率算法(MAP)。但在Turbo码出现之前,信道编码使用的概率译码算法是最大似然算法(ML)。ML算法是MAP算法的简化,即假设信源符号等概率出现,因此是次优的译码算法。Turbo码的译码算法采用了MAP算法,在译码的结构上又做了改进,再次引入反馈的概念,取得了性能和复杂度之间的折衷。同时,Turbo 码的译码采用的是迭代译码,这与经典的代数译码是完全不同的。
Turbo 码的译码算法是最早在BCJR 算法的基础上改进的,我们称以MAP算法,后来又形成Log-MAP算法、Max-Log-MAP以及软输入软输出(SOVA)算法。Turbo 码的译码结构图
⒈Turbo 码的译码结构如图所示. Turbo 译码器有以下的特点:
1) 串行级联
2) 迭代译码
3) 在迭代译码过程中交换的是外部信息
⒉ 概率译码译码原理及结构
译码时首先对接收信息进行处理,两个成员译码器之间外部信息的传递就形成了一个循环迭代的结构。由于外部信息的作用,一定信噪比下的误比特率将随着循环次数的增加而降低。但同时外部信息与接受序列间的相关性也随着译码次数的增加而逐渐增加,外部信息所提供的纠错能力也随之减弱,在一定的循环次数之后,译码性能将不再提高。