基于DSP的Max-Log-MAP算法实现与优化

发布者:科技火箭最新更新时间:2007-10-10 来源: 现代电子技术关键字:译码  增益  极性  循环 手机看文章 扫描二维码
随时随地手机看文章

1 引 言

Turbo码接近Shannon理论极限的优越性能使其在卫星通信、深空通信、多媒体通信等领域具有非常大的诱惑力,因此自提出以来一直受到广泛而持续的关注。

Turbo码的工程应用与实现是近年来研究工作的热点。Turbo码采用反馈迭代译码结构,成员译码器使用最大后验概率(MAP)译码算法译码,由于MAP算法含有大量的指数运算与对数运算,给实现带来极大的困难,在工程应用中,通常采用其对数域的简化算法——Log-MAP和Max-Log-MAP算法。相对于Log-MAP算法,Max-Log-MAP虽然损失0.5 dB的增益,但由于其大大简化了复杂度,在应用与实现中倍受关注。本文基于TMS320C6000系列DSP芯片讨论了Max-Log-MAP算法的实现与优化。

2 Turbo码的反馈迭代译码结构与Max-Log-MAP译码算法

Turbo码又称为并行级联卷积码(PCCC),编码器由两个RSC成员码通过交织器并行级联。与之对应,在译码端Turbo码则采用两个成员译码器串联构成的反馈迭代结构,如图1所示,其中DEC1与DEC2表示两个软输入软输出(SISO)的成员译码器,假设编码输出采用BPSK调制方式,xk,yk为解调器输出的受噪声污染的信息比特与校验比特,zk(zn)表示从另一个译码器经过解交织(交织)后得到的外信息。每个成员译码器有两个输出端口,分别输出信息比特的对数似然比LLR(L1(ak),L2(an))及被另一个成员译码器使用的外信息叫ω1k,ω2k,经过若干次迭代和两个成员译码器的外信息交换,对信息比特的对数似然比进行硬判决即可完成Turbo码的译码。

Max-Log-MAP算法下的对数似然比可以表示如下:

其中m′,m分别对应k-1和k时刻的编码器状态,αk(m),βk(m)分别称为前向和后向状态度量,可以根据RSC码的网格图由分支度量rk(i,m′,m)(i=±1)递推计算:

外信息若采用Robertson使用方式,AWGN信道下码率为1/2的RSC码分支度量rk(i,m′,m)计算公式可以表示为:

式中j=±1,表示对应信息比特ak=i编码应输出的双极性校验比特,Lc=4Es/N0定义为信道可信度值。外信息与对数似然比的关系为:

3 Max-Log-MAP译码算法的C语言软件编程与实现

分析可知,Max-Log-MAP算法需要根据每时刻的接收信息计算几种度量值:分支度量rk(i,m ′,m),前向状态度量αk(m)和后向状态度量βk(m),最后由3个度量值计算该时刻的对数似然比L(ak),从而得到另一个成员译码器需要的外信息ωk。因此算法可以大致分为几个模块:分支度量模块,前、后向状态度量模块及对数似然比模块,各个模块的计算均是基于网格图的递推完成,故均可以使用C语言中的for循环语句实现,这里以八状态(13,15)RSC码为例逐一分析。

3.1 分支度量模块(BMU)

状态度量的递推是在分支度量的基础上进行的,因此分支度量是算法的基本量度,由式(4)可知,分支度量实际上是由接收信息与网格图上转移路径对应输出的相关运算。对于八状态(13,15)RSC码,网格图上两个相邻时刻的状态转移路径共有16条,考虑到(i,j)组合的取值只有4种,且(-1,-1)与(+1,+1),(-1,+1)与(+1,-1)条件下的分支度量值互为相反数,故为了减少数据的存储,每一时刻只需计算两个分支度量值即可,不妨设为BM11与BM10,BMU的算法实现结构为:

这里Lx和Ly分别表示经过信道可信度值处理过的接收信息比特与校验比特软信息,z表示来自另外一个成员译码器的外信息,N为Turbo码的信息帧长度。

