类别:单片机与DSP发布于:2007/10/30|393次阅读
2Turbo码的反馈迭代译码结构与Max-Log-MAP译码算法
Turbo码又称为并行级联卷积码(PCCC),编码器由两个RSC成员码通过交织器并行级联。与之对应,在译码端Turbo码则采用两个成员译码器串联构成的反馈迭代结构,如图1所示,其中DEC1与DEC2表示两个软输入软输出(SISO)的成员译码器,假设编码输出采用BPSK调制方式,xk,yk为解调器输出的受噪声污染的信息比特与校验比特,zk(zn)表示从另一个译码器经过解交织(交织)后得到的外信息。每个成员译码器有两个输出端口,分别输出信息比特的对数似然比LLR(L1(ak),L2(an))及被另一个成员译码器使用的外信息叫ω1k,ω2k,经过若干次迭代和两个成员译码器的外信息交换,对信息比特的对数似然比进行硬判决即可完成Turbo码的译码。
3Max-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)
这里Lx和Ly分别表示经过信道可信度值处理过的接收信息比特与校验比特软信息,z表示来自另外一个成员译码器的外信息,N为Turbo码的信息帧长度。
3.2状态度量模块(SMU)
事实上,SMU完成在每一个网格图状态将转移至该状态的分支度量进行“累加”、“选大”的功能即所谓的ASC操作。
3.3对数似然比模块(LLRU)
语句中的BSM表示后向状态度量,LLR表示对数似然比,ω为输入至另外一个成员译码器的外信息,其他均为临时变量。
4基于DSP的Max-Log-MAP译码算法代码优化
基于C语言的DSP开发关键在于代码的精简优化,TI公司CCS开发软件中的C编译器提供了对代码的优化功能,人们可以通过选项设置、循环展开、加注关键字、使用内联函数(intrinsic)等操作完成对C代码的优化。本文主要针对TMS320C6000系列芯片的结构与特点讨论Max-Log-MAP译码算法代码的优化设计,包括软件流水、数据存取优化等,以达到充分利用DSP芯片的硬件资源,获得高效处理性能的目的。
4.1C6000系列芯片的结构与特点
TMS320C6000系列DSP是TI公司推出的一种基于VLIW技术,具有8个功能单元的数字信号处理器,其CPU采用哈佛结构,程序总线与数据总线分开,取指令与执行指令可以并行运行,VLIW技术的使用可以使指令获取、指令分配、指令执行和数据存储等操作形成多级流水,在同一时钟周期多条指令交迭地在不同功能单元内处理。C6000系列芯片在每个时钟周期内可以同时执行8条指令。
4.2基于DSP的各算法模块代码优化
4.2.1BMU模块
4.2.2SMU模块
与先前只采用两个临时变量sum1和sum2相比,优化后的代码采用更多的变量,这样可以保持数据的独立性,避免造成CPU寄存器的关联,使代码更易于流水线操作。
4.2.3LLRU模块
4.3代码优化前后消耗的指令周期对比
我们使用合众达公司的SEED—C6416仿真开发板,采用C6416-T系列DSP芯片在CCS3.1编译环境下对各个算法模块及整个Max-Log-MAP算法进行了编译与硬件仿真,Turbo码的信息帧长选为144b,代码的数据类型定义为int型,编译选项设置为-03-mt-pm。使用CCS附带的定时器(Timer)功能,对优化前后代码消耗的指令周期进行了测试,结果如表1所示。
可见,优化后的代码大大降低了CPU指令周期的消耗,提高了DSP的工作效率。值得提出的是,在代码优化时主要针对算法本身的指令操作与数据存储等方面进行了改进,事实上,在具体的开发过程中还可以根据实际的数据宽度采用内联函数(intrinsics),数据封装处理(packeddataprocessing)等措施对代码进行进一步优化,以获得更高效的性能。
5结语
本文研究了基于标准C语言的Turbo码Max-Log-MAP译码算法的软件编程与实现方法,并结合TMS320C6000系列DSP芯片的结构与特点深入探讨了代码的优化设计,通过循环展开、数据存取优化、算法的改进等措施提高代码的效率,测试结果表明,经过优化的代码可以大大降低CPU的指令周期消耗,从而获得了比较高效的处理性能。