_2_1_7_维特比译码器结构优化设计与实现(1)
卷积码的维特比译码

卷积码编码原理 维特比译码原理 Matlab实验 DSP仿真实验
1.卷积码编码
卷积编码则把k比特信息段编成n比特的 码组,但所编的n长码组不仅同当前的k 比特信息段有关联,而且还同前面的(N1)个信息段有关联,人们常称这N为该卷 积码的约束长度。
一般来说,对于卷积码,k和n是较小的 整数, 常把卷积码记作(n,k,N)卷积码,它 的编码效率为R=k/n。
据
主程序完成 对输入比特的
译码
探针将已译 码的数据写入
文件
译码实验结果对比
MATLAB译码 结果
DSP译码结 果
图2 :(2,1,2)卷积码的树状图
2.
格图也称网络图或篱笆图,它由状态图在时间上展开而得到,如图3所示。图 中画出了所有可能的数据输入时, 状态转移的全部可能轨迹,实线表示数据为 0, 虚线表示数据为 1, 线旁数字为输出码字,节点表示状态。
图3:(2,1,2)卷积码的网格图
2.卷积码的维特比译码
4.卷积码编码的C54x Simulator仿 真试验
初始化
探针从PC文件 中读取比特数
据
主程序完成 对输入比特的
卷积编码
探针将已编 码的数据写入
文件
编码结果对比
未编码数据
DSP编码后的数 据
MATLAB编码 后的数据
Viterbi译码的C54x Simulator仿真 试验
初始化
探针从PC文件 中读取比特数
维特比译码是一种最大似然译码算法。 最大似然译码算法的基本思路是: 把接收码字与所有可能的码字比较,选择一种码距最小的码字作为解码输出。 由于接收序列通常很长,所以维特比译码时最大似然译码做了简化, 即它把接 收码字分段累接处理,每接收一段码字,计算、 比较一次, 保留码距最小的路 径,直至译完整个序列。
卷积码的维特比译码原理及仿真

卷积码的维特比译码原理及仿真摘 要 本课程设计主要解决对一个卷积码序列进行维特比(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)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。
卷积码(2,1,3)编译码课程设计

- 6 - 《信息论与编码课程设计》 记忆长度(段)
3.2 编码器的一般结构
(1) 有 k 个输入信息端,n 个输出端(k<n),K-1 节移位寄存器(共 需 k(K-1)个寄存器单元) ,称做(n,k,k)卷积码。 (2) 通常称 K 为约束长度(一般来说,约束长度越大,则码字纠错 性能越好) 。 (3) 码的效率:k/n (4) 编码前,k(K-1)个寄存器单元全部复位清零。 (5) 由于一段消息不仅影响当前段的编码输出, 还影响其后 m 段的 编码输出,所以称参量 K m 1 为卷积吗的约束比特长度为
34卷积码卷积码213状态转移状态转移方程方程12132u?????????????电信系08信息工程8信息论与编码课程设计113223vvu????????????35卷积码卷积码213状态转移表状态转移表表一表一u21123vv???21123vv???21123vv???21123vv???s0000s1001s2010s3011000000010111000111011100101011111010011110u21123vv???21123vv???21123vv???21123vv???s4100s5101s6110s7111000011010011001011000100110011001011111101电信系08信息工程9信息论与编码课程设计36卷积码卷积码213状态转移图状态转移图由上面状态转移表得到状态转移的8个状态每一个状态的转移都与当前输入消息lu的状态有关
电信系 08卷积码(2,1,3)
杨耀武 任 刚
张明航 王 唐 飞 军 指导老师:梁维海 刘晓丽
2010.6.25
- 2 - 《信息论与编码课程设计》
目录
(2,1,2)卷积码的译码设计(0)

