文档库 最新最全的文档下载
当前位置:文档库 › Viterbi译码器的优化设计

Viterbi译码器的优化设计

Viterbi译码器的优化设计
Viterbi译码器的优化设计

基金项目:华为研究基金资助项目

收稿日期:1999-10-18; 定稿日期:2000-01-05

第30卷第3期2000年6月

微电子学M icroelectronics V o l .30,№3Jun .2000

文章编号:1004-3365(2000)03-0168-04

Viterbi 译码器的优化设计

秦 东,肖 斌,李志勇,周 汀

(复旦大学 专用集成电路与系统国家重点实验室,上海 200433)

 

摘 要: Viter bi 译码器中的大容量、宽带宽存储器限制了译码器的速度和系统的功耗,合理地组织这个存储器是提高译码器速度,降低系统功耗的关键。从电路系统角度分析了Viterbi 译码器的结构,提出了一种优化设计方案。

关键词: 专用集成电路;Viter bi 译码器;存储器管理;卷积编码中图分类号: T N492文献标识码: A

 

Optimized Architectural Design of Viterbi Decoders

QIN Dong ,XIAO Bin ,LI Zhi -yong ,ZHOU T ing

(S tate K e y L ab .o f AS I C &Systems ,Fud an Univ ersity ,S hang hai 200433,China )

 

Abstract : T he need o f V iter bi deco der s for lar ge mem or y w ith w ide bandw idth limits the speed o f the deco der

and it consum es mo st po w er o f t he w hole sy stem.So ,pr oper manag ement o f the m em or y is the key t o get a hig h-speed and low -po wer V iter bi deco der.An o ptimized a rchitectur al desig n o f V iter bi deco der is descr ibed in the paper .

Key words : A SIC;V it erbi decoder;M emor y m anag ement;Co nvolutio nal encoder EEACC : 1265 

1 引 言

卷积编码和Viterbi 译码是一种有效的前向纠错方法,广泛应用在深空通信、卫星通信和移动通信中[1]。Viterbi 译码算法是用于卷积码译码的一种最大似然译码算法,其复杂性随约束长度的增长呈指数增长。在当前的某些应用中,对Viterbi 译码器提出了更高的性能要求,往往采用长约束长度的卷积码,使译码需要大容量宽带宽的存储器,降低译码器的速度,增加功耗。在一些文章里提出了改进的Viterbi 算法

[2,3]

,虽然可以减小存储器容量,但译码

器性能会下降。本文从电路系统角度分析了Viterbi 译码器的结构,提出了一种结构优化设计方法,并用这种优化结构实现了一个用于无线多媒体通信中的Viterbi 译码器。

2 V iterbi 译码器系统结构

Viterbi 算法是一种估计一个有限状态过程中

状态序列的最优算法。以下简单介绍Viterbi 算法的基本概念和系统结构,包括一些符号和术语。

卷积编码器的简单结构如图1所示。输入信息符号m i 是M 进制的,编码得到的数据c i 是当前符号m i 和前k 个存储在移位寄存器中的符号的函数。得到c i 后,移位寄存器在时钟作用下移位,状态由(m i -1,m i -2,…,m i -k )变成(m i ,m i -1,…,m i -k +1)。卷积码的约束长度就是k +1。

图1 卷积编码器

卷积编码器送出的码序列为C ,经过信道传输后送入译码器的是序列R 。译码器根据接收序列R,按最大似然译码准则力图寻找出编码器的状态变化过程。这个过程就是译码器计算寻找有最大度量的路径过程,即寻找

max j M (R C j ), j =1,2,…,M k

的过程。式中,M (R C j )=lo g P (R C j ),称为C j 的

路径度量。在实际运用中,为了简化运算,用软判决距离来作为度量[1],这样译码过程就是译码器计算

寻找具有最小度量的路径过程。

图2 (a)基2网格图;(b)A CS 操作

Viter bi 算法可以用网格图来表示,它是一个时间序列的状态图。一个简单的表示2个状态的状态转移网格图如图2(a)所示。在n -1时刻,两个可能状态根据输入可以转移到n 时刻的两个状态。每一种可能的状态转移都根据接收到的有噪声的观测值计算得到的似然度加权。Viter bi 算法就是通过在网格图中寻找最小权重路径(幸存路径)来判决最大似然状态序列。网格图中在n 时刻的状态S 对应了状

态路径度量M S n 和判决d S n ,M S

n 是到达这个状态的路径度量累加,d S

n 是到达这个状态的幸存路径的标识。每次状态转换都是由前一时刻的状态x i 到下一时刻状态j x ,其中,i 是移出移位寄存器的位数,j 是下一个输入位数,x 表示移位寄存器中间几位。这个状态转移的似然度由分支度量B jxi

表示。给定时刻n -1的状态路径度量,在时刻n 的状态0x 的度量是:

M 0x n =min (M x 0n -1+B 0x 0n ,M x 1n -1+B 0x 1

n )

判决就是得到更新的最小度量的前序状态移出位数(

i )。这个递归的度量更新就是ACS 操作,如图2(b)所示。

输入序列的译码是路径回搜的递归过程。对于任意一个起始状态S n 和它的判决d S n ,前一状态就是S n -1=(S n 1)d S n 。这个递归过程进行L 次,L 是幸存路径长度。遍历了幸存路径上的每个状态后,就可以得到时刻n -L 的状态转移输入的译码。

译码器的框图如图3所示。接收到的卷积码先进行分支度量计算,就是计算接收码的似然程度。然后通过A CS 计算每个卷积码状态的路径度量,得到幸存路径,路径度量存储在度量存储器中,幸存路径存储在路径存储器中。最后由最大似然判决得到译码输出。