3.2 状态度量模块(SMU)

前向状态度量的递推与后向状态度量的递推在算法上是相似的,我们以前向状态度量为例说明状态度量模块(SMU)的算法编程实现,用FSMj表示基于RSC(13,15)码网格图j状态的前向状态度量累加值(j=0,1,…,7),前向状态度量的递推循环语句结构为(其中语句中的temp1,temp2表示临时变量):

事实上,SMU完成在每一个网格图状态将转移至该状态的分支度量进行“累加”、“选大”的功能即所谓的ASC操作。

3.3 对数似然比模块(LLRU)

对数似然比模块(LLRU)根据分支度量与状态度量值计算对数似然比与外信息,其基本运算也是类似SMU中的加比选(ACS)操作,相应的算法结构如下(转移路径按输入分别为0和1分为两组,状态从0~7排列):

语句中的BSM表示后向状态度量,LLR表示对数似然比,ω为输入至另外一个成员译码器的外信息,其他均为临时变量。

4 基于DSP的Max-Log-MAP译码算法代码优化

基于C语言的DSP开发关键在于代码的精简优化,TI公司CCS开发软件中的C编译器提供了对代码的优化功能,人们可以通过选项设置、循环展开、加注关键字、使用内联函数(intrinsic)等操作完成对C代码的优化。本文主要针对TMS320C6000系列芯片的结构与特点讨论Max-Log-MAP译码算法代码的优化设计,包括软件流水、数据存取优化等,以达到充分利用DSP芯片的硬件资源,获得高效处理性能的目的。

4.1 C6000系列芯片的结构与特点

TMS320C6000系列DSP是TI公司推出的一种基于VLIW技术,具有8个功能单元的数字信号处理器,其CPU采用哈佛结构,程序总线与数据总线分开,取指令与执行指令可以并行运行,VLIW技术的使用可以使指令获取、指令分配、指令执行和数据存储等操作形成多级流水,在同一时钟周期多条指令交迭地在不同功能单元内处理。C6000系列芯片在每个时钟周期内可以同时执行8条指令。

4.2 基于DSP的各算法模块代码优化

4.2.1 BMU模块

BMU算法模块为单循环语句,由于循环体内的指令较少,为了更多地同时利用CPU资源,一个有效的做法即是将循环展开,这样在减少循环次数的同时可以使更多的操作形成流水(pipeline),充分发挥多个功能单元的并行处理能力。优化后的代码如下:

4.2.2 SMU模块

由于状态度量的递推具有递归性,即本时刻递推得到的数值将用作下一时刻的递推初值,因此对于该算法模块的数据读入读出操作是一个值得考虑的问题。从3.2节SMU的程序分析可知,FSM的读写致使CPU寄存器与数据存储器之间频繁的进行load与store操作,为了减少该操作的指令消耗,我们引入3组临时变量FSM_tempj,FSMj_old和FSMj_new(j=0,1,…,7)用来存储FSM的计算结果,这样在下次递推时CPU可以直接从内部的寄存器读取数据,避免了从数据存储器的load操作。优化后的代码结构如下:


与先前只采用两个临时变量sum1和sum2相比,优化后的代码采用更多的变量,这样可以保持数据的独立性,避免造成CPU寄存器的关联,使代码更易于流水线操作。

4.2.3 LLRU模块

对于LLRU算法模块的代码优化主要从减少加减操作指令入手,这涉及到对算法的改进。前文提到每一时刻的转移路径有16条,如果采用3.3节的程序结构,对分支度量要进行16次加减操作。考虑到分支度量只有4种取值,结合RSC(13,15)网格图的映射关系,按照分支度量的取值将转移路径分为4组,这4组分别对于分支度量的加减操作先不予处理,即先选最大后再进行相应的分支度量加减操作,这样每一次循环可以将分支度量的加减操作由原来的16次减少至4次,故可以大大降低CPU资源的消耗。相应的优化代码结构如下:

4.3 代码优化前后消耗的指令周期对比