前言卷积码是由伊莱亚斯(Elias)于1954 年首先提出来的。
它充分利用了各组之间的相关性,本组的信息元不但决定本组的监督元,而且也参与决定以后若干组的监督元。
同时在译码过程中,不但从该时刻所收到的码组中提取译码信息,而且还利用以后若干时刻内所收到的码组来提取有关信息。
无论从理论上还是实际上均已证明其性能优于线性分组码。
近年来众多有关卷积码研究结果表明,卷积码最有希望实现香农信道编码定理。
但卷积码在译码理论及实际应用较为复杂,这些缺点限制了其进一步发展和应用。
维特比译码算法由维特比(Viterbi)1964年提出,算法实质是最大似然译码,但它利用了编码网格图的特殊结构,在网格图中选择一条路径,使相应的译码序列与接收到的序列之间的汉明距(即量度)最小的一种最大似然译码方法,从而大大降低了计算的复杂性。
目前,第三代移动通信系统(3G) 在我国已经开始紧锣密鼓地实施,它带来的高速度、高品质的无线通信服务,将使我们领略到信息技术的无穷魅力。
信道纠错编码技术作为保证信息可靠传输的技术,在3G各系统中广泛采用,并且我们现在所使用的第二代移动通信系统,如GSM、 CDMA 通信系统,还有卫星与空间通信系统广泛采用了卷积码信道编、译码技术。
本次设计将以(2,1,2)卷积码为例,通过单片机,实现卷积码的译码,借助RS232完成单片机与单片机、单片机与计算机的串口通信,借助7279完成键盘扫描和数码管显示。
第一章系统组成及工作原理本次设计的(2,1,2)卷积码的译码由89C52单片机为工具,接收来自另一单片机或计算机的编码信息,通过7279的键盘扫描和数码管显示功能可以方便地观察到单片机接收的信息和译码结果。
其系统框图如下图1-1所示。
MAX232芯片能实现EIA-RS-232C的正负电压与TTL的高低电平之间的转换,通过它能够方便实现单片机与单片机、单片机与计算机间的串口通信。
HD7279是一片具有串行接口的, 可同时驱动8位共阴极数码管的智能显示驱动芯片, 该芯片同时还可连接多达64键的键盘矩阵, 单片即可独立完成显示、键盘接口的全部功能。
卷积编码设计与仿真实验报告

卷积编码设计与仿真实验报告一、实验目的了解卷积码对信号的纠错性能,掌握维特比译码算法,分析卷积码不同码率下纠错能力的强弱,深刻理解CCSDS标准、信道编译码等相关概念和算法。
二、实验内容1、自己编码实现(2,1,3)卷积码的编译码,对比不同信噪比条件下,是否采用编码对于误码率性能的影响;2、基于MATLAB自带的vitdec函数实现对(2,1,7)卷积码以及2/3、3/4码率删除码的编译码,并对于不同码率抗噪声能力的强弱;3、构造BPSK调制、加性高斯白噪声的传输环境。
三、实验原理卷积码一般表示为(n,k,N)的形式,即将k个信息比特编码为n个比特的码组,N为编码约束长度,说明编码过程中相互约束的码段个数。
卷积码编码后的n个码元不仅与当前组的k个信息比特有关,还与前N-1个输入组的信息比特有关。
编码过程中相互关联的码元有N*n个。
R=k/n是编码效率。
编码效率和约束长度是衡量卷积码的两个重要参数。
典型的卷积码一般选n,k较小,但N值可取较大(>10),以获得简单而高性能的卷积码。
1、卷积码的编码原理卷积码的编码器一般比较简单,为一个具有k个输入端,n个输出端,m 级移位寄存器的有限状态有记忆系统。
下图所示为(2,1,7)卷积码的编码器。
图1 (2,1,7)卷积码编码器若输入序列为u=(u0u1u2u3……),则对应两个码字序列 C1=(ca0ca1ca2ca3……)和C2=(cb0cb1cb2cb3……),相应的编码方程可写为 P1=u*C1,P2=u*C2,P=(P1,P2)。
“*”符号表示卷积运算,P1,P2表示编码器的两个冲激响应,即编码器的输出可以由输入序列和编码器的两个冲击响应卷积而得到,故称为卷积码。
这里的冲激响应指:当输入为[1 0 0 0 0 … … ]序列时,所观察到的两个输出序列值。
由于上图N 值为7,故冲激响应至多可持续到第7位,可写为P1=[1 1 1 1 0 0 1],P2=[1 0 1 1 0 1 1]然后将两个输出端的码字序列合并为一个码字序列为C=(ca0cb0ca1cb1ca2cb2……)。
卷积码编码和维特比译码

