FPGA:卷积编码及维特比译码仿真 您所在的位置:网站首页 卷积码与分组码有什么不同 FPGA:卷积编码及维特比译码仿真

FPGA:卷积编码及维特比译码仿真

2023-12-20 08:33| 来源: 网络整理| 查看: 265

FPGA:卷积编码及维特比译码仿真

本篇记录一下在FPGA中完成卷积编码和维特比译码的过程,通过代码解释编码的过程和译码的过程,便于理解,同时也方便移植到其他工程中。

1. 准备工作 卷积编译码IP核—convolutionIP核和viterbiIP核卷积编码原理知识—网上有很多关于原理性的解释卷积编码对照仿真过程—可以对照之前的MATLAB仿真程序便于更好的理解编译码的过程,但是有一点不同,在FPGA仿真代码中利用自然数编码,最后译码回自然数,方便对照正确性。 2. 编码过程

首先添加convolutionIP核,可以看到首先有如下的需要配置的参数。

卷积核设置

按照上图的设置方式为2,1,7形式的卷积编码器,这个没有什么需要注意的,按照常规设置就可以了。

然后添加viterbiIP核,打开之后可以看到如下的设置参数。

卷积核设置

在第一个Viterbi Type栏中可以可以选择Standard,然后约束长度和编码过程的设置一致,回溯深度可以利用公式计算5*(约束长度-1),这个是最小的设置的值,回溯深度至少要大于这个值。

卷积核设置

在第二个配置页中,按照如下的参数进行设置,这个可以参考MATLAB仿真。

卷积核设置

这个页面配置的传入的bit数据,因为编码设置的是2,1,7所以这个设置为2,

3. 仿真过程

整个仿真过程利用0-15的自然数循环,对其进行卷积编码,然后通过viterbi译码还原出原来的自然数。

程序的设置流程思路:

为了方便移植到其他的工程中,同时为了转换数据速率,在自然数信源和卷积编码中间添加了一个fifo同样的操作,在译码结束之后添加了一个fifo,与前一个fifo对称。在利用译码的过程中,有一点注意事项:编码之后的2bit数据输入到viterbi译码的IP核中时,需要在第0位和第8位填充,构成两bit。这个技术手册中有说明。

手册

下面给出两个fifo的参数设置,自然数位宽为[0:3],首先是信源和编码之间的fifo。

fifo_en 然后是译码之后的fifo。

fifo_de

4. 完整代码 `timescale 1ns / 1ps module conv_encoder( input clk, //时钟 input rst_n // 复位 高电平复位 ); parameter K = 1; // 对应MATLAB仿真中的k和n的值,这个在IP核设置中已经有体现 parameter N = 2; // parameter L = 7; // 编码之后的数据长度 reg [5:0] datain_num; // 每一组编码的原始数据个数 reg [3:0] datain; //reg [5:0] dataout_num; //输出编码数据的个数 // 定义viterbi IP核需要用到的信号 wire vit_datain_valid; // 当vit ip的ready信号有效同时 conv的输出有效的时候,这个信号有效 wire vit_datain_ready; // wire vit_dataout_valid; wire vit_dataout_ready; wire vit_data_out; // 译码结果输出 // 信源处fifo的相关信号线,该fifo是用来把多位数转为比特流传入到卷积编码中。 wire fifo_encode_empty; wire fifo_encode_full; wire fifo_encode_out; wire fifo_decode_empty; wire fifo_decode_full; wire [3:0] fifo_decode_out; wire rd_en; //第一个fifo的读写控制信号 wire wr_en; reg wren; always@(posedge clk)begin if(~rst_n)begin wren


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有