一种卷积码维特比译码算法的软件实现
DSP卷积码的维特比译码的分析与实现
编号:《DSP技术与应用》课程论文卷积码的维特比译码的分析与实现论文作者姓名:______ ______作者学号:___ ______所在学院:所学专业:_____ ___导师姓名职称:__ _论文完成时间: _目录摘要: (1)0 前言 (2)1 理论基础 (2)1.1信道理论基础 (2)1.2差错控制技术 (3)1.3纠错编码 (4)1.4线性分组码 (5)2 卷积码编码 (7)2.1 卷积码概要 (7)2.2 卷积码编码器 (8)2.3卷积码的图解表示 (8)2.4 卷积码的解析表示 (11)3 卷积码的译码 (14)3.1 维特比译码 (15)3.2 代数译码 (17)3.3 门限译码 (18)4 维特比译码器实现 (18)4.1 TMS320C54 系列DSP概述 (18)4.2 Viterbi译码器的DSP实现 (19)4.3 实现结果 (21)5 结论 (21)参考文献 (22)II卷积码的维特比译码的分析与实现摘要:针对数据传输过程中的误码问题,本文论述了提高数据传输质量的一些编码及译码的实现问题。
自P.Elias 首次提出卷积码编码以来,这一编码技术至今仍显示出强大的生命力。
在与分组码同样的码率R 和设备复杂性的条件下,无论从理论上还是从实际上均己证明卷积码的性能至少不比分组码差,且实现最佳和准最佳译码也较分组码容易。
目前,卷积码已广泛应用在无线通信标准中,其维特比译码则利用码树的重复性结构,对最大似然译码算法进行了简化。
本文所做的主要工作:首先对信道编码技术进行了研究,根据信道中可能出现的噪声等问题对卷积码编码方法进行了主要阐释。
其次,对卷积码维特比译码器的实现算法进行了研究,完成了译码器的软件设计。
最后,结合实例,采用DSP芯片实现卷积码的维特比译码算法的仿真和运行。
关键词:卷积码维特比译码DSPConvolutional codes and Viterbi decoding analysis andrealizationZhang Yi-Fei(School of Physics and Electronics, Henan University, Henan Kaifeng 475004, China) Abstract:Considering the error bit problem during data transmission,this thesis discussed some codings and decoders,aiming at enhancing transmission performance. From P.Elias first gave the concept of convolutional code, it has show its’ great advantage. Under the same condition and the same rate of block code, the performance of convolutional code is better than block code, and it’s easier to implement the best decoding.Convolutional codes have been widely used in wireless communication standards, the Viterbi decoding using the repetitive structure of the code tree, the maximum likelihood decoding algorithm has been simplified. Major work done in this article: First, the channel coding techniques have been studied, the main interpretation of the convolutional code encoding method according to the channel may be noise and other issues.Secondly, the convolutional code Viterbi decoder algorithm has been studied, the software design of the decoder.Finally, with examples, simulation and operation of the DSP chip convolutional codes, Viterbi decoding algorithm.1Key words:convolutional code Vltebri decoder DSP0 前言随着数据处理、计算机通信、卫星通信以及高速数据通信网的飞速发展,用户对数据传输的可靠性提出了越来越高的要求,因此如何在保证数据传输速率的前提下,提高传输数据的可靠性,就成为一个迫切需要解决的问题。
卷积码的维特比译码原理及仿真
卷积码的维特比译码原理及仿真摘 要 本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出,并通过Matlab 软件进行设计与仿真,并进行误码率分析。
实验原理QPSK :QPSK 是英文QuadraturePhaseShiftKeying 的缩略语简称,意为正交相移键控,是一种数字调制方式。
四相相移键控信号简称“QPSK ”。
它分为绝对相移和相对相移两种。
卷积码:又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码。
积码将k 个信息比特编成n 个比特,但k 和n 通常很小,特别适合以串行形式进行传输,时延小。
卷积码是在一个滑动的数据比特序列上进行模2和操作,从而生成一个比特码流。
卷积码和分组码的根本区别在于,它不是把信息序列分组后再进行单独编码,而是由连续输入的信息序列得到连续输出的已编码序列。
卷积码具有误码纠错的能力,首先被引入卫星和太空的通信中。
NASA 标准(2,1,6)卷积码生成多项式为: 346134562()1()1g D D D D D g D D D D D=++++=++++其卷积编码器为:图1.1 K=7,码率为1/2的卷积码编码器维特比译码:采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。
如果接收到L 组信息比特,每个符号包括v 个比特。
接收到的Lv 比特序列与2L 条路径进行比较,汉明距离最近的那一条路径被选择为最有可能被传输的路劲。
当L 较大时,使得译码器难以实现。
维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。
它并不是在网格图上一次比较所有可能的2kL 条路径(序列),而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。
下面以图2.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。
FPGA_ASIC-卷积码的Viterbi高速译码方案
投稿栏目:嵌入式与SOC——PLD CPLD FPGA应用卷积码的Viterbi高速译码方案A High-speed viterbi-decoding Scheme for Convolutional Code(1.南京师范大学分析测试中心,2.南京师范大学物理科学与技术学院)刘国锦1王济生2时斌1朱晓舒1(1. Analysis and Testing Center of Nanjing Normal University, 2. School of Physics and Technology of Nanjing Normal University) LIU Guo-jin1 WANG Ji-sheng2摘要:本文探讨了无线通信中广泛涉及的差错控制问题,介绍了卷积码的编译码原理。
提出了一种卷积码编码,及其高速Viterbi译码的实现方案,对译码的各个组成部分作了分析,并在FPGA中实现了该译码方案。
仿真结果表明,在纠正能力范围内,能够正确纠错并译码,且具有高速译码的优点,达到了预期的效果,该设计方案可以非常容易地应用到很多差错控制的通信系统中。
Abstract: This paper discusses the issue of error-control involved widely in wireless communications, and introduces the coding and endcoding principle of Convolutional Code. A scheme of encoding of Convolutional Code and its high-speed viterbi decoding is proposed, and the components of decoding are analysed, then the scheme is implemented in FPGA. The simulation result indicates that it can correct the error bits exactly within the range of capability error-correcting, and it has the advantage of high-speed decoding. Prospective effect is realized.This design scheme can be applied easily in many communication systems with error-control.关键词:差错控制;卷积码;Viterbi译码;寄存器交换Key words: error-control; Convolutional Code; viterbi decoding; register-exchange中图分类号:TN492 文献标识码:A0 引言在无线通信过程中,由于信道中噪声干扰的存在,会不可避免地造成发送端的码元经过有噪信道到达接收端后,接受的码元中发生了差错,从而影响了无线数据通信的可靠性。
matlab卷积编码与viterbi译码的实现
matlab卷积编码与viterbi译码的实现MATLAB中viterbi译码算法讨论⼤家可以再评论区交流!!!MATLAB中实现viterbi译码的函数为:convenc其中:code = convenc(msg,trellis)vitdec其中:vitdec(code,trellis,tblen,opmode,dectype)code卷积编码,trellis⽹格表,tblen回溯长度,opmode:cont、term、trunc,dectype:unquant、hard、soft;本⼈最近在做⼀个关于viterbi译码算法,最终在FPGA中实现,在FPGA中最终的实现⽅案为xillinx IP核实现。
在此之前⽤MATLAB进⾏仿真验证。
matlab程序:Tre = poly2trellis(7,[133 171]);通过poly2trellis⽣成逻辑关系图,如下图所⽰。
逻辑关系图%卷积编码:msg = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];code = convenc(msg,Tre);%code = [0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0];%这是通过convenc函数⽣成的卷积码%vitdec译码:%在vitdec译码过程中采⽤硬判决,通过不同的tblen和opmode来找出其中关系。
%(1) opmode = conttblen = 12;msg_dat = vitdec(code,Tre,tblen,'cont','hard');%msg_dat =[ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 ];%通过了解到cont模式中,vitdec译码会有延迟,延迟的长度为tblen长度,所以在此对vitdec进⾏修改code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0];%此时vitdec译码出来的数据和信源在后⾯最后⼀位不⼀样%(2) opmode = termtblen = 12;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了tblen = 18;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了%(3)opmode = trunctblen = 12;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样总结:以上通过⽐较tblen和opmode模式的不同对产⽣的结果,其中cont和trunc的模式总结起来就是cont有tblen延迟,但是trunc没有。
卷积码Viterbi译码器FPGA实现方案
卷积码Viterbi译码器FPGA实现方案J2EE开发购物网站解析2.本商品最适合那类职业人群:JavaEE应用程序员3.本商品能够解决他们什么问题:本文通过实战全程编写一个购物网站来讲解如何使用J2EE来建立企业级的网络应用!4.商品内容:本文通过实战全程编写一个购物网站来讲解如何使用J2EE来建立企业级的网络应用!一、搭建开发平台本文从实战动身,因此关于一些概念性的问题就不多讲了,第一预备下面的家伙:1.oracle2.weblogic3.Jbuilder其它:struts-console-2.2(用作struts视图开发)PowerBulider(方便数据库操作)Dreamweaver(美化前台页面)开发平台为Windows2000。
以下以一样性的配置为例详细介绍搭建J2EE的开发平台。
用机配置:P4赛扬1.7G,256MB 20GHDD 操作系统:Windowsdows2000 SP3数据库:oracle 8iJ2EE应用平台:weblogic 6.1 sp2EJB,JSP,JAVABEAN开发:Jbuilder 7 weblogic版第一步,安装配置oracle数据库安装oracle最新版的9i什么事都没有,但假如你在P4的机器上装8i可能就会显现问题,点了安装之后没有反应(P4赛扬也存在那个问题)。
假如您是P4的机器又要装8i 的话,那么先按如下方法做。
(1)创建一临时名目,并将Oracle8i的安装源程序拷贝到此名目。
找到名目stage\Components\oracle.swd.Jre\1.1.7.30\1\DataFiles\Expanded\Jre\Windows32 \bin下的 symcJit.dll 的文件,并改名为 symcJit.old。
注意OEM名目下还有一个symcJit.dll文件要改名。
(2)搜索到oraparam.ini文件,打开它,改变行RE_MEMORY_OPTIONS=-mx48m的参数为 JRE_MEMORY_OPTIONS=-noJit -ms16m -mx32m(3)其它的参数保持不变。
MATLAB实现卷积码编译码
本科生毕业论文(设计)题目:MATLAB实现卷积码编译码专业代码:作者姓名:学号:单位:指导教师:年月日目录前言----------------------------------------------------- 1 1. 纠错码基本理论---------------------------------------- 21.1纠错码基本理论 ----------------------------------------------- 21.1.1纠错码概念 ------------------------------------------------- 21.1.2基本原理和性能参数 ----------------------------------------- 21.2几种常用的纠错码 --------------------------------------------- 62. 卷积码的基本理论-------------------------------------- 82.1卷积码介绍 --------------------------------------------------- 82.1.1卷积码的差错控制原理----------------------------------- 82.2卷积码编码原理 ---------------------------------------------- 102.2.1卷积码解析表示法-------------------------------------- 102.2.2卷积码图形表示法-------------------------------------- 112.3卷积码译码原理---------------------------------------------- 152.3.1卷积码三种译码方式------------------------------------ 152.3.2V ITERBI译码原理---------------------------------------- 163. 卷积码编译码及MATLAB仿真---------------------------- 183.1M ATLAB概述-------------------------------------------------- 183.1.1M ATLAB的特点------------------------------------------ 193.1.2M ATLAB工具箱和内容------------------------------------ 193.2卷积码编码及仿真 -------------------------------------------- 203.2.1编码程序 ---------------------------------------------- 203.3信道传输过程仿真-------------------------------------------- 213.4维特比译码程序及仿真 ---------------------------------------- 223.4.1维特比译码算法解析------------------------------------ 233.4.2V ITERBI译码程序--------------------------------------- 253.4.3 VITERBI译码MATLAB仿真----------------------------------- 283.4.4信噪比对卷积码译码性能的影响 -------------------------- 283.4.5码率对卷积码译码性能的影响 ---------------------------- 303.4.6约束长度对卷积码误码性能的影响------------------------ 313.4.7回溯长度对卷积码误码性能的影响 ------------------------ 323.4.8判决方式对卷积码误码性能的影响------------------------ 324. 结论及展望------------------------------------------ 344.1结论-------------------------------------------------------- 344.2展望 -------------------------------------------------------- 355. 结束语----------------------------------------------- 36参考文献------------------------------------------------ 37致谢---------------------------------------------------- 38附录---------------------------------------------------- 39摘要在数字通信系统中,通常采用差错控制编码来提高系统的可靠性。
动态规划:卷积码Viterbi译码算法
动态规划:卷积码的Viterbi译码算法学院:网研院姓名:xxx 学号:xxx 一、动态规划原理动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
动态规划算法通常用于求解具有某种最优性质的问题。
在这类问题中,可能会有许多可行解,每一个解都对应于一个值,我们希望找到具有最优值的解。
动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。
若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。
如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。
动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。
不象搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。
动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。
二、卷积码的Viterbi译码算法简介在介绍维特比译码算法之前,首先了解一下卷积码编码,它常常与维特比译码结合使用。
(2,1,3)卷积码编码器是最常见的卷积码编码器,在本次实验中也使用了(2,1,3)卷积码编码器,下面介绍它的原理。
(2,1,3)卷积码是把信源输出的信息序列,以1个码元为一段,通过编码器输出长为2的一段码段。
该码段的值不仅与当前输入码元有关,而且也与其之前的2个输入码元有关。
如下图所示,输出out1是输入、第一个编码器存储的值和第二个编码器存储的值逻辑加操作的结果,输出out2是输入和第二个编码器存储的值逻辑加操作的结果。
卷积码编码和维特比译码
卷积码编码维特比译码实验设计报告SUN一、实验目的掌握卷积码编码和维特比译码的基本原理,利用了卷积码的特性, 运用网格图和回溯以得到译码输出。
二、实验原理1.卷积码是由连续输入的信息序列得到连续输出的已编码序列。
其编码器将k个信息码元编为n个码元时,这n个码元不仅与当前段的k个信息有关,而且与前面的(m-1)段信息有关(m为编码的约束长度)。
2.一般地,最小距离d表明了卷积码在连续m段以内的距离特性,该码可以在m个连续码流内纠正(d-1)/2个错误。
卷积码的纠错能力不仅与约束长度有关,还与采用的译码方式有关。
3. 维特比译码算法基本原理是将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送序列。
卷积码的Viterbi 译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程,并可以纠正接收码字中的错误比特。
4.所谓“最佳”, 是指最大后验条件概率:P( C/ R) = max [ P ( Cj/ R) ] , 一般来说, 信道模型并不使用后验条件概率,因此利用Beyes 公式、根据信道特性出结论:max[ P ( Cj/ R) ]与max[ P ( R/ Cj) ]等价。
考虑到在系统实现中往往采用对数形式的运算,以求降低运算量,并且为求运算值为整数加入了修正因子a1 、a2 。
令M ( R/ Cj) = log[ P ( R/ Cj) ] =Σa1 (log[ P( Rm/ Cmj ) ] + a2) 。
其中, M 是组成序列的码字的个数。
因此寻找最佳路径, 就变成寻找最大M( R/ Cj) , M( R/ Cj) 称为Cj 的分支路径量度,含义为发送Cj 而接收码元为R的似然度。
5.卷积码的viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程并可以纠正接收码字中的错误比特。
三、实验代码#include<stdio.h>#include "Conio.h"#define N 7#include "math.h"#include <stdlib.h>#include<time.h>#define randomize() srand((unsigned)time(NULL))encode(unsigned int *symbols, /*编码输出*/unsigned int *data, /*编码输入*/unsigned int nbytes, /*nbytes=n/16,n为实际输入码字的数目*/unsigned int startstate /*定义初始化状态*/)////////////////////////////////////////////////////////////////////////////卷积码编码///////////////////////////////////////////////////////////////////////////////{unsigned int j;unsigned int input,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0;for(j=0;j<nbytes;j++){input=*data;data++;*symbols = input^a1^a2^a3^a6; //c1(171)symbols++;*symbols = input^a2^a3^a5^a6; //c2(133)symbols++;a2=a1;a1=input;}return 0;}int trandistance(int m, int state1, int state2)/*符号m与从state1到state2时输出符号的汉明距离,如果state1无法到state2则输出度量值为100*/{int c;int sym,sym1,sym2;sym1=((state2>>1)&1)^(state2&1)^(state1&1);sym2=((state2>>1)&1)^(state1&1);sym=(sym1<<1) | sym2;if ( ((state1&2)>>1)==(state2&1))c=((m&1)^(sym&1))+(((m>> 1)&1)^((sym >> 1)&1));elsec=10000;return(c);}int traninput(int a,int b) /*状态从a到b时输入卷积码的符号*/{int c;c=((b&2)>>1);return(c);}int tranoutput(int a,int b) /*状态从a到b时卷积码输出的符号*/{int c,s1,s2;s1=(a&1)^((a&2)>>1)^((b&2)>>1);s2=(a&1)^((b&2)>>1);c=(s1<<1)|s2;return(c);}////////////////////////////////////////////////////////////////////////////维特比译码///////////////////////////////////////////////////////////////////////////////void viterbi(int initialstate, /*定义解码器初始状态*/int *viterbiinput, /*解码器输入码字序列*/int *viterbioutput /*解码器输出码字序列*/){struct sta /*定义网格图中每一点为一个结构体,其元素包括*/ {int met; /*转移到此状态累计的度量值*/int value; /*输入符号*/struct sta *last; /*及指向前一个状态的指针*/};struct sta state[4][N];struct sta *g,*head;int i,j,p,q,t,r,u,l;for(i=0;i<4;i++) /* 初始化每个状态的度量值*/for(j=0;j<N;j++)state[i][j].met=0;for(l=0;l<4;l++){state[l][0].met=trandistance(*viterbiinput,initialstate,l);state[l][0].value=traninput(initialstate,l);state[l][0].last=NULL;}viterbiinput++; /*扩展第一步幸存路径*/for(t=1;t<N;t++){for(p=0;p<4;p++){state[p][t].met=state[0][t-1].met+trandistance(*viterbiinput,0,p);state[p][t].value=traninput(0,p);state[p][t].last=&state[0][t-1];for(q=0;q<4;q++){if(state[q][t-1].met+trandistance(*viterbiinput,q,p)<state[p][t].met){state[p][t].met=state[q][t-1].met+trandistance(*viterbiinput,q,p);state[p][t].value=traninput(q,p);state[p][t].last=&state[q][t-1];}}}viterbiinput++;} /*计算出剩余的幸存路径*/r=state[0][N-1].met; /*找出n步后度量值最小的状态准备回溯路由*/g=&state[0][N-1];for(u=N;u>0;u--) /*向前递归的找出最大似然路径*/{*(viterbioutput+(u-1))=g->value;g=g->last;}/* for(u=0;u<8;u++)*(viterbioutput+u)=state[u][2].met; */ /*此行程序可用于检测第n列的度量值*/}void decode(unsigned int *input, int *output,int n){int viterbiinput[100];int j;for(j=0;j<n+2;j++){viterbiinput[j]=(input[j*2]<<1)|input[j*2+1];}viterbi(0,viterbiinput,output);}void main(){unsigned intencodeinput[100],wrong[10]={0,0,0,0,0,0,0,0,0,0},encodeoutput[100];int n=5,i,m,j=0,decodeinput[100],decodeoutput[100];randomize();for(i=0; i<n; i++)encodeinput[i]=rand()%2;encodeinput[n]= encodeinput[n+1]=0;encode(encodeoutput,encodeinput,n+2,0);printf("the input of encoder is :\n"); //信息源输入的信息码(随机产生)for(i=0;i<n; i++)printf("%2d",encodeinput[i]);printf("\n");printf("the output of encoder is :\n"); //编码之后产生的卷积码for(i=0;i<(n+2)*2;i++){printf("%2d",encodeoutput[i]);if(i%20==19)printf("\n");}printf("\n");printf("please input the number of the wrong bit\n"); //信道传输收到干扰而产生的错误码scanf("%d",&m);printf("please input the positions of the wrong bit(0-9)\n");for(i=0;i<m;i++){scanf("%d",&wrong[m]);if(encodeoutput[wrong[m]]==0)encodeoutput[wrong[m]]=1;elseencodeoutput[wrong[m]]=0;}printf("the input of decoder is :\n");for(i=0;i<(n+2)*2;i++){printf("%2d",encodeoutput[i]);if(i%20==19)printf("\n");}printf("\n");decode(encodeoutput,decodeoutput,n+2);printf("the output of decoder is :\n");for(i=0;i<n;i++)printf("%2d",decodeoutput[i]);printf("\n");for(i=0;i<n;i++){if(encodeinput[i]!=decodeoutput[i])j++;}printf("the number of incorrect bit is:%d\n",j);}四、实验总结(1)了解实验原理,分析实验所占数组变量很重要,也是相对考虑较多的;(2)对于读写文件,通过本实验更加熟悉;(3)记录实验程序最佳路径是本实验的难点;。
_2_1_7_卷积编码及其维特比译码算法的软件实现
第4卷 第6期信息与电子工程Vo1.4,No.6 2006年12月INFORMATION AND ELECTRONIC ENGINEERING Dec.,2006 文章编号:1672-2892 (2006)06-0467-03(2,1,7)卷积编码及其维特比译码算法的软件实现刘少阳,邹永(国防科技大学电子科学与工程学院,湖南长沙 410073)摘要:提出了一种(2,1,7)卷积编码及其维特比(Viterbi)译码的软件实现方案,在Matlab环境中应用软件技术实现了(2,1,7)卷积码的Viterbi译码器功能。
测试证明,该Viterbi译码算法在低信噪比下的误码率仍能达到10-6。
关键词:卷积编码;维特比译码;Matlab中图分类号:TN957.51+3 文献标识码:ASoftware Implementation of (2,1,7) Convolutional Coding andIts Viterbi Decoding AlgorithmLIU Shao-yang,ZOU Yong(School of Electronic Science and Engineering,National University of Defense Technology,Changsha Hunan 410073,China)Abstract: A software scheme of (2,1,7) convolutional coding and Viterbi decoding technology is presented,which implements Viterbi decoder function of (2,1,7) convolutional code in the Matlab.According to the test, the BER(Bit Error Rate)of Viterbi algorithm can still reach 10-6in the lowSNR( Signal-to-Noise Ratio).Key words: convolutional coding;Viterbi decoding;Matlab1 引言卷积码是由Elias于1955年提出的。
卷积编码和维特比译码的研究及其TMS320c54x上的实现
1.1研究背景
卷积编码和维特比译码是现代通信中普遍应用的技术,由于在现代通信中,大量应用DSP及FPGA等大规模、高速率、可编程芯片,给采用卷积编码和维特比译码带来了实现的可能,卷积编码和维特比译码的方法可以获得比其他编译码额外的编码增益,其应用会更普遍家知道,在实际信道传输数字信号过程中,由于信道传输特性不理想会导致信号波形失真,接收端会不可避免地产生错误判决而产生误码。由信道乘性干扰引起的码间串扰通常可以采用均衡的技术纠正。而对于由信道加性噪声产生的影响,人们研究出了许多差错控制编码技术来解决。而由P.Elias于1955年提出的卷积码就是其中一种性能很好的编码。这种编码是深度空间通信系统和无线通信系统中常用的一种差错控制编码。在编码过程中,卷积码充分利用了各码字间的相关性。在与分组码同样的码率和设备复杂性的条件下,无论从理论上还是从实践上都证明,卷积码的性能都比分组码具有优势。而且卷积码在实现最佳译码方面也较分组码容易。因此卷积码广泛应用于卫星通信,CDMA数字移动通信等通信系统,是很有前途的一种编码方式,对其性能进行研究有很大的现实意义。
第三章是研究在TMS320C54X上实现卷积码编译码的算法。
第四章用matlab语言编程和仿真,对卷积码的性能进了研究,分析了在不同码率、不同约束长度、不同回溯长度以及不同译码判决方式下viterbi译码的性能。
第五部分主要是对本课题的研究进行全文总结。
第二章 相关理论/技术研究
本章主要介绍卷积编码和维特比译码的原理以及其算法,并在文中对其性能就行了分析阐述
1.4本文工作安排
第一章讲述了卷积编码和维特比译码的研究内容和背景。
第二章论述卷积码的编码译码原理,生成矩阵法(输入信息序列与子生成元卷积运算,再将得到的编码按顺序排列得到)、状态图、网格图、树图。译码部分主要论述了viterbi译码基本原理,即以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中量度最小的一条路径作为译码估值输出。
基于维特比算法的卷积码译码实验
基于维特比算法的卷积码译码实验摘要:本文主要简述了卷积码的编码过程,以及维特比算法译码的主要原理,是将接收到的编码序列与所有可能的发送序列作比较,选出汉明距离最小的一个序列作为译码输出。
本文根据维特比算法译码原理在matlab编写了程序仿真,对(2,1,7)卷积码数据进行加高斯白噪声,对比不同信噪比下的维特比译码误比特率。
关键词:卷积码;维特比;误比特率1引言卷积码是一种非分组码,它在1955年被伊利亚斯提出的卷积码在编码时是把k个比特的信息段编写成n个比特的码组,但是其监督码元不仅与当前编码比特信息有关,还与前面(N-1)个比特有关,N为卷积码的编码约束度,卷积码通常记为(n,k,N)[1]。
根据卷积码的特性,它更适合用于前向纠错,对于许多实际情况下它的效果好于分组码,并且运算简单,它尤其适合用在被高斯白噪声所干扰的传输信道[2]。
本文主要探索的是(2,1,7)卷积码的译码算法。
2卷积码的编码原理卷积码的编码器的主要由移位寄存器、模2加法器组成。
如图1[3]所示,为(2,1,7)卷积码的编码示意图,其卷积码的生成多项式的八进制表示为(133,171),八进制133转化为二进制为1011011,其中1比特的位置即代表那个移位寄存器的值作为模2加法器的输入,即生成多项式133描述的是图1中模2加法器输出Y,与此同理,生成多项式171描述的是模2加法器输出X。
至于生成多项式为什么是133和171,这其中涉及到编码的检错纠错能力问题、编码的复杂程度等因素,本文不深入探索这个。
很显然,共需要6个移位寄存器,和两个模2加法器来完成编码。
初始状态时,编码器的移位寄存器的值为0。
如待编码的信息序列为11,当第一个数据从最左端进去时,输出X的值为1,输出Y的值为1。
移位寄存器最右边的值不要了,然后把剩下的移位寄存器的值往右边移动一位,再把数据1放在移位寄存器的最左边。
然后再输入第二位待编码数据1,同理输出X值为0,输出Y的值为1。
卷积码Viterbi译码的FPGA实现
中国新通信2009.11卷积码及其Viterbi 算法的简介卷积码是1955年由Elias 提出,它与分组码不同,分组码是把k 个信息比特的序列编成n 个比特的码组,每个码组的n-k 个校验位仅与本码组k 个信息位有关,而与其他码组无关。
为了达到一定的纠错能力和编码效率,分组码的码组长度一般都比较大。
编译码时必须把整个信息码组存储起来,由此产生的译码延时随n 的增加而增加。
卷积码编码的一般结构如图1所示。
卷积码的概率译码最早始于1961年由Wozencraft 提出的序列译码,1963年由Fano 进行了改进,提出了Fano 算法。
1967年由Viterbi 提出了另外一种概率译码算法Viterbi 译码算法,它是一种最大似然译码算法,在码的约束度较小时,它比序列译码算法效率更高、速度更快,译码器也较简单。
因此,自Viterbi 译码算法提出以来,无论在理论上,还是在实践上都得到了极其迅速的发展。
Viterbi 算法并不等价于最大似然算法,但是,在一定的条件下,Viterbi 算法就是最大似然译码和最佳译码算法。
2Viterbi 算法的FPGA 实现2.1FPGA 的结构和特点随着半导体器件技术的快速发展,专用集成电陈健李广华(天津工业大学信息与通信工程学院天津300160)摘要本文根据卷积码编码的方式,和Viterbi 译码算法,认真分析了Viterbi 译码算法各部分的功能、特点。
采用硬件描述语言Verilog HDL ,编写了(2,1,7)卷积码的编译码程序,进行了Viterbi 译码器的FPGA 设计。
关键词卷积码Viterbi 算法现场可编程门阵列卷积码Vit e rb i 译码的FP GA 实现1k1n输出图1卷积码编码的一般结构图中国新通信经验与交流EXPERIENCE AND EXCHANGE53CHINA NEW TELECOMMUNICATIONS January 2009路(ASIC )的设计技术也随之不断提高和进步,现场可编程门阵列(FPGA )的出现使得系统级集成电路的设计开发成为可能,电子设计自动化(EDA )技术正给整个电子设计领域带来一场新的革命。
数字通信中卷积码Viterbi译码算法的研究及软件实现
数字通信中卷积码Viterbi译码算法的研究及软件实现
赵胜男;朱晓明
【期刊名称】《科技创新导报》
【年(卷),期】2007(000)025
【摘要】介绍了数字通信系统中一种卷积码为特比译码的软件实现算法,在CCS环境实现了(2,1,7)卷积码Viterbi译码功能,在程序实现中充分利用了卷积码的特性,运用网格图和回溯以得到译码输出.
【总页数】2页(P152,154)
【作者】赵胜男;朱晓明
【作者单位】西安电子科技大学ISN国家重点实验室,西安,710071;西安电子科技大学ISN国家重点实验室,西安,710071
【正文语种】中文
【中图分类】TN91
【相关文献】
1.K=9卷积码的Viterbi译码算法及其FPGA实现 [J], 胡爱群;庞康;苏杰
2.卷积码Viterbi译码算法的FPGA实现 [J], 赵旦峰;刘会红
3.卷积码编码及其Viterbi译码算法的FPGA实现 [J], 温学东
4.Punctured(2,1,N)系列卷积码的编码及其Viterbi译码的软件实现 [J], 袁东风;李作为;张锋
5.基于ADSP-BF533的卷积码Viterbi译码算法实现 [J], 李军华;吴淑琴
因版权原因,仅展示原文概要,查看原文内容请购买。
卷积编码及Viterbi解码的FPGA实现及应用
卷积编码及Viterbi解码的FPGA实现及应用何金花;杨金功【摘要】Convolutional code has been widely used in modern wireless communication. Viterbi decoding is a common algo-rithm for convolutional code. The principle of convolutional encoding and Viterbi serial decoding are presented,along with the FPGA implementation. The application of coder and decoder by frame type in real system is discussed in the condition of good performance.%卷积码在现代无线通信系统中应用十分广泛,Viterbi译码是最常用的一种对卷积码的译码算法。
介绍了卷积编码及Viterbi串行解码的原理及其FPGA的实现。
在保证系统性能的前提下讨论了分帧式编解码在实际系统中的应用。
【期刊名称】《现代电子技术》【年(卷),期】2013(000)023【总页数】3页(P30-32)【关键词】卷积码;Viterbi译码;误码率;FPGA【作者】何金花;杨金功【作者单位】陕西凌云电器集团有限公司,陕西宝鸡 721006;陕西凌云电器集团有限公司,陕西宝鸡 721006【正文语种】中文【中图分类】TN919.3-34在现代通信系统中,信道编码技术得到了广泛的应用。
卷积码结构简单,硬件实现容易,同时有着较好的查错纠错能力,因此在无线通信中经常使用,而其解码方式常用Viterbi译码。
1 卷积编码卷积码(Convolutional Coding)是由PgElias于20世纪50年代提出的一种非分组码。
卷积编码和维特比译码的FPGA实现的开题报告
卷积编码和维特比译码的FPGA实现的开题报告一、选题背景卷积编码和维特比译码在通信领域得到了广泛应用,能够有效抵御噪声、降低误码率,是数字通信和卫星通讯等领域中常用的信道编码技术。
在数字信号处理领域,FPGA作为重要的计算平台,具有高速、低功耗等诸多优势。
因此,使用FPGA实现卷积编码和维特比译码算法具有非常重要的现实意义。
二、研究目的本课题旨在通过FPGA实现卷积编码和维特比译码算法,探究其在通讯领域的应用。
具体目标如下:1.实现卷积编码和维特比译码算法的FPGA硬件电路设计;2.分析FPGA实现卷积编码和维特比译码算法的优点和局限性;3.优化FPGA的硬件电路设计,提高卷积编码和维特比译码算法的运算速度和实时性。
三、研究内容和方法1.卷积编码和维特比译码算法的原理研究:了解卷积编码的实现过程,掌握卷积编码器的结构和编码方式,并进一步了解卷积编码的特点和应用场合;了解维特比译码的实现过程,掌握维特比译码器的结构和译码方式,并进一步了解维特比译码的特点和应用场合。
2.卷积编码和维特比译码算法的FPGA硬件电路设计:基于Xilinx Vivado软件平台,进行硬件电路设计,将卷积编码和维特比译码算法实现在FPGA上;实现卷积编码和维特比译码器的硬件电路设计,包括状态寄存器的设计与模块、拓扑控制模块以及输入输出模块的设计等。
3.性能分析和优化:对卷积编码和维特比译码算法的FPGA实现进行性能测试,并对测试结果进行分析和优化;优化FPGA的硬件电路设计,提高卷积编码和维特比译码的运算速度和实时性,同时减少计算资源的消耗,提高系统效率。
四、预期结果和意义本项目成功实现了卷积编码和维特比译码算法在FPGA硬件电路上的实现,并对其性能进行了深入研究和优化,将极大地促进数字通信和卫星通讯等领域的技术发展。
本研究有助于进一步推动FPGA技术的创新和发展,提高系统的运算速度和实时性,在促进通讯技术和工程实践上具有重要意义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种卷积码维特比译码算法的软件实现Ξ张海勇1) 刘文予1) 芦东昕2) 吴 畏2)(华中科技大学电子与信息工程系1) 武汉 430074)(中兴通讯股份有限公司2) 深圳 518057)摘 要提出了数字通信系统中一种卷积码译码的软件实现方案,该方案应用软件技术实现了卷积码维特比译码器功能,在程序实现中充分利用了卷积码的特性,运用蝶形运算,周期性的回溯以得到译码输出。
在程序设计上采用了一些宏定义等处理方法,可以提升运算速度,是一种软件方法的前向纠错编码技术。
关键词:卷积码 维特比译码算法 蝶形运算 回溯中图分类号:TP31A Soft w are Implementation of Viterbi Decoding AlgorithmZhang H aiyong1) Liu Wenyu1) Lu Dongxin2) Wu Wei2)(Dept.of Electronics&Information Engineering1),HUST,Wuhan430074)(ZTE Corporation2),Shenzhen518057)Abstract:A software implementation of a channel coding technology is presented,which realizes the functions of convolution2 al coding and Viterbi decoding.According to convolutional codes feature,this software uses butterfly algorithm which is defined as a macro,periodically traces back to get the decoding output,we also use some other methods in the program,can speed up the al2 gorithm,which belongs to a forward error correction coding technology.K ey w ords:convolutional code,Viterbi decoding algorithm,butterfly algorithm,trace backClass number:TP31 卷积码是由伊莱亚斯(Elias)于1954年首先提出来的。
它充分利用了各组之间的相关性,本组的信息元不但决定本组的监督元,而且也参与决定以后若干组的监督元。
同时在译码过程中,不但从该时刻所收到的码组中提取译码信息,而且还利用以后若干时刻内所收到的码组来提取有关信息。
无论从理论上还是实际上均已证明其性能不差于分组码。
在一些采用了前向纠错的系统里,如GS M/CDM A通信系统、卫星与空间通信系统里广泛采用了卷积码[1]。
卷积码译码器的设计是由高性能的复杂译码器开始的,如最初的序列译码,随着译码约束长度的增加,译码错误概率可达到非常小。
后来慢慢地向低性能的简单译码器演化,对不太长的约束长度,维特比(V iterbi)算法是非常实用的。
维特比算法是一种最大似然的译码方法。
当编码约束度不太大(小于等于10)或者误码率要求不太高(约10-5)时[2],它的设备比较简单,用硬件译码计算速度很快。
本文将给出一种用软件实现卷积码维特比译码算法的设计方法,针对译码中计算量最多的蝶形运算,采用宏定义的方式,并在计算度量长度时采用双数组计算,能够加快译码计算速度。
1 卷积码编码器的参数分析卷积码把信源输出的信息序列以每段k0个码元进行分段,通过编码器输出长为n0的一个码段,该段(n0-k0)个校验元不仅与本段信息元有关,还与其前面m段信息元有关。
卷积码可以用(n0,k0,K)表示,其中(K=m+1)为约束长度,串联的移位寄存器的数目以m表示,一个信息Ξ收到本文时间:2004年12月2日元通过上述编码器,从输入到输出共用(m+1)个时间单元,每一时间单元都输出一个子码,可见编码约束度(K=m+1)。
下面我们以(2,1,7)卷积码为例,来分析卷积码参数的一些特性,我们将在译码程序中利用这些特性简化程序。
编码器如图1所示,连接矢量分别为G1=0x6D,G2=0x4F。
注意连接矢量的两边均取1。
该卷积码编码器由一个包括6个移位寄存器及与之相应的电路连接方式共同确定。
在连接矢量确定的情况下,各移位寄存器的状态组合及其互相转移的情况可以用篱笆图[3]来表示。
图1 (2,1,7)卷积码编码器示意图经过简单计算,我们可以得到编码器的参数具有如下一些特性:(1)编码器共有64种状态,分成状态i(0≤i ≤31,下面均做此假设)和状态i+32的上下两部分。
(2)编码器当前状态为i或i+32时,输入为0时,下一状态均为23i。
(3)编码器当前状态为i或i+32时,输入为1时,下一状态均为23i+1。
(4)编码器当前状态为i,输入为0时,若输出为out0,则编码器当前状态为i+32,输入为0时,输出为3^out0。
(5)编码器当前状态为i,输入为1时,若输出为out1,则编码器当前状态为i+32,输入为1时,输出为3^out1。
2 维特比译码器程序结构设计1)维特比译码器中三个重要的参数有三个重要的参数,它们需要在程序设计中首先确定下来。
(1)路径存贮容量(PA T HM EM):这个参数定义了路径存贮的大小。
使用这个参数我们周期性的回溯以生成译码数据。
PA T HM EM必须大于等于M ER GEDIS T+T RA CE T R U N K,程序实现中通常取2的整数次幂。
(2)合并距离(M ER GEDIS T):理论上,维特比译码是一种最大似然译码是当接收到整个信息后,存贮了整个路径信息长度,才从最终状态(通常为0)开始回溯。
这对于需要较长译码的情形是不现实的。
在实际程序实现中,当存贮的路径信息长度进行到篱笆图较深处时,必须回溯以产生译码输出,避免存贮的路径信息过长发生溢出。
在典型的译码器实现中,这代表了大约是约束长度4~5倍的译码延迟。
当考虑到打孔时,合并距离将会加长。
M ER GEDIS T设置这一参数。
回溯时可以从任意一个当前状态开始,不需要从最小的度量距离节点开始。
(3)回溯路径译码位(T RA CE T R U N K):我们希望每次回溯时能够得到尽可能多的译码输出,但这将增加译码延迟。
T RA CE T R U N K设置当每次回溯时译码的位数。
软件实现时,因每次输出是一个字节8位,所以T RA CE T R U N K是8的倍数。
上述几个参数之间的关系如图2所示:图2 译码参数的关系图2)加比较选择的蝶形运算加比较选择的运算称作蝶形运算是因为图3 蝶形运算关系图在译码篱笆图上分离出来之后形状如图3所示,形状象一个蝴蝶。
每一个蝶形包括当前状态为i和i +32的两个节点的加比较选择运算,它们的0和1分支在篱笆图的下一个节点合并。
为了加快运算速度,程序设计上对蝶形运算采用宏定义的方式,定义两种蝶形运算的宏。
一种设当前度量为cmet ric[],经过分支度量计算后得到nmet ric[]。
另一种则从下一状态nmet ric[]开始,经过分支度量计算后得到cmet ric[]。
3)分支度量的计算在计算分支度量时,通常有软判决和硬判决[4]两种输入,对于硬判决采用汉明距离定义如下:m attab[0][0]=0m attab[0][1]=1m attab[1][0]=1m attab[1][1]=0对于软判决可作相似的定义,但采用的是欧氏距离。
其原则是0与0的欧氏距离为0,0与1的欧氏距离最大,1与1的欧氏距离为0,1与0的欧氏距离最大。
根据软判决的输入位数决定最大欧氏距离的取值。
计算接收到的比特与理论输出比特的距离度量公式如下:mets[i0i1]=m attab[i0][received0]+m at2 tab[i1][received1]其中i0i1为理论输出比特,received0、re2 ceived1为接收到的比特输入。
在本程序的实现中,我们采用硬判决输入,直接用汉明距离进行度量计算。
4)路径存贮记录从当前状态经过加比较选择的蝶形运算后,到达下一状态,通过对每一分支度量的累积计算,留下与接收序列距离最近的幸存路径。
因为共有64种状态,我们定义一个无符号长整型数组path [],其每一元素占4个字节32位,这样用两个元素就可以描述64个状态。
它是这样记录的,path [23pi]记录状态i(0≤i≤31)的变化,path[23 pi+1]记录状态i+32的变化。
path[]的位取值0代表幸存路径的前一状态来自状态的上部分, path[]的位取值1代表幸存路径的前一状态来自状态的下部分。
5)回溯我们在程序中设置一个标志位,当路径存贮记录长度第一次超过回溯路径译码位(T RA CE T R U N K)长度时,将标志位复位,继续进行运算。
当路径存贮记录长度达到定义的路径存贮容量(PA T HM EM)时,选择从任意一个状态开始进行回溯。
先回溯定义的合并距离(M ER GEDIS T)长度,回溯时只是记录状态,不生成输出译码位,然后从刚得到的状态继续回溯以生成输出译码位。
6)程序的流程图程序的流程图如图4所示。
我们在译码器程序里采用读写文件的方式进行输入输出操作。
先对译码器的各种参数初始化,然后打开输入文件读入一个字节,读取字节的前两位计算分支度量,进行加比较选择从cmet ric []计算后得到nmet ric[],再读取两位计算分支度量,进行加比较选择从nmet ric[]计算后得到cmet ric[],循环进行上述数组更新运算,直到输入文件结束。
中间加入一些判断语句以控制程序进行回溯,将得到的译码输出位输出到文件。
图4 程序流程图3 结论及应用维特比译码算法的大部分计算量是在蝶形运算上,本文设计的程序特别对两个蝶形运算进行宏定义,大量的蝶形运算在编译时间里进行宏展开代入表达式,这样运算速度会比子程序设计快,而且不需要大量的寄存器变量,适合软件实现。
因为对每一节点要进行64个数组更新,并记录路径,所以在蝶形运算的顺序上要合理安排次序。
程序中还定义了两个记录度量长度的数组,循环进行数组更新,不需要再定义中间变量或指针进行数组的更新,这也将提升运算速度。
根据本文介绍的维特比译码的软件实现方法,编写了约束长度分别为5、6、7的程序,程序的输入输出采用读写文件的方式,这种非实时的处理便于对算法进行深入的分析,进而提出一些应用策略。
上述维特比译码程序应用在课题组进行的多媒体通信中不平等差错保护的对比实验里。