我们使用合众达公司的SEED—C6416仿真开发板,采用C6416-T系列DSP芯片在CCS 3.1编译环境下对各个算法模块及整个Max-Log-MAP算法进行了编译与硬件仿真,Turbo码的信息帧长选为144 b,代码的数据类型定义为int型,编译选项设置为-03-mt-pm。使用CCS附带的定时器(Timer)功能,对优化前后代码消耗的指令周期进行了测试,结果如表1所示。

可见,优化后的代码大大降低了CPU指令周期的消耗,提高了DSP的工作效率。值得提出的是,在代码优化时主要针对算法本身的指令操作与数据存储等方面进行了改进,事实上,在具体的开发过程中还可以根据实际的数据宽度采用内联函数(intrinsics),数据封装处理(packeddata processing)等措施对代码进行进一步优化,以获得更高效的性能。

5 结 语

本文研究了基于标准C语言的Turbo码Max-Log-MAP译码算法的软件编程与实现方法,并结合TMS320C6000系列DSP芯片的结构与特点深入探讨了代码的优化设计,通过循环展开、数据存取优化、算法的改进等措施提高代码的效率,测试结果表明,经过优化的代码可以大大降低CPU的指令周期消耗,从而获得了比较高效的处理性能。

关键字:译码  增益  极性  循环 引用地址:基于DSP的Max-Log-MAP算法实现与优化

上一篇:经过优化的低成本FPGA中的高性能DSP功能
下一篇:TMS320VC5402 HPI接口与PCI总线接口设计

推荐阅读最新更新时间:2024-05-13 18:38

