基于dsp的信道译码算法优化

基于dsp的信道译码算法优化

ID:10327497

大小:68.50 KB

页数:8页

时间:2018-07-06

基于dsp的信道译码算法优化_第1页
基于dsp的信道译码算法优化_第2页
基于dsp的信道译码算法优化_第3页
基于dsp的信道译码算法优化_第4页
基于dsp的信道译码算法优化_第5页
资源描述:

《基于dsp的信道译码算法优化》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于DSP的信道译码算法优化

2、第1内容显示中摘要:在DSP上移植算法,代码优化程度成为提高系统性能、缩短开发周期的瓶颈。同时针对复杂算法在DSP上的实现,也产生很多优化策略、方法。本文以在数字通信系统中应用广泛的Viterbi算法为例,简述Viterbi算法的基本原理和目标处理器(TMS320C6211)的处理能力;介绍C6000软件编程及优化的步骤,并提出一些具体的优化策略和技巧。虽然TexasInstrument推出的C6000系列DSP使对信号处理的能力显著提高,但对信息处理能力要求的不断提升使提对DSP程序的优化越来越成为DSP开发工作中

3、非常重要的环节。本文讨论2Mbps视频数据流的Viterbi算法的移植与优化策略、技巧。1Viterbi算法原理简介Viterbi译码算法是由Viterbi于1967年提出的一种最大似然译码方法,译码器根据接收序列R按最大似然准则力图找出正确的原始码序列。随着大规模集成电路技术的发展,采用Viterbi算法的卷积编码技术已成为广泛应用的纠错方案。Viterbi译码过程可用状态图表示,图1表示2个状态的状态转移图。Sj,t和Sj+N/2,t表示t时刻的两个状态。在t+1时刻,这两个状态值根据路径为0或者1,转移到状态S2j,t+1和S2j+1,t+

4、1。每一种可能的状态转移都根据接收到的有噪声的序列R计算路径度量,然后选择出各个状态的最小度量路径(幸存路径)。Viterbi算法就是通过在状态图中寻找最小量路径向前回溯L步,最后得到的即为译码输出。在卷积码(n,k,m)表示法中,参数k表示每次输入信息码位数,n表示编码的输出卷积码位数,m称为约束长度(一些书中采用k=m+1为约束长度,也可称(2,1,2)码网格图,r=k/n称为信息率,即编码效率。本文使用的是(2,1,3)码,约速长度为2,状态数为22=-4。2目标处理器简介TMS320C6000系列DSPs(数字信号处理器)是TI公司推出的

5、一种并行处理的数字信号处理器,是基于TI的VLIS320C6211。该处理器的工作频率经过倍频可达到150MHz,每个时钟周期最多可并行执行8条指令,从而可以实现1200MIPS定点运算能力。C6000系列CPU采用哈佛结构,其程序总线与数据总线分开,取指令与执行指令可以并行运行。其程序总线宽度为256位,每一次取指操作都是取8条指令,称为一个取指包,执行时每条指令占用1个功能单元。取指、指令分配和指令译码单元都具有每周期读取并传递8条32位指令的能力。C6000系列CPU有2个类似的可进行数据处理的数据通道A和B,每个通路有4个功能单元(.L、

6、.S、.M、.D)和1组包括16个(C64有32个)32位寄存器的通用寄存器组,每个功能单元完成一定的算术或逻辑运算。C6000的特殊结构使多个指令交迭地在不同功能单元内处理,大大提高了微处理器的处理能力。另外在其CPU硬件结构上,C6000的流水线分为三个阶段:取指、译码、执行,每一级又包含几个节拍。流水处理使得若干条指令的不同执行阶段可以并行执行,从而能够大幅度提高程序运行速度。3算法的编程实现及优化根据C6000的软件编程流程,对Viterbi算法的编程及其优化可分为三个阶段来进行。这三个阶段分别为:开发C代码、优化C代码、编写线性汇编代码

7、。在代码编写和优化过程中,这三个阶段不是必须都要经过的,只要在某一阶段已经满足了算法代码的功能和性能要求,就不必继续进行下面的阶段。①开发C代码。这一阶段完全是根据任务要求来完成算法的代码编写工作。在C6000的集成开发环境CCS(CodeposerStudio)下进行代码的编译和功能验证,然后可用CCS的调试工具(如Profiler),利用在程序中设置断点的方法可找出程序中耗时最多、最影响整体性能的代码段。为改进代码性能,可进入下一阶段。如下是针对(2,1,3)码的Viterbi算法代码中完成算法功能的核心循环,也是最耗时、最影响代码整体性能的

8、低效率段。for(c=0;c<unmber_of_input;c++)//对每一个输入值,设number_of_input=24{for(j=0;j<number_of_states;j++)//对于每个状态(2,1,3)状态数为4{for(i=0;i<2;i++)//对于状态的每个可能输入,比如1,0{/*计算度量值*/branch_metric=hamm(conv_output[i],c,channel_data);/*比较累计度量保留其中最小,并且记录其状态路径*/if(accum_err_metric[nextstate

9、[j][1]>accum_err_metric[j][0]+branch_metric]{accum_err_metric[nex

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。