首页 > 其他分享 >m基于FPGA的217卷积编码维特比译码verilog实现,包含testbench不使用IP核

m基于FPGA的217卷积编码维特比译码verilog实现,包含testbench不使用IP核

时间:2024-04-15 20:46:43浏览次数:28  
标签:reset 217 20 FPGA clk 卷积 IP 译码 Sk

1.算法仿真效果

Vivado2019.2

 

 

 

编码部分:

 

 

 

译码部分输出:

 

 

 

RTL图:

 

 

 

2.算法涉及理论知识概要

2.1 卷积编码

       卷积编码是一种前向纠错编码方式,特别适用于无线通信和其他信道条件恶劣的应用场景。它主要通过卷积算子将信息序列映射成冗余度更高的码字序列。典型的卷积编码器由两个移位寄存器和一个加法器构成,遵循一定的生成多项式进行编码。

 

       设信息序列是 u(n),卷积编码器的两个生成多项式为 G1​(D) 和 G2​(D),则编码输出v(n) 可以表示为:

 

v(n)=u(n)G1​(D)+u(n−1)G2​(D)+…

 

此处D 是延迟算子,实际表达形式取决于具体选择的生成多项式阶数及系数。

 

2.2 维特比译码

       维特比译码是用于最大似然序列估计的一种动态规划算法,广泛应用于卷积编码以及其他序列编码的译码过程中。在卷积编码中,维特比译码器通过构造一棵称为“状态转移图”或“trellis”的树状结构来寻找最有可能的原始信息序列路径。

 

       在 Viterbi 译码算法中,每一步都需要计算分支量度,路径量度,以及更新幸存路径,同时还需要知道状态转移网格图,时序控制等信息,其原理图如图:

 

 

 

       假设维特比译码器面对的是接收到的带有噪声的码字序列y(n),其目标是最小化汉明距离或最大化似然性。维特比算法的核心在于维护每一步的状态概率以及从起始状态到达当前状态的最佳路径累积代价。

 

      状态转移方程: 对于每个时刻n 和每一个状态Sj​,其下一状态Sk​ 的最佳路径累积代价C(n,Sk​) 可以递归地表示为所有前一状态Sj​ 的累积代价加上相应路径的概率增益:

 

C(n,Sk​)=Sj​∈prev(Sk​)min​[C(n−1,Sj​)+P(y(n)∣Sk​)]

 

       其中,prev(Sk​) 表示状态Sk​ 的前驱状态集合,P(y(n)∣Sk​) 是给定当前状态Sk​ 下观测到y(n) 的概率。

 

       终止状态判决: 译码结束时,选取累积代价最小的终止状态对应的路径作为最优解,回溯此路径即得到最优译码结果。

 

3.Verilog核心程序

 

`timescale 1ns / 1ps
 
 
// Company: 
// Engineer:
 
// 
 
 
module TEST;
 
	// Inputs
	reg i_clk;
	reg i_reset;
	reg i_x;
 
	// Outputs
	wire [1:0] o_enc;
    wire o_dec;
	// Instantiate the Unit Under Test (UUT)
	conv_217_code uut (
		.i_clk   (i_clk), 
		.i_reset (~i_reset), 
		.i_x     (i_x), 
		.o_enc   (o_enc)
	);
 
 
	conv_217_decode uut2 (
		.i_clk    (i_clk), 
		.i_reset  (~i_reset), 
		.i_enc    (o_enc), 
		.o_dec    (o_dec)
	);
 
 
	always #10 i_clk = ~i_clk;
	
	initial begin
		// Initialize Inputs
		i_clk = 0;
		i_reset = 0;
		i_x = 0;
 
		// Wait 100 ns for global i_reset to finish
		#100;
      i_reset = 1;  
		// Add stimulus here
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 1;
		#20
		i_x = 0;
		#20
		i_x = 0;
		#20
		i_x = 1;
		#20
		i_x = 0;
 
 
	
	end
      
endmodule

 

  

 

标签:reset,217,20,FPGA,clk,卷积,IP,译码,Sk
From: https://www.cnblogs.com/51matlab/p/18136860

相关文章

  • vmware16 nat网络 IP不要变
     把IP变为staticBOOTPROTO="static"IPADDR="192.168.217.136"最后,重启网络 systemctlrestartnetwork[root@centos01conf]#cat/etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY=&qu......
  • IPA加驱动的一种方式,未验证
    HowaddnicdrivertoinitrdSimonZM.Wanghttps://blog.csdn.net/weixin_45547360/article/details/127330048Howtoaddnicdrivertopxebootinitrd1.概述2.准备工作3.如何添加nic驱动3.1Redhat/CentOS7系列添加MellaxonCX6NICDriver3.2Debian9系列添加Bro......
  • codegen的模板文件mustache中,classname,description,notes如何赋值
    Swagger-codegen的模板文件mustacheSwagger-codegen是一个开源的代码生成工具,它可以根据Swagger规范自动生成客户端和服务器端代码。在使用Swagger-codegen时,我们可以通过mustache模板文件来自定义生成的代码。在这篇文章中,我们将介绍如何在mustache模板文件中给classname、descr......
  • 鸿蒙开发TypeScript语言:【运算符】
    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。考虑以下计算:7+5=12以上实例中7、5和12是操作数。运算符 + 用于加值。运算符 = 用于赋值。TypeScript主要包含以下几种运算:算术运算符逻辑运算符关系运算符按位运算符赋值运算符三元/......
  • 内置上电复位电路/数显控制电路VK1651 SOP16/DIP16数显LED驱动电路
    产品品牌:永嘉微电/VINKA产品型号:VK1651封装形式:SOP16/DIP16概述VK1651是一种带键盘扫描电路接口的LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动、键盘扫描等电路。SEG脚接LED阴极,GRID脚接LED阳极,可支持7SEGx4GRID的点阵LED显示。最大支持7x1按键。本芯片性能优良,适用......
  • 计算机网络原理-IP计算
    IP地址分类A0.0.0.0-127.255.255.255 B128.0.0.0-191.255.255.255 C192.0.0.0-223.255.255.255 D224.0.0.0-239.255.255.255 E240.0.0.0-255.255.255.255IP地址组成网络号+主机号  与(&)运算  -  或(||)运算与运算(&):双方必须都是1才得1......
  • el-table-column自定义实现el-tooltip效果
    说明使用el-table-column自定义某列内容为左侧展示商品图片,右侧展示商品标题以及id,商品标题超过两行显示省略号,并且鼠标移入在上方显示完整。界面展示template...<el-table-columnlabel="商品信息"prop="title"min-width="200"><template#default="scope"><div......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测是否注册imessage的
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacO......
  • 易基因:ENCODE和modENCODE联盟的ChIP-seq实验设计指南和注意事项|干货
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。ChIP-seq(染色质免疫沉淀测序)实验指南和实践(ChIP-seqguidelinesandpracticesoftheENCODEandmodENCODEconsortia),由ENCODE(EncyclopediaofDNAElements)和modENCODE(ModelOrganismENCODE)联盟研究人员撰写。文......
  • Command PhaseScriptExecution failed with a nonzero exit code 错误解决记录
    xCode报这个错误,首先看是哪个文件报错,进入错误日志/Users/fanvil/Library/Developer/Xcode/DerivedData。因为我这边是FBReactNativeSpec这个文件下的错误,所以很容易找到错误日志:/Users/fanvil/Desktop/iOS/Demo/ios/Pods/../../node_modules/react-native/React/FBReactNativeSp......