打印

0数字卫星通信中的Viterbi算法及DSP实现

[复制链接]
2406|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
益友电子|  楼主 | 2012-5-4 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

:介绍了应用于数字卫星通信的Viterbi(维特比)译码算法,讨论了影响编码增益的几个参数,提出了用TI(德州仪器)公司TMS320C54X实现译码算法的具体方法。
关键词:Viterbi算法;蝶形运算单元;距离度量;回溯深度;CCSU

在数字卫星通信系统中,广泛采用差错控制技术,以保证信号经有噪声及各种干扰的信道传输后的质量。对于卫星功率受限系统,采用差错控制技术后,在相同误比特率的条件下,对卫星所转发的信号能量可要求小一些,因而可以提高信道容量。Viterbi算法是基于最大后验概率的卷积译码算法。在编码约束长度不太长或误比特率要求不太高的条件下,计算速度快,且设备比较简单,故特别适用于基本上是白噪声高斯信道的卫星通信系统中纠随机差错。3GPP(第三代移动通信伙伴关系)的WCDMA标准,以及CCSDS(空间数据系统咨询委员会)的Planetary标准都将卷积码作为实时要求较高业务的信息纠错编码,使Viterbi译码器成为第三代移动通信系统及卫星通信系统的重要组成部分。
1Viterbi算法
    Viterbi算法为最大后验概率译码,等价于在篱笆图上找出与接收序列距离最小的路径,进行路径回溯获得判决输出。下面对译码算法的几个方面进行讨论。
1.1蝶形运算单元
    Viterbi译码的基本运算单元可以看作一个蝶形运算单元,如图1所示。

   
从图1可以看出,状态S(i),S(i+1),S(i/2),S(i/2+2m-1)组成蝶形运算单元。S(i/2)为本地编码器,输入为0时,状态S(i),S(i+1)的状态转移;S(i/2+2m-1)为本地编码器,输入为1时,状态S(i),S(i+1)的状态转移。蝶形运算单元的运算可以用式(1),式(2)表示:


其中:dn(j)表示更新状态j的累加距离度量,d0(j)表示原状态为j的累加距离度量。表示输入为i时,由状态j出发接收码元与本地编码的距离度量。
蝶形运算单元的运算可以概括为“加比选”。即首先累加进入更新状态的两条路径的距离度量,然后比较两个距离度量,最后选出距离度量最小的一条作为幸存路径。

1.2
路径回溯

译码输出是通过在篱笆树以最大后验概率向后回溯得到。考虑到硬件的可实现性及在实际当中幸存路径会以很大概率在第L个译码时刻后重合在一起,所以一般取L=(5~10)m作为回溯深度,其中m为编码存储。并且L取的越大,译码的误码率就越低,其仿真结果如图2所示。可以看出在相同的信噪比下,回溯深度L=60的Viterbi译码器误码率要小于L=30的译码器。

2 DSP实现
    TMS320C54X是应用于通信设备的通用DSP芯片。该芯片采用了改善的哈佛结构,拥有优化的CPU,1条程序总线,3条数据总线和4条地址总线,因而在1个周期内可以完成取指,2次读和1次写的操作。另外其CCSU(累加比较选择单元)结构及相应指令提高了译码速度。根据上面的算法讨论,译码过程分成3步:
2.1存储空间的初始化

译码需要的存储空间有4部分:
输入缓冲区输入缓冲区为一连续存储空间,其空间大小为Fs/R字。其中Fs为信源的帧长度,R为编码率。
输出缓冲区由于在每个译码时刻译码输出为1位,16个输出位经过打包为1个字,则输出缓冲区需要空间大小为Fs/16字。
转换表存储区转换表存储空间的大小由编码存储和帧长决定,空间大小为2m-4×Fs字。
状态矩阵存储区状态矩阵存储区需要2个存储区,一个存储区存储原状态矩阵,另一个存储更新状态矩阵,每个缓冲区的空间大小为2m。
2.2矩阵更新
    TMS320C54X可分离的ALU,双累加器和相应指令可并行完成“加比选”的某些过程。当本地距离存储在T寄存器时,处理器可以在1个指令周期完成2条路径的距离度量的累加。双加减指令DADST和DSADT在1个指令周期里完成从存储单元取出原始状态累加距离度量与T寄存器的本地距离相加,并将累加器中的低16位存储在更新状态矩阵;然后从下个存储单元取出原始状态累加距离度量与T寄存器的本地距离相减,并将结果存入更新状态矩阵。所以1条指令完成2条路径的度量计算。路径的比较、存储由1条CMPS指令完成。其部分代码为:



2.3路径回溯

路径回溯主要是在转换表中找出每个译码时刻的正确译码输出位,表1给出了转换表结构。

其中转换字位置和转换字位位置由式(3),式(4)决定:


其中word为转换表中字位置,Bit为转换表中位位置,state为当前位置,mask为屏蔽字(取值为2m-4-1),state>>n表示状态右移n位。确定该时刻的译码输出位后,将此时刻的状态state左移1位,并将译码输出位左移进状态state的最低位,得到下一时刻的状态。重复上面过程直到回溯结束。其部分代码为:

3结语

蝶形运算单元构成了Viterbi译码的基本单元。其算法就是以一个蝶形运算单元为基础进行“加,比,选”的过程,并选择合适的回溯深度,然后进行路径回溯。而利用TMS320C54X的CCSU结构及相应指令可并行完成蝶形运算单元的某些运算,简化了译码过程,提高了译码的速度,可以满足高速实时的卫星通信业务需要。

相关帖子

沙发
jioa| | 2012-5-4 20:38 | 只看该作者
过来看下 谢谢楼主分享

使用特权

评论回复
板凳
jioa| | 2012-5-4 20:38 | 只看该作者
:handshake:lol

使用特权

评论回复
地板
kakio| | 2012-5-6 14:18 | 只看该作者
算法很重要的

使用特权

评论回复
5
kakio| | 2012-5-6 14:18 | 只看该作者
大家可以好好的看下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

445

帖子

0

粉丝