卷积码编码维特比译码实验设计报告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)记录实验程序最佳路径是本实验的难点;。
卷积码编码与译码
• 例: (n, k, N) = (3, 1, 3)卷积码编码器
– 方框图 输入bi
M1
M2
M3
bi
bi-1
bi-2
ei
di
编码输出
ci
– 设输入信息比特序列是bi-2 bi-1 bi bi+1,则当输入bi时,此编 码器输出3比特ci di ei,输入和输出的关系如下:
ci bi di bi bi2 ei bi bi`1 bi2
由于这是一个(n, k, N) = (3, 1, 3)卷积码,发送序列的 约束度N = 3,所以首先需考察nN = 9比特。第1步 考察接收序列前9位“111 010 010”。由此码的网格 图可见,沿路径每一级有4种状态a, b, c和d。每种状 态只有两条路径可以到达。故4种状态共有8条到达 路径。
维特比译码算法使用最广泛,也是这次课程讨论的重点
输入bi
M1
M2
M3
bi
bi-1
bi-2
以前面介绍的(3,1,3)卷积码为例
移存器前一状态
M3 M2 a (00)
b (01)
c (10)
d (11)
当前输入信息位
bi 0 1
0 1
0 1
0 1
输出码元
cidiei 000 111
001 110
011 100
a 111
b
c 110
d
100 010
a
b 001
c
d
在上图中给出了输入信息位为11010时,在网格图中的编码路径。 图中示出这时的输出编码序列是:111 110 010 100 011…。由上述 可见,用网格图表示编码过程和输入输出关系比码树图更为简练。
一种适用于导航系统的低功耗维特比译码器的开题报告
一种适用于导航系统的低功耗维特比译码器的开题报告一、选题背景随着智能手机的普及,导航系统已经成为现代社会中不可或缺的一部分。
随着导航技术的不断发展,人们对于导航系统的精度和实时性方面的要求也越来越高。
在导航系统中,译码器是实现数据解码的重要部件,而维特比算法则是译码器中最为常用的算法之一。
然而,传统的维特比译码器一般采用高功耗的模拟电路,容易产生电磁干扰和热效应等问题,同时对电池寿命也会造成较大的影响。
因此,如何设计一种低功耗的维特比译码器,成为了当前导航系统中亟待解决的问题。
二、研究目标本文旨在设计一种适用于导航系统的低功耗维特比译码器,具体的研究目标如下:1.基于FPGA设计维特比算法译码器的硬件电路,通过优化算法和设计电路,实现译码器电路低功耗化,提高电路性能。
2.利用VHDL语言对维特比算法进行实现,结合硬件算法实现更加精确的译码运算过程。
3.通过仿真测试,分析设计的译码器电路的性能、功耗、可靠性等指标,验证低功耗维特比译码器的性能优越性。
三、主要研究内容1.维特比算法原理研究维特比算法是基于图论和动态规划的一种译码算法,本文将着重研究其原理和实现过程,为后续的硬件电路设计提供重要的基础。
2.低功耗Viterbi译码器的电路设计在维特比算法的基础上,本文将设计低功耗的Viterbi译码器电路,将模拟电路转化为数字电路的形式,从而大幅度减少系统功耗,提高系统性能。
3.维特比译码器的VHDL实现本文将采用VHDL语言实现维特比算法以及优化后的低功耗译码器电路,从而更加准确地模拟硬件运算过程,并提现出设计的硬件电路可靠性和性能优越性。
4.仿真测试及数据分析本文将通过FPGA工具实现硬件电路的仿真测试,比较分析设计的低功耗译码器电路与传统译码器电路的性能、功耗、可靠性等方面的优劣,从而得出设计成果的分析结论。
四、预期成果1.通过本文的研究,实现低功耗的Viterbi译码器电路,有效提高导航系统中维特比译码过程的性能、功耗和可靠性。
第9章 Viterbi译码及其实现
“黑色经典”系列之《DSP嵌入式系统开发典型案例》第9章Viterbi译码及其实现华清远见<ARM开发培训班>培训教材在通信系统中,信息传输的可靠性和有效性是相当重要的。
信息在传输时是经由信道(Channel)传输。
当其在信道传输过程中会受到各种干扰,使得传输信息掺杂各种错误序列在其中。
因此,在通信系统中,良好的纠错码可以有效地应用在信息传输过程中,以降低信息的误码率。
信息在传输时,先由信源发出消息,如语言、图像、文字等,消息进入通信系统后,经由信源编码器编码成信息序列1。
编码过程中,为了使传输有效,还加上一些与传输信息无关的冗余度。
接着信息序列1经过信道编码器编码成信息序列2,序列2是将信息序列1加入了更多的冗余数据(Redundancy Data),以抵抗信道中的各种干扰。
数字信号一般不适合直接在信道上传输,所以调制器是将数字信号转变成模拟信号,使其在信道中传输。
而信道中难免会受到噪声干扰,使信道的输出序列不同于信道的输入序列。
解调器将信道的输出序列由原来的模拟信号转化成数字信号,既是接收序列3,信息序列中因噪声干扰会掺杂一些错误的码元在其中。
信道译码器利用序列中的冗余码元去纠正错误,并且根据信道译码器的结果,产生接近于信息序列1的接收序列1。
整个译码过程是根据信道编码的结果和噪声在信道中的特性所得到的。
理想的结果是所有的错误都被更正回来,即接收序列等同于发送序列。
9.1 Viterbi译码概述在众多的纠错码中,卷积码(Convolutional Code)是一种在实际中得到广泛应用、性能很好的纠错码。
卷积码是不同于分组码的另一种码,它虽然也是把k个信息比特编成n个比特,但k和n都很小,延时小,特别适宜于以串行形式传输信息。
与分组码不同,卷积码中编码后的n个码元不但与当前段的众个信息码元有关,而且与前面(N−1)段的信息有关,编码过程中相互关联的码元为Nn个。
在编码器复杂程度相同的情况下,卷积码的性能优于分组码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Viterbi 译码器的结构主要包含 4 个基本组成部 分[2]:分支度量单元(BMU:Branch Metric Unit)、 加比选单元(ACS:Add Compare Select)、幸存路 径存储单元(SPM:Survivor Path Memory)和回溯
a 00 b 01 c 10
Bn,i, j
−
Bn,k , j
=
⎪⎧0;
Cij = Ckj
⎪⎩⎨− 2 ynCij + 2 ynCij ; Cij
≠
Ckj
(2)
去掉式(2)中公因子 2,分支度量值可简化为:
Bn,i, j
=
− ynCij
⇒
⎪⎧− ⎪⎩⎨+
yn ; Cij yn ; Cij
=a = −a
(3)
此时仅剩下一个负号,实际算法时可以不用计算负号,而直接将求路径度量值的最小值改为求欧
SMx:表示状态 x 的状态度量值,在这里 x 为 i、j、p、q。 BMxk:表示输入比特为 k(k 为 0 或 l)时,状态 x 的分支度量。这里 x 为 i 或者 j。
130
电路与系统学报
第 15 卷
蝶形单元关系如下:
(1)状态 i 来说,蝶型的状态转移关系为: j = i + 2N−2; p = 2i; q = 2i + 1
关键词:维特比译码器;加比选;蝶形单元;模归一化;回溯;单端口存储器
中图分类号:TN722
文献标识码:A
1 引言
随着现代通信技术的高速发展,对数据传输质量的要求在不断提高,为了提高信号在传输过程中
抵御各种信道损伤(如噪声、干扰以及衰落等)的能力,就需要对信号进行差错控制编码。差错控制
编码可分为卷积码和分组码两种,与线性分组码相比,卷积码充分利用了各组码间的相关性,具有信
1
1S
1
z(m1、m2 )
y(m1, m2 )
图 7 Modified comparator 结构图
第2期
董时华等:(2,1,7)维特比译码器结构优化设计与实现
131
mj
=
⎪⎧m j ; m j > 0
⎨ ⎪⎩m j
+
C 2
;mj
<
0
无符号数比较器(unsigned comparator)的输出满足:
(5)
(2)对于分支度量值: BM i0 = BM j1 =~ BM j0 ; BM i1 =~ BM i0
(6)
(3)对于状态度量值:
SM p = Min[(SM i + BM i0 ), SM j + BM j0 ]; SM q = Min[(SM i + BM i1), SM j + BM j1];
2's Complement
8
8 m1
Adder
8
Modified
Comparator
2's Complement
Adder
88
8 m2z(m1、m2 )
M U X
1
图 6 设计使用的 ACS 结构图
8 SMp Sp
8 m1 m2 8
1 m1p 1 m2 p 8 m1p
8 m2 p
unsigned comparator
m2
m1
0
(2)路径度量值之差是有界的。
可以证明每一时刻计算出的状态度量值的最大值和最小值间满
m1 m1
足关系:
α
∆max =| SM max − SM min |≤ mB
(8)
−C 2
m2
对 于 (2,1,7) 维 特 比 译 码 器 而 言 , m = N -1 = 6 ,
m2
0
B = n × 7 = 2 × 7 = 14 ,则 ∆max = 84 < 128 。模归一化方法中,将状态 j
12
n
图 1 卷积码编码器一般形式
个比特有关,而且与前面连续的 N-1 个时刻输入的信息比特有
x0
关,此时编码器共有 2Nk 个状态,如果输入的信息序列长度为 输入序列
Lk+Nk(后 Nk 个码元全 0),则进入和离开每一个状态各有 2k
S0 S1 S2 S3 S4 S5 S6
条分支,2Lk 条不同的路径[1]。 维特比译码是一种最大似然译码算法,相比其它译码方法,
值,从而使调整后的当前状态最小度量为 0。然而这个方法的主要缺点是路径度量最小值的选取工作
在 N 比较大时(如 N=7)消耗的硬件开销成指数倍增大,功耗也会随之增加,同时整个过程不能并行 完成,降低了数据吞吐率。此时可以采用求模归一化[6]运算方法。
求模归一化的基本理论依据是 Viterbi 算法有两个特性: (1)译码输出只与路径度量值之差有关;
3.1 分支度量单元(BMU)的设计 路径度量单元用于计算实际接收到的码元与期望码元之间的差值。采用欧几里得距离度量[3,4,9]时,
如果在时刻 n 译码器接受到的软判决数据为 yn,卷积码编码输出为 Cij,则分支度量值表示为:
Bn,i, j = ( yn − Cij )2 = yn2 − 2 ynCij + Ci2j
t1 00
a
t2 00
a
t3 00
a
t4 00
a
t5
t6
00
a
a
11
11
11
11
11
b
b 11 b 11 b 11 b
00
00
00
10
10
10
10
01 c 01 c 01 c 01 c
d 11
01 d 10
01 d 10
01 d 10 d
图 3 (2,1,3)卷积码网格图
单元(TB:Trace Back)。下面将依次描述这些电路单元的具体实现方法和结构。
的计算,比较并选出幸存路径信息和相应新的幸存路径度量值。在完成状态度量的计算和幸存路径的
更新功能时,它的蝶型运算[5]单元包含了旧状态和新状态,四条相互关联的分支。蝶型运算的结构如
图 4 所示,当输入比特为‘0’时,那么状态 i 和 j 都走实线表示的上支路(BMi0,、BMj0)到达状态 p, 当输入比特为‘1’时,那么状态 i 和 j 则都走下支路(BMi1、BMj1)到达状态 q。
(1)
式(1)中 n 为时间节点,i,j 为 n 时刻任意的两种状态。因为维特比算法中决定幸存路径输出的是度
量值间的差值,度量值同时加减一个常量都不会改变度量值间的差值,所以只需关注度量值之差即可。
而对给定的时间节点 n,接收的输入码序列 yn 一定,只需考虑编码输出 Cij 的二进制表示情况。
当卷积码编码输出 Cij 表示为 a 和-a 形式时,分支度量值差值可以表示为:
(1. 中国人民解放军理工大学 通信工程学院,江苏 南京 210007;2. 东南大学 射频与光电集成电路研究所;江苏 南京 210096)
摘要:对于维特比译码器设计与实现时速度的制约问题,通过优化加、比、选各单元模块结构,采用模归一化路
径度量值和全并行的 ACS 结构,简化了 ACS 硬件实现的复杂度并极大地提高了运算速度,为了提高数据吞吐率,幸
存路径存储与回溯单元使用 4 块 SRAM 优化数据的存储、回溯和译码。利用 TSMC 0.18 逻辑工艺,实现了一种回溯
度为 64、3bit 软判决的(2,1,7)维特比译码器,在 1.98V,125℃操作环境下,使用 Design Compiler 逻辑综合后静态时序
分析,显示数据最大吞吐率为 215Mb/s,Astro 自动布局布线后的译码器芯片内核面积为 1.56mm2,功耗约为 103mW。
几里得距离的最大值即可。此时度量值表示为: Bn,i, j = ynCij
(4)
最终简化后的式(4)是具体实现电路的分支度量计算式,当 a 取值 1 时,即使用+1 和-1 分别表
示 0 和 1。采用 3bit 软判决量化,将由于信道干扰,到达译码器的信 号二进制编码 011、010、001、000、111、110、101、100 所对应的量 化电平分别定义为 3、2、1、0、-1、-2、-3、-4。此时支路度量值范
BMi0 5
将射线盘绕成一个周长为 C、直径为 C /π
SMi 8
的圆,每个 mj 对应圆周上的点 m j ,而点
m j 对应圆周上的角度为 2πm j / C 。度量值
m1
和
m2
间的差值满足
|
m1
−
m2
|≤
C 2
,且
BMj0 5 SMj 8
∆max
≤
C 2
。此时当
C
≥
2∆max
取值
C=256
时,
度量值归一化就等同于用 8 比特补码表示度量值,可以
y(m1,
m2
)
=
⎪⎧1, ⎨
m1
<
m2
⎪⎩0, m1 > m2
改进的比较器(Modified Comparator)的输出为:
满足:
z(m1、m2 ) = m1 ⊕ m2 ⊕ y(m1, m2 )
z(m1、m2
)
=
⎧1, ⎨
m1
⎩0, m1
< m2 > m2
(10)
(11) (12) (13)
3.3 幸存路径存储单元和回溯单元设计
第 15 卷 第 2 期 2010 年 4 月
文章编号:1007-0249 (2010) 02-0128-06
电路与系统学报 JOURNAL OF CIRCUITS AND SYSTEMS