图3 V iter bi 译码器框图

从图3可见,整个系统共需大量的存储单元,这

些存储单元所需功耗要占整个系统功耗的很大一部分。因此合理地安排两部分存储单元,是避免存储器读写出现瓶颈,提高速度、降低功耗的关键。

3 V iterbi 译码器的路径度量存储器

路径度量存储器中的路径度量被读出后送到ACS 中,得到新的路径度量,然后回写到路径存储器中。路径度量存储器中有2k 个路径度量,度量的精度由约束长度和软判决级数决定[5]。每接收一个编码符号,每个状态的路径度量都有一次读出和一次写入操作。若这2k

个路径度量存在一块RAM 中,当k 一定大时,要求的存储器读写周期会很短,以至现有的PLD 甚至ASIC 都很难达到。有两种途径来解决这个问题,一种是改进Viter bi 算法,减少路径度量存储器读写次数;另一种是将这2k 个路径度量分块,各块并行读写,降低单块存储器的读写频率。

在实现Viter bi 译码器的时候,因为时刻n 的路径度量是用时刻n -1的路径度量计算得到的,所以必须加倍缓存路径度量。但路径度量计算的一个特点是N 个当前状态(y ,j i ,j i -1,…,j i -p )的路径度量

是由N 个前序状态(j i ,j i -1,…,j i -p ,x )的路径度量计算得到的,而x 和y 都有N 种可能。这样,在N 个路径度量被读出后,新计算出来的N 个路径度量可以存进去,不需要加位缓存路径度量。这种蝶形路

径存储器组织方法类似于离散傅里叶变换[6]

,如图4所示,每个存储单元里的路径度量对应的状态随

时间变化。

图4 蝶形路径度量存储器组织

表示Viterbi 算法的2k

个状态的网格图可以分解成2k -v 个子网格图,每个子网格图是2v 个状态的网格图[4]。每个k 阶的子网格图可折叠成一个一阶

的基2v

的网格图。图5所示是8状态的网格图的分解和折叠。新网格图表示的状态转移和原来的网格图中的状态转移是一一对应的,所以不会影响译码

性能。这样,每两个时刻才计算一次2k

个状态的路径度量,其存储器的读写次数减少了一半。这种基4的网格图中时刻n 状态00x 的路径度量是:

M 00x n =min(M x 00n -2+B 0x 00n -1+B 0x 00n ,M x 01n -2+B 0x 01n -1+B 0x 00

n ,

M x 10n -2+B 0x 10n -1+B 00x 1n ,M x 11n -2+B 0x 11n -1+B 00x 1n )

由此可以看出,在将网格图分解和折叠后,会使ACS

的运算更复杂。

 图5 (a )8状态基2网格图,(b)4状态子网格分解图,

(c )8状态基4网格图

这种状态转移网格图折叠后可以继续折叠,变成基8或基16的网格图。这样可以进一步减少路径度量存储器的读写次数,但过多的折叠会使ACS 运算单元的面积增大,速度减慢,甚至成为计算瓶颈。

降低对存储器速度要求的另一个方法是将存储

器分块,各块并行读写。需要注意的是恰当地选择各状态的ACS 计算顺序是两块路径度量存储器读写顺畅的保证。

4 V iterbi 译码器的幸存路径存储器

ACS 在计算出一个状态的路径度量的同时,也计算出了到达这个状态的路径转移信息,这个路径转移信息就保存在幸存路径存储器中。为了最小误码率,幸存路径的长度应该尽可能的长。在实际应用

中,幸存路径通常取4到5倍约束长度[7]

。幸存路径存储器的组织采用类似指针的方法,将幸存路径分成两部分,前序状态的幸存路径和指向前序状态的指针。对于采用基4算法,时刻n 的状态S 的可能前序状态有4个,因此用一个两位的指针来表示经ACS 计算找出的在n-2时刻的前序状态S ,比如当前状态是(0,0,x ),其前序状态是(x ,1,0),则指针就是(1,0)。这个指针就是ACS 计算得到的判决d S

n 。

状态S 存储的幸存路径就是状态S ′的幸存路径和指向状态S ′的指针。同样,状态S ′存储的幸存路径是它在n -4时刻的前序状态S 的幸存路径和指向S 的指针。这样,每个状态的幸存路径就分成16个单元,每单元2位。

在幸存路径存储器写满后要进行截尾译码,只有这时才读取幸存路径存储器,因此,在组织幸存路径存储器时,不是像路径度量存储器那样存储器单元对应的状态随时间变化。幸存路径存储器可看作一个存储器阵列,每列对应一个状态,一列中的每个单元存储了1个2位指针。与路径度量存储器相同的是,幸存路径存储器也可分块。

截尾译码的过程就是找出当前时刻n 的所有状态中具有最小路径度量的状态S ,这个状态对应的幸存路径就是最大似然路径,然后根据存储的指针找到其n -2时刻的前序状态S ,再根据状态S 存储的n -2时刻的指针找到其n -4时刻的前序状态S ,以此类推,直到找到起始状态,它的最高两位就是基4算法的译码输出。

5 A CS

前面提到,为了减少存储器的读写次数,采用了基4的ACS,路径度量存储器和幸存路径存储器都分成两块。当要求高速译码时,通常用多个ACS 并行工作。ACS 执行的是状态路径度量的更新操作,它需要不断读出路径度量作为操作数,然后将更新的路径度量写回存储器。根据路径存储器的蝶形组

织可知,计算n 时刻状态00x 的路径度量M 00x

n 需要

4个度量M x 00n -2、M x 01n -2、M x 10n -2和M x 11

n -2。

当存储器分块