用万用表判别稳压管极性及其正反向电阻值的方法
用判别稳压管极性及其正反向电阻值的方法与普通硅一样。 稳压管稳定电压vz的测量,最好用jt-1型晶体管图示仪。若条件不具备时,也可用万用表来测量。方法是:当万用表的高阻挡电池电压大于vz时,可将万用表拨到最高电阻挡,测出稳压管的反向电阻,设其值为rx,则 vz=eg·rx/(rx+ nr0) 式中:n为使用挡的倍率,如r×10k时,n=10000;r0为该万用表的中心阻值,即表盘上电阻刻度正中心所标的电阻值。eg是万用表拨至该挡时所用的电池电压。 用此方法测得的vz值稍偏低,但在一般场合是适用的。 如果所用万用表高阻挡的电池电压eg小于vz,可按图测量。图中+15v电压可用直流稳压或干电池。r和rp是限流电阻。当v两端电压
[测试测量]
用万用表判别稳压管<font color='red'>极性</font>及其正反向电阻值的方法
数字电路中显示译码器设计的分析与研究
摘要:针对显示译码器设计时,输入、输出变量难以确定的问题,提出了功能解析和变量关联设计法。显示译码器输出经驱动器使显示器工作,输出变量的多少和状态取决于显示器的种类,输入变量的多少和状态与输出显示结果有关。研究表明,显示译码器输入变量的位数,n与输出显示结果的个数N之间满足2n=N或2n-1 N≤2n,输出变量的个数与显示器的输入相同,状态相互对应。 关键词:译码器;驱动器;显示器设计;输入变量;输出变量     显示译码器是数字电子技术组合逻辑电路中一个很重要的器件,在数字电子技术应用中不可缺少,特别是在信息技术数字化的今天,其应用越来越广泛,但在组织开展科技创新和电子设计制作竞赛活动中,学生在设计制作抢答器、记分器、记时器等电
[电源管理]
数字电路中显示<font color='red'>译码</font>器设计的分析与研究
极性移相控制高频脉冲交流环节逆变器研究
摘要:提出并深入研究了高频脉冲交流环节逆变器电路拓扑族及其双极性移相控制策略。借助周波变换器换流重叠和输出滤波电感电流极性选择,该双极性移相控制策略实现了变压器漏感能量和滤波电感电流的自然换流,解决了这类逆变器固有的电压过冲和换流重叠期间周波变换器的环流现象,实现了逆变桥功率器件的零电压开关和周波变换器功率器件的零电流开关。仿真与原理试验结果均证实了这种双极性移相控制策略的可行性和理论分析的正确性。 关键词:高频脉冲交流环节;双极性移相控制;零电压零电流开关;周波变换器;换流重叠 引言 传统的逆变技术虽然成熟可靠、应用广泛,但存在体积大且笨重、音频噪音大、系统动态特性差等缺点 。用高频变压器替代传统逆变器中的工频变压器,克
[应用]
STM32F4学习笔记11——CRC循环冗余校验
关于CRC校验有以下几个方面 1.模2除(也就是异或)。 2.多项式与二进制关系(x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0,x的最高幂次为R,转换成对应的二进制数有R+1位。)。 CRC基本原理 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成
[单片机]
STM32F4学习笔记11——CRC<font color='red'>循环</font>冗余校验
同步检波器助力精密低电平测量
同步检波器可提取淹没在噪底内的小信号,用于进行各种物理量测量,例如极小的电阻、明亮背景下的光吸收或反射量,或者存在于高噪声电平下的应变。 在很多系统中,随着频率趋近于零,噪声会不断增加。例如,运算放大器具有1/f噪声,而光学测量易受因环境光条件变化而产生的噪声影响。在远离低频噪声处进行的测量可提高信噪比,从而可检测到较弱信号。例如,将光源调制到几千赫兹有助于测量原本会淹没在噪底内的反射光。图1显示了调制技术如何恢复原本低于噪底的信号。 图1.通过调制使信号远离噪声源 调制激励信号的方法有多种。最简单的方法是重复打开、关闭。在驱动LED、为应变计电桥供电的电压源和其他类型激励时,这种方法很有效。而对于光谱仪器上使用的白炽
[测试测量]
同步检波器助力精密低电平测量
STM32定时器之控制LED灯循环显示
/* 名称:STM32定时器之控制LED灯循环显示 说明:对于STM32来说,其定时器要比C51的定时器要多,功能也更复杂。 就数目来说来说,STM32的定时器可以分为基本定时器,通用定时器和高级定时器(还包括Systick、看门口定时器和窗口定时器)。就STM32F103,一般来说,它有2个高级定时器TIM1和TIM8、4个通用定时器TIM2/3/4/5、2个基本定时器TIM6和TIM7。而C51一般只有几个定时器。 就功能来说, STM32中: 对于基本定时器,其功能就是和C51差不多,只有定时功能。 对于通用定时器,它的功能有定时、输出比较、输入捕获。虽然目前,我也不知道后面两个功能是干啥的。 对于高级定
[单片机]
ICL7660型极性反转式DC/DC电源变换器
这类 变换器 亦称“泵电源”,其特点是利用电荷的原理将正压输入变成反极性的负压输出,即UO=-U1.它利用振荡器,模拟开关和泵电容来实现电压极性转换。典型产品有 1、ICL7660的工作原理 2、ICL7660的特殊应用
[电源管理]
ICL7660型<font color='red'>极性</font>反转式DC/DC电源变换器
伺服系统相关问题解答
一、数控铣床,打开电源和系统,伺服电机嗡嗡响,响几分钟之后伺服电机会发热,调小刚性后不响了,但铣出来的圆不像圆,该怎样调? 应该是几台驱动器设置的增益不同,造成电机在不同的转速下自激。可以把待测的驱动器与参考驱动器的参数设置成一致再试一下。惯量比看了吗?增益是一方面,但也不要忽略了惯量。 二、伺服驱动器,通过调节三环PID控制伺服电机,噪音比较大,但电机并没有震动,载波频率是10KHZ,电流采样速度是0.1us一次,为什么? 噪音的原因:因为没有做输入脉冲滤波,所以才有那个噪音。 三、电机启动不起来而且噪声大振动大是什么原因? 1、 脱开载荷; 2、 用手盘动,确认灵活、无异常; 3、 空载启动实验; 4、 检查负载情
[嵌入式]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved