一卷积编码器这个部分比较简单主要参考论文中的说明无线光.doc

一卷积编码器这个部分比较简单主要参考论文中的说明无线光.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一卷积编码器这个部分比较简单主要参考论文中的说明无线光

一:卷积编码器 这个部分比较简单,主要参考论文中的说明,《无线光通信》这篇论文第38页。 对应代码为JuanJi.v 基本原理如下所示: 卷积码为(2,1,7)标准卷积码,信息位为1比特,编码后变成2比特,编码比率,约束长度为7比特,码生成矢量,(反相后输出),该码型共有64个状态。(2,1,7)卷积码的编码结构图如图1所示,该编码器中的寄存器的初值全为0,,输入1比特,根据生成多项式进行运算后,得到2比特的输出,输出后移位寄存器向右移位一次,并重复编码过程。 图1(2,1,7)卷积码编码器结构图 其管脚如下所示: Clk :卷积码的编码器的时钟信号,输入数据在时钟的上升沿取样,并在时钟的上升沿输出数据。 reset:卷积码的编码器的异步复位信号,当reset为0时,编码器的所有触发器全部清零。 En :卷积码编码器的使能信号,当en为1时,编码器正常工作,当en为0时,编码器处于停止状态。 Din :卷积码编码器的数据输入端口,其位宽为1比特。 Iout :卷积码编码器的编码数据1的输出端口,其位宽为1比特。 Qout :卷积码编码器的编码数据2的输出端口,其位宽为1比特。 Val :卷积码编码器输出数据有效信号,当val为1时,表示输出数据有效,反之则无效。 其功能仿真如下所示: 图2 卷积编码仿真结果图 二:viterbi译码器 图3 卷积码译码器的结构框图 ·分支度量计算单元 分支度量计算单元是用来计算输入信号序列与卷积码各个可能输出信号序列的似然度量,维特比的似然准则就是在寻找具有最小距离的路径。若译码器采用硬判决译码时,分支度量计算采用汉明距离,而采用软判决译码时,则是采用欧氏距离,即计算 (1) 其中是t时刻的接收码字,表示t时刻的译码输出码字,在本设计中采用软判决译码,所以必须使用欧氏距离作为加比选的距离,虽然采用欧氏距离具有很好的性能,但是在FPGA中实现乘方和开方运算难度较大。因此在设计中采用一种简化的方法来计算分支度量。因为输入的量化数据是0到7之间的数据,若接收码字为,而编码器的编码码字可能是,,,,经过调制器,信道,解调器,经过3比特量化后,若无噪声干扰,接受的码字为,,,,则接收码字与可能发送的码字的距离采用下面的计算公式: , , , (2) 采用这种方法,与采用欧氏距离相比,对译码器的性能影响不大,该译码器的性能与采用欧氏距离的译码器性能差仅有0.1~0.2dB。 由上式可以看出,如果采用8电平量化软判决方式,则此时路径度量值扩展为0到14,所以分支度量单元的输入是3比特数据,而输出则是4比特数据,这样硬件实现比较简单,可以减少硬件开销。 其硬件实现电路结构如图4所示。由于本设计中采用的是(2,1,7)卷积码,所以一级中共有64个结点,需要64个分支度量计算单元,在实现中,采用了全并行的结构,这样在一个时钟周期内,可以更新所有64个结点的分支度量值。 图4 分支度量计算单元的硬件电路结构 其代码如下所示: //BM00 a+b function[3:0] bm00; input[2:0] i,q; reg [2:0] ibm,qbm; begin ibm = i; qbm = q; bm00 = ibm + qbm; end endfunction //BM10 (7-a)+b function[3:0] bm10; input[2:0] i,q; reg [2:0] ibm,qbm; begin ibm = {i[2]^1b1,i[1]^1b1,i[0]^1b1}; qbm = q; bm10 = ibm + qbm; end endfunction //BM01 a+(7-b) function[3:0] bm01; input[2:0] i,q; reg [2:0] ibm,qbm; begin ibm = i; qbm = {q[2]^1b1,q[1]^1b1,q[0]^1b1}; bm01 = ibm + qbm; end endfunction //BM11 (7-a)+(7-b) function[3:0] bm11; input[2:0] i,q; reg [2:0] ibm,qbm; begin ibm = {i[2]^1b1,i[1]^1b1,i[0]^1b1}; qbm = {q[2]^1b1,q[1]^1b1,q[0]^1b1}; bm11= ibm + qbm; end endfunction assign I = (en) ? Iin : 0;

文档评论(0)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档