时,它们可能存在一块路径度量存储器中,也可能分别存在各块存储器中。各块路径度量存储器是并行读写的,所以必须适当安排ACS 读取次序。解决方法是当一个ACS 计算状态S 的路径度量时,另一个ACS 计算状态S ~的路径度量,其中S ~是S 的按位取反。这两个状态的路径度量各存在一块路径度量存储器中,两个存储单元的地址也是按位取反的关系。状态S 的四个可能的前序状态与状态S ~的四个可能的前序状态和这些前序状态的路径度量存储单元的地址也有一一对应按位取反的关系,也就是说在读写一块路径度量存储器时,这个地址按位取反得到的就是另一块路径度量存储器的读写地址。这样,两块路径度量存储器只用一个地址产生器和一个读写使能信号。对于幸存路径存储器,写地址也是这

样。

图6 (a )基4网格图;(b )基4A CS

6 结 论

卷积编码和Viterbi 译码是一种有效的前向纠错方法,广泛应用在深空通信、卫星通信和移动通信中。Viterbi 译码算法的复杂性随约束长度的增长呈指数增长。本文介绍了一种Viter bi 译码器的结构优化设计,主要内容就是存储器的组织和管理,这种结构很容易用IC 实现,也可用某些PLD ,如Altera 的FLEX10K 实现。用这种结构实现了一个约束长度为9,编码速率为512kbps,码率为1/2的卷积码的Viterbi 译码器。这种约束条件的卷积码和Viter bi 译码器被用在无线多媒体通信中。如果要求Viter bi 译码器的译码速率更高,则需用全并行的ACS [8]。这时,路径度量和幸存路径都只能存储在寄存器中,不适合上面提出的结构。

参考文献:

[1]

王新梅 编著.纠错码与差错控制[M ].北京:人民邮电出版社,1989:297~386.

[2]K ubo ta S ,Kat o S ,Ishitani T .N ov el V iter bi decode

V L SI implementat ion and its per fo rmance [J ].IEEE T rans Communication,1993;41(8):1170~1178.[3]Hashimo to T .A list-ty pe r educed-constr aint

g eneralization o f t he V iter bi alg or ithm [J ].IEEE T ra ns Infor mation T heor y ;1987;33(6):866~876.

[4]Black P J,M eng T H.A unified appr oa ch to the

V iter bi a lg or ithm state metric update fo r shift r egister pr ocesses [A ].In :P ro c I CA SSP [C ],1992,629~632.

[5]Hekstr a A P.A n alter nat ive to metr ic r escaling in

Viterbi deco der s [J ].IEEE T r ans Co mmunicatio n ,1989;37(11):1220~1223.

[6]Rader C M.M emo ry manag ement in a Viterbi deco der

[J ].IEEE T r ans Communication,1981;29(9):1399~1401.[7]O nyszchuk I M .T r uncation lengt h fo r V iter bi

decoding [J].IEEE T rans Communication,1991;39(7):1023~1026.

[8]Black P J ,M eng T H .A 140-M b /s ,32-st ate ,radix -4

V iter bi deco der [J].IEEE J So lid-State Cir cuit ,1992;

27(12):1877~

1885.

作者简介: 秦 东(1975— ),男,1987年毕业于复旦大学电子工程系,现为复旦大学专用集成电路与系统国家重点实验室硕士研究生,主要从事通信A SIC 及系统的研究。

数据结构哈夫曼编码译码器课程设计报告

JAVA语言实验报告 学院计算机工程学院班级计算1013 姓名佐伊伦学号 201081xxxx 成绩指导老师 xxxx 2012年09月03日

目录 目录 (1) 1 课程设计的目的和意义 (2) 2 需求分析 (3) 3 系统(项目)设计 (5) ①设计思路及方案 (5) ②模块的设计及介绍 (5) ③主要模块程序流程图 (8) 4 系统实现 (11) ①主调函数 (12) ②建立HuffmanTree (12) ③生成Huffman编码并写入文件 (15) ④电文译码 (16) 5 系统调试 (17) 参考文献 (21) 附录源程序 (22)

1 课程设计的目的和意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 作为信息管理专业的学生,我们应该很好的掌握这门技术。在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。 在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;通过编写实验代码和调试运行,我们可以逐步积累调试C程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。 在课程设计过程中,我们不但有自己的独立思考,还借助各种参考文献来帮助我们完成系统。更为重要的是,我们同学之间加强了交流,在对问题的认识方面可以交换不同的意见。同时,师生之间的互动也随之改善,我们可以通过具体的实例来从老师那学到更多的实用的知识。 数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。课程设计是一个重要的教学环节。我们在一般情况下都能够重视实验环节,但是容易忽略实验的总结,忽略实验报告的撰写。通过这次实验让我们明白:作为一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。只有这样,我们的综合素质才会有好的提高。

Viterbi译码的Matlab实现

2010年12月(上) Viterbi 译码的Matlab 实现 张慧 (盐城卫生职业技术学院,江苏盐城 224006) [摘要]本文主要介绍了Viterbi 译码是一种最大似然译码算法,是卷积编码的最佳译码算法。本文主要是以(2,1,2)卷积码为例,介 绍了Viterbi 译码的原理和过程,并用Matlab 进行仿真。[关键词]卷积码;Viterbi 译码 1卷积码的类型 卷积码的译码基本上可划分为两大类型:代数译码和概率译码,其中概率译码是实际中最常采用的卷积码译码方法。 2Viterbi 译码 Viterbi 译码是由Viterbi 在1967年提出的一种概率译码,其实质是最大似然译码,是卷积码的最佳译码算法。它利用编码网格图的特殊结构,降低了计算的复杂性。该算法考虑的是,去除不可能成为最大似然选择对象的网格图上的路径,即,如果有两条路径到达同一状态,则具有最佳量度的路径被选中,称为幸存路径( surviving path )。对所有状态都将进行这样的选路操作,译码器不断在网格图上深入,通过去除可能性最小的路径实现判决。较早地抛弃不可能的路径降低了译码器的复杂性。 为了更具体的理解Viterbi 译码的过程,我们以(2,1,2)卷积码为例,为简化讨论,假设信道为BSC 信道。译码过程的前几步如下:假定输入数据序列m ,码字U ,接收序列Z ,如图1所示,并假设译码器确知网格图的初始状态。 图1 时刻t 1接收到的码元是11,从状态00出发只有两种状态转移方向,00和10,如图a 所示。状态转换的分支量度是2;状态转换的分支径量度是0。时刻t 2从每个状态出发都有两种可能的分支,如图b 所示。这些分支的累积量度标识为状态量度┎a ,┎b ,┎c ,┎d ,与各自的结束状态相对应。同样地,图c 中时刻t 3从每个状态出发都有两个分支,因此,时刻时到达每个状态的路径都有两条,这两条路径中,累积路径量度较大的将被舍弃。如果这两条路径的路径量度恰好相等,则任意舍弃其中一条路径。到各个状态的幸存路径如图d 所示。译码过程进行到此时,时刻t 1和t 2之间仅有一条幸存路径,称为公共支(com-mon stem )。因此这时译码器可以判决时刻t 1和t 2之间的状态转移是00→10;因为这个状态转移是由输入比特1产生的,所以译码器输出1作为第一位译码比特。由此可以看出,用实线表示输入比特0,虚线表示输入比特1,可以为幸存路径译码带来很大的便利。注意,只有当路径量度计算进行到网格图较深处时,才产生第一位译码比特。在典型的译码器实现中,这代表了大约是约束长度5倍的译码延迟。 图2幸存路径选择 在译码过程的每—步,到达每个状态的可能路径总有两条,通过比较路径量度舍弃其中一条。图e 给出了译码过程的下一步:在时刻t 5到达各个状态的路径都有两条,其中一条被舍弃;图f 是时刻t 5的幸存路径。注意,此例中尚不能对第二位输入数据比特做出判决,因为在时刻t 2离开状态10的路径仍为两条。图g 中的时刻t 6同样有路径合并,图h 是时刻t 6的幸存路径,可见编码器输出的第二位译码比特是1,对应了时刻t 2和t 3之间的幸存路径。译码器在网格图上继续上述过程,通过不断舍弃路径直至仅剩一条,来对输入数据比特做出判决。 网格图的删减(通过路径的合并)确保了路径数不会超过状态数。对于此例的情况,可证明在图b 、d 、f 、h 中,每次删减后都只有4条路径。而对于未使用维特比算法的最大似然序列彻底比较法,其可能路径数(代表可能序列数)是序列长度的指数函数。对于分支字长为L 的二进制码字序列,共有2L 种可能的序列。下面我们用Matlab 函数viterbi (G,k,channel_output )来产生输入序列经Viterbi 译码器得到的输出序列,并将结果与输入卷积码编码器的信息序列进行比较。在这里,G =g ,k=k0,channel_output=output 。用Matlab 函数得到的译码输出为10011100110000111,这与我们经过理论分析得出的结果是一致的。 我们用subplot 函数将译码器最终的输出结果与(下转第261页) 250

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芯片实现卷积码的维特比译码算法的仿真和运行。 关键词: 卷积码维特比译码DSP Convolutional codes and Viterbi decoding analysis and realization Zhang 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 V iterbi 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 V iterbi 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. 1

译码器实验报告

译码器实验报告 实验三译码器及其应用 一、实验目的 1、掌握译码器的测试方法。 2、了解中规模集成译码器的功能,管脚分布,掌握其逻辑功能。 3、掌握用译码器构成 组合电路的方法。4、学习译码器的扩展。 二、实验仪器 1、数字逻辑电路实验板1块 2、74hc138 3-8线译码器2片 3、74hc20 双4输入与非 门1片 三、实验原理 1、中规模集成译码器74hc138 74hc138是集成3线-8线译码器,

在数字系统中应用比较广泛。图3-1是其引脚排列。其中a2 、a1 、a0 为地址输入端,0y~7y为译码输出端,s1、2s 、3s 为使能端。74hc138真值表如下:74hc138引脚图为:74hc138工作原理为:当s1=1,s2+s3=0时,电路完成译码功能,输出低电平有效。其 中: 2、译码器应用 因为74hc138 三-八线译码器的输出包括了三变量数字信号的全部八种组合,每一个输出端表示一个最小项,因此可以利用八条输出线组合构成三变量的任意组合电路。 四、实验内容 1、译码器74hc138 逻辑功能测试(1)控制端功能测试测试电路如图:按上表所示条件输入开关状态。观察并记录译码器输出状态。led指示灯亮为0,灯不 亮为1。

(2)逻辑功能测试 将译码器使能端s1、2s 、3s 及地址端a2、a1、a0 分别接至逻辑电平开关输出口,八个输出端y7 ?????y0依次连接在逻辑电平显示器的八个输入口上,拨动逻辑电平开关,按 下表逐项测试74hc138的逻辑功能。 2、用74hc138实现逻辑函数y=ab+bc+ca 如果设a2=a,a1=b,a0=c,则函数y 的逻辑图如上所示。用74hc138和74hc20各一块 在实验箱上连接下图线路。并将测试结果下面的记录表中。 3、用两个3线-8线译码器构成4线-16线译码器。利用使能端能方便地将两个3/8译码器组合成一个4/16译码器,如下图所示。 五、实验结果记录:2、74hc138实现逻辑函数y=ab+bc+ca,实验结果记录: 六、实验注意事项

Viterbi译码的MATLAB仿真研究

BUPT 卷积码编码及Viterbi译码 班级:07114 学号:070422 姓名:吴希龙 指导老师:彭岳星 邮箱:FusionBupt@https://www.wendangku.net/doc/c91278696.html,

1. 序言 卷积码最早于1955年由Elias 提出,稍后,1957年Wozencraft 提出了一种有效地译码方法即序列译码。1963年Massey 提出了一种性能稍差但是比较实用的门限译码方法,使得卷积码开始走向实用化。而后1967年Viterbi 提出了最大似然译码算法,它对存储级数较小的卷积码很容易实现,被称作Viterbi 译码算法,广泛的应用于现代通信中。 2. 卷积码编码及译码原理 2.1 卷积码编码原理 卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。卷积码一般表示为(n,k,K)的形式,即将k 各信息比特编码为n 个比特的码组,K 为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的n 各码元不经与当前组的k 个信息比特有关,还与前K-1个输入组的信息比特有关。编码过程中相互关联的码元有K*n 个。R=k/n 是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选n,k 较小,但K 值可取较大(>10),以获得简单而高性能的卷积码。 卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。 2.1.1 卷积码解析表示法 卷积码的解析表示发大致可以分为离散卷积法,生成矩阵法,码多项式法。下面以离散卷积为例进行说明。 卷积码的编码器一般比较简单,为一个具有k 个输入端,n 个输出端,m 级移位寄存器的有限状态有记忆系统。下图所示为(2,1,7)卷积码的编码器。 若输入序列为u =(u 0u 1u 2u 3……), 则对应两个码字序列c ①=(c 0①c 1①c 2①c 3①……)和c ②=(c 0②c 1②c 2②c 3② ……) 相应的编码方程可写为c ①=u ?g ①,c ②=u ?g ②,c=(c ①,c ②)。 “?” 符号表示卷积运算,g ①,g ②表示编码器的两个冲激响应,即编码器的输出可以由输入序列和编码器的两个冲击响应卷积而得到,故称为卷积码。这里的冲激响应指:当输入为[1 0 0 0 0 … … ]序列时,所观察到的两个输出序列值。由于上图K 值为7,故冲激响应至

Matlab的卷积码译码器的仿真要点

基于Matlab的卷积码译码器的 设计与仿真 学生姓名:指导老师:** 摘要本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出, 并通过Matlab软件进行设计与仿真,并进行误码率分析。在课程设计中,系统开发平台为Windows Vista Ultimate,程序设计与仿真均采用Matlab R2007a(7.4),最后仿真详单与理论分析一致。 关键词课程设计;卷积码译码器;Matlab;Simulink;设计与仿真 1引言 本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出,并通 过Matlab软件进行设计与仿真。卷积码的译码有两种方法——软判决和硬判决,此课程设计采用硬判决的维特比译码。 1.1课程设计目的 卷积码是一种向前纠错控制编码。它将连续的信息比特序列映射为连续的编码器输出符号。这种映射是高度结构化的,使得卷积码的译码方法与分组码译码所采用的方法完全不同。可以验证的是在同样复杂度情况下,卷积码的编码增益要大于分组码的编码增益。对于某个特定的应用,采用分组编码还是采用卷积编码哪一种更好则取决于这一应用的具体情况和进行比较时可用的技术[1]。 本课程设计便是通过Matlab设计一个硬判决维特比译码输出的完整电路,并进行误码率分析。

1.2 课程设计的原理 卷积码,又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码。 卷积编码的最佳译码准则为:在给定已知编码结构、信道特性和接收序列的情况下,译码器将把与已经发送的序列最相似的序列作为传送的码字序列的估值。对于二进制对称信道,最相似传送序列就是在汉明距离上与接收序列最近的序列。 卷积码的译码方法有两大类:一类是大数逻辑译码,又称门限译码(硬判决,编者注);另一种是概率译码(软判决,编者注),概率译码又分为维特比译码和序列译码两种。门限译码方法是以分组码理论为基础的,其译码设备简单,速度快,但其误码性能要比概率译码法差[2]。 当卷积码的约束长度不太大时,与序列译码相比,维特比译码器比较简单,计算速度快。维特比译码算法是1967年由Viterbi提出,近年来有大的发展。目前在数字通信的前向纠错系统中用的较多,而且在卫星深空通信中应用更多,该算法在卫星通信中已被采用作为标准技术。 2维特比译码原理 采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。如果发送L组信息比特,那么对于(n,k)卷积码来说,可能发送的序列有2kL个,计算机或译码器需存储这些序列并进行比较,以找到码距最小的那个序列。当传信率和信息组数L较大时,使得译码器难以实现。维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。它并不是在网格图上一次比较所有可能的2kL条路径(序列),而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。 下面以图2.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。为了能说明解码过程,这里给出该码的状态图,如图2.2所

课程设计报告【模板】

模拟电子技术课程设计报告设计题目:直流稳压电源设计 专业电子信息科学与技术 班级电信092 学号 200916022230 学生姓名夏惜 指导教师王瑞 设计时间2010-2011学年上学期 教师评分 2010年月日

昆明理工大学津桥学院模拟电子技术课程设计 目录 1.概述 (2) 1.1直流稳压电源设计目的 (2) 1.2课程设计的组成部分 (2) 2.直流稳压电源设计的内容 (4) 2.1变压电路设计 (4) 2.2整流电路设计 (4) 2.3滤波电路设计 (8) 2.4稳压电路设计 (9) 2.5总电路设计 (10) 3.总结 (12) 3.1所遇到的问题,你是怎样解决这些问题的12 3.3体会收获及建议 (12) 3.4参考资料(书、论文、网络资料) (13) 4.教师评语 (13) 5.成绩 (13)

昆明理工大学津桥学院模拟电子技术课程设计 1.概述 电源是各种电子、电器设备工作的动力,是自动化不可或缺的组成部分,直流稳压电源是应用极为广泛的一种电源。直流稳压电源是常用的电子设备,它能保证在电网电压波动或负载发生变化时,输出稳定的电压。一个低纹波、高精度的稳压源在仪器仪表、工业控制及测量领域中有着重要的实际应用价值。 直流稳压电源通常由变压器、整流电路、滤波电路、稳压控制电路所组成,具有体积小,重量轻,性能稳定可等优点,电压从零起连续可调,可串联或关联使用,直流输出纹波小,稳定度高,稳压稳流自动转换、限流式过短路保护和自动恢复功能,是大专院校、工业企业、科研单位及电子维修人员理想的直流稳压电源。适用于电子仪器设备、电器维修、实验室、电解电镀、测试、测量设备、工厂电器设备配套使用。几乎所有的电子设备都需要有稳压的电压供给,才能使其处于良好的工作状态。家用电器中的电视机、音响、电脑尤其是这样。电网电压时高时低,电子设备本身耗供电造成不稳定因家。解决这个不稳定因素的办法是在电子设备的前端进行稳压。 直流稳压电源广泛应用于国防、科研、大专院校、实验室、工矿企业、电解、电镀、充电设备等的直流供电。 1.1直流稳压电源设计目的 (1)、学习直流稳压电源的设计方法; (2)、研究直流稳压电源的设计方案; (3)、掌握直流稳压电源的稳压系数和内阻测试方法。 1.2课程设计的组成部分 1.2.1 设计原理

卷积码编码和维特比译码

卷积码编码维特比译码实验设计报告 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<> #include "" #define N 7 #include "" #include <> #include<> #define randomize() srand((unsigned)time(NULL)) encode( unsigned int *symbols, /*编码输出*/ unsigned int *data, /*编码输入*/ unsigned int nbytes, /*nbytes=n/16,n为实际输入码字的数目*/ unsigned int startstate /*定义初始化状态*/

3-8译码器课程设计报告

EDA技术实验报告 —3-8译码器的设计 一.实验目的 1.通过一个简单的3-8译码器的设计,掌握组合逻辑电路的设 计方法。 2.掌握组合逻辑电路的静态测试方法。 3.初步了解QUARTUSⅡ软件的基本操作和应用。 4.初步了解可编程逻辑器件的设计全过程。 二.实验原理 3-8译码器的三输入,八输出。输入信号N用二进制表示,对应的输出信号N输出高电平时表示有信号产生,而其它则为 低电平表示无信号产生。其真值表如下图所示:

当使能端指示输入信号无效或不用对当前的信号进行译码时,输出端全为高电平,表示任何信号无效。 三.实验内容 用三个拨动开关来表示三八译码器的三个输入(A,B,C),用八个LED来表示三八译码器的八个输出(D0-D7)。通过与实验箱的FPGA接口相连,来验证真值表中的内容。 表1-2拨动开关与FPGA管脚连接表 表1-3LED 灯与FPGA管脚连接表 (当FPGA与其对应的接口为高电平时,LED会发亮)

LED1 LED3 G14 从FPGA的G14至 LED1 LED4 H12 从FPGA的H12至 LED1 LED5 H11 从FPGA的H11至 LED1 LED6 J10 从FPGA的J10至LED1 LED7 L9 从FPGA的L9至LED1 LED8 H1O 从FPGA的H10至 LED1 四.实验歩骤 1.建立工程文件

2.建立图形设计软件 (1)将要选择的器件符号放置在图形编辑器的工作区域,用正

交节点工具将原件安装起来,然后定义端口的名称。结果如下图: 3.编 译 前 设 置 (1)选 择 目标芯片 (2)选择目标芯片的引脚状态 4.对设计文件进行编译

Viterbi译码器研究目的意义及现状

Viterbi译码器研究目的意义及现状Viterbi译码器研究目的意义及现状 1研究的目的和意义 由于卷积码的优良性能,被广泛的应用于深空通信,卫星通信和2G及3G移动通信中,卷积码有三种译码方法:门限译码,门限译码,概率译码和Viterbi 算法,其中Viterbi算法是一种基于网格图的最大似然译码算法,是卷积码的最佳译码方式,具有效率高、速度快等优点。Viterbi译码充分发挥了卷积码的特点,使译码错误概率达到最小,在码的约束度较小时,它具有译码算法效率高,速度快,译码器也简单的特点。 FPGA(Field,Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 同时在FPGA的基础上实现Viterbi译码器,迎合了当前FPGA迅猛发展的趋势。把相对成熟的技术应用到某些特定领域如通讯,视频,信息处理等等开发出满足行业需要并能被行业客户接受的产品这方面主要是FPGA技术和专业技术的结合问题,另外还有就是与专业客户的界面问题产品设计还包括专业工具类产品及民用产品,前者重点在性能,后者对价格敏感产品设计以实现产品功能为主要目的,FPGA技术是一个实现手段在这个领域,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计将是FPGA技术应用最广大的市场,具有极大的爆发性的需求空间产品设计对技术人员的要求比较高,路途也比较漫长不过现在整个行业正处在组建“首发团队”的状态,只要加入,前途光明产品设计是一种职业发展方向定位,不是简单的爱好就能

安徽工程大学课程设计报告撰写模板

封面 按学校发的封面模板填写相关信息; 起始时间:2011年6月13日~6月24日 设计报告书页数(一般20~30页之间) 电子版设计报告规定的格式用A4纸打印,正文中的任何部分不得写到纸的边框以外,亦不得随意接长或截短。汉字必须使用国家公布的规字。 页面设置:上3,下2.5,左3,右2;页眉2,页脚1.75。 行距采用单倍行距,标准字符间距。西文、数字等符号均采用Times New Roman字体。

任务书 主要是写明设计容和设计要求 例如,设计一个数字钟的任务书为:(具体根据题目拟定) Ⅰ设计题目 中文:多功能数字钟的设计 英文:Design of Multi-function Digital Clock Ⅱ设计功能要求 1、能正确显示时、分、秒(6位:HH:MM:SS); 2、要有总体复位开关; 3、能可靠校时、校分; 4、能整点报时(①59’56秒、59’57秒、59’58秒、59’59秒响0.5秒低音。②00’00 秒响1秒高音); 5、整个电路的控制开关要求在5个以; 6、秒信号发生器可以用555构成的电路产生; 7、能够设定一组闹钟功能,到了预设的时间,铃声响1分钟,在1分钟之可以用 按键停止闹铃。 Ⅲ设计任务容 1、学习与研究相关的《电子技术》理论知识,查阅资料,拿出可行的设计方案; 2、根据设计方案进行电路设计,完成电路参数计算、元器件选型、绘制电路原理 图; 3、进行电路软件仿真(如:Multisim 2001、EWB、Protel等),或制作实物进行调 试实验,获得实验数据,验证设计有效性。 4、撰写课程设计报告。 签名

设计题目(根据自己的设计题目) 摘要 摘要:独占一页; 摘要正文分三段写: 第一段:本设计的意义和完成的主要工作。——做什么?为啥做? 第二段:为了完成设计功能,你主要进行了哪些设计,怎么设计的。——怎么做? 第三段:设计结果如何,取得了哪些结论。——做的效果怎么样? 关键词:关键词1;关键词2;关键词3;关键词4(根据自己的设计题目)

哈夫曼编译码器课程设计报告完整版

XXX学院本科 数据结构课程设计总结报告 设计题目:实验一、哈夫曼编/译码器 学生姓名:XXX 系别:XXX 专业:XXX 班级:XXX 学号:XXX 指导教师:XXX XXX 2012年6 月21日 xxx学院 课程设计任务书 题目一、赫夫曼编译码器 专业、班级xxx 学号xxx 姓名xxx 主要内容、基本要求、主要参考资料等: 1. 主要内容 利用哈夫曼编码进行信息通信可大大提高信道利用率,缩短信息传输时间,降低传输成本。要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(既可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼的编/译码系统。 2. 基本要求 系统应具有以下功能: (1)C:编码(Coding)。对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中,将以此建好的哈夫曼树存入文件HuffmanTree中

(2)D:解码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入textfile中。 (3)P:打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。 (4)T:打印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。 3. 参考资料:数据结构(C语言版)严蔚敏、吴伟民编着; 数据结构标准教程胡超、闫宝玉编着 完成期限:2012年6月21 日 指导教师签名: 课程负责人签名: 2012年 6月 21 日 一、设计题目(任选其一) 实验一、哈夫曼编/译码器 二、实验目的 1巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力; 2 深化对算法课程中基本概念、理论和方法的理解; 3 巩固构造赫夫曼树的算法; 4 设计试验用程序实验赫夫曼树的构造。 三、运行环境(软、硬件环境) Windows xp sp3,Visual C++ 英文版 四、算法设计的思想 (1)初始化赫夫曼树,输入文件中各字符及其权值,并保存于文件中 (2)编码(Coding)。对文件tobetrans中的正文进行编码,然后将结果存入文件codefile 中 (3)D:解码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入textfile中。 (4)P:打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。

213卷积码编码和译码

No.15 (2,1,3)卷积码的编码及译码 摘要: 本报告对于(2,1,3)卷积码原理部分的论述主要参照啜刚教材和课件,编程仿真部分绝对原创,所有的程序都是在Codeblocks 8.02环境下用C语言编写的,编译运行都正常。完成了卷积码的编码程序,译码程序,因为对于短于3组的卷积码,即2 bit或4 bit纠错是没有意义的,所以对正确的短序列直接译码,对长序列纠错后译码,都能得到正确的译码结果。含仿真结果和程序源代码。 如果您不使用Codeblocks运行程序,则可能不支持中文输出显示,但是所有的数码输出都是正确的。

一、 卷积码编码原理 卷积码编码器对输入的数据流每次1bit 或k bit 进行编码,输出n bit 编码符号。但是输出的分支码字的每个码元不仅于此时可输入的k 个嘻嘻有关,业余前m 个连续式可输入的信息有关,因此编码器应包含m 级寄存器以记录这些信息。 通常卷积码表示为 (n,k,m). 编码率 k r n = 当k=1时,卷积码编码器的结构包括一个由m 个串接的寄存器构成的移位寄存器(成为m 级移位寄存器、n 个连接到指定寄存器的模二加法器以及把模二加法器的输出转化为穿行的转换开关。 本报告所讲的(2,1,3)卷积码是最简单的卷积码。就是2n =,1k =,3m =的卷积码。每次输入1 bit 输入信息,经过3级移位寄存器,2个连接到指定寄存器的模二加法器,并把加法器输出转化为串行输出。 编码器如题所示。 二、卷积码编码器程序仿真 C 语言编写的仿真程序。 为了简单起见,这里仅仅提供数组长度30 bit 的仿真程序,当然如果需要可以修改数组大小。为了更精练的实现算法,程序输入模块没有提供非法字符处理过程,如果需要也可以增加相应的功能。 进入程序后,先提示输入数据的长度,请用户输入int (整型数)程序默认用户输入的数据小于30,然后提示输入01数码,读入数码存储与input 数组中,然后运算输出卷积码。经过实验仿真,编码完全正确。 以下是举例: a.课件上的输入101 输出11 10 00 的实验

课程设计报告书

课程设计 1 设计任务及概况 1.1 设计任务及依据 1.1.1 设计任务 5万吨城市污水处理厂初步设计 1.1.2 设计依据及原则 1.1. 2.1 设计依据 《给水排水工程快速设计手册》1-5 ,给排水设计规,《污水处理厂工艺设计手册》,《三废设计手册废水卷》。 1.1. 2.2 设计原则 (1)执行国家关于环境保护的政策,符合国家地方的有关法规、规和标准; (2)采用先进可靠的处理工艺,确保经过处理后的污水能达到排放标准; (3)采用成熟、高效、优质的设备,并设计较好的自控水平,以方便运行管理; (4)全面规划、合理布局、整体协调,使污水处理工程与周围环境协调一致;

(5)妥善处理污水净化过程中产生的污泥固体物,以免造成二次污染; (6)综合考虑环境、经济和社会效益,在保证出水达标的前提下,尽量减少工程投资和运行费用。 1.1.3设计围 设计二级污水处理厂,进行工艺初步设计。 1.2设计水量及水质 1.2.1设计水量 污水的平均处理量为平Q =d m /10534?=2083h m /3=0.58s m /3;污 水的最大处理量为d m Q /105.634max ?==2708h m /3=0.75s m /3,污水的最小处理量为d m Q m /108.334in ?==1603h m /3=0.45s m /3。总变化系数 Z K 为1.3,取日变化系数1K 为1.2,时变化系数2K 为1.1, 。 1.2.2设计水质 参照《城镇污水处理厂污染物排放标准(GB 18918-2002)》中的一级B 标准,设计水质如表1.1所示。 表1.1 设计水质情况

哈夫曼编码译码器---课程设计报告

目录 目录 (2) 1课程设计的目的和意义 (3) 2需求分析 (4) 3概要设计 (4) 4详细设计 (8) ¥ 5调试分析和测试结果 (11) 6总结 (12) 7致谢 (13) 8附录 (13) 参考文献 (20) .

| ; 1 课程设计目的与意义 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。 哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。 通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。 作为计算机专业的学生,我们应该很好的掌握这门技术。在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!课程设计就是为解决这个问题提供了一个平台。 ( 在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;通过编写实验代码和调试运行,我们

可以逐步积累调试C程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。 在课程设计过程中,我们不但有自己的独立思考,还借助各种参考文献来帮助我们完成系统。更为重要的是,我们同学之间加强了交流,在对问题的认识方面可以交换不同的意见。同时,师生之间的互动也随之改善,我们可以通过具体的实例来从老师那学到更多的实用的知识。 数据结构课程具有比较强的理论性,同时也具有较强的可应用性和实践性。课程设计是一个重要的教学环节。我们在一般情况下都能够重视实验环节,但是容易忽略实验的总结,忽略实验报告的撰写。通过这次实验让我们明白:作为一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。只有这样,我们的综合素质才会有好的提高。 2 需求分析 课题:哈夫曼编码译码器 ) 问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。问题补充:1. 从硬盘的一个文件里读出一段英语文章; 2. 统计这篇文章中的每个字符出现的次数; 3. 以字符出现字数作为权值,构建哈夫曼树,并将哈夫曼树的存储 结构的初态和终态进行输出; 4. 对每个字符进行编码并将所编码写入文件然后对所编码进行破 译。 具体介绍:在本课题中,我们在硬盘中预先建立一个文档,在里面编辑一篇文章。然后运行程序,调用函数读出该文章,显示在界面;再调用函数对该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显示;然后以每个字符出现次数作为权值,调用函数构建哈夫曼树;并调用函数将哈夫曼的存储结构的初态和终态进行输出。然后调用函数对哈夫曼树进行编码,调用函数将编码写入文件;再调用对编码进行译码,再输出至界面。至此,整个工作就完成了 3 概要设计。

Viterbi译码程序代码

译码主要部分 #include"stdafx.h" //#define DEBUG void deci2bin(int d, int size, int *b); int bin2deci(int *b, int size); int nxt_stat(int current_state, int input, int *memory_contents); void init_quantizer(void); void init_adaptive_quant(float es_ovr_n0); int soft_quant(float channel_symbol); int soft_metric(int data, int guess); int quantizer_table[256]; void sdvd(int g[2][K], float es_ovr_n0, long channel_length, float*channel_output_vector, int *decoder_output_matrix) { int i, j, l, ll; //循环控制变量 long t; //时间 int memory_contents[K]; //记录输入内容 int input[TWOTOTHEM][TWOTOTHEM]; //对当前状态以及下一个状态映射 int output[TWOTOTHEM][2]; //卷积码编码输出矩阵 int nextstate[TWOTOTHEM][2]; //下一个状态矩阵 int accum_err_metric[TWOTOTHEM][2]; //误差累计矩阵 int state_history[TWOTOTHEM][K * 5 + 1]; //历史状态表 int state_sequence[K * 5 + 1]; //状态序列 int *channel_output_matrix; //信道输出序列 int binary_output[2]; int branch_output[2]; //0或者1的输出分支 int m, n, number_of_states, depth_of_trellis, step, branch_metric, sh_ptr, sh_col, x, xx, h, hh, next_state, last_stop; n = 2; //1/2为卷积码传输数据的码率 m = K - 1;//寄存器个数 number_of_states = (int)pow(2.0, m);//状态个数number of states = 2^(K - 1) = 2^m depth_of_trellis = K * 5; for (i = 0; i < number_of_states; i++)

相关文档