卷积码编码及译码算法的基本原理是什么(卷积码编码及译码算法的基本原理)
介绍
卷积码是一种信道纠错码,广泛应用于通信中。在发送端,卷积码按照生成多项式进行编码,在接收端,按照维特比译码算法进行译码,可以有效抵抗信道噪声的影响,在误码率门限下,可以纠正传输过程中的突发错误。
:编码和解码算法的基本原理
卷积码编码
卷积码是一种纠错码,将输入的K个信息比特编码成N个比特输出。特别适用于延时小的串行传输。卷积编码器的一般形式如下图所示。
下图显示了k=1时的编码框图,这也是最常用的编码器情况:
译码算法
卷积码的译码方法有两种:一种是大数逻辑译码,也叫门限译码;另一种是概率译码,分为维特比译码和序列译码。维特比译码和序列译码都是概率译码。当卷积码的约束长度不太大时,维特比译码器比序列译码简单、快速。下一步解码算法采用概率解码中的维特比解码。概率解码的一个基本思想是将接收序列与所有可能的传输序列进行比较,选择汉明码距离最小的一个作为传输序列。
以及编解码算法的Matlab实现。
根据上面提到的编码和解码的基本原理,我们可以在Matlab中做一个非常方便的仿真,它提供了集成的函数来调用和仿真,如下所示:
2、编码算法的FPGA实现
根据卷积码编码的基本原理,我们可以根据对应的生成多项式进行Verilog编码,可以方便地实现卷积码编码的FPGA实现:
顶层代码
模块约定(
//系统信号
输入时钟,
inputrst_n,
输入数据_输入,
outputreg [1:0] data_out
);
conv _ reg;
always @(posedge clk或negedge rst_n)开始
如果(!rst_n)开始
conv _ reg=7 d0;
结束
否则开始
conv _注册={数据_输入,conv _注册[6:1]};
结束
结束
always @(posedge clk或negedge rst_n)开始
如果(!rst_n)开始
data _ out=2 d0;
结束
否则开始
data _ out[1]=conv_reg[6]^conv_reg[5]^conv_reg[4]^conv_reg[3]^conv_reg[0];//o171
data _ out[0]=conv_reg[6]^conv_reg[4]^conv_reg[3]^conv_reg[1]^conv_reg[0];//o133
结束
结束
末端模块
试验码
`时间刻度为1ns/1ps;
模块TB();
寄存器时钟;
reg rst _ n;
reg data _ in
wire[1:0]data _ out;
寄存器位[255:0];
整数out _ file
整数I;
常规演示(。时钟(clk)。rst_n(rst_n)。数据输入(data_in)。数据输出(数据输出)
);
最初的
开始
clk=1 B1;
rst _ n=1 B1;
# 5 rst _ n=1 B0;
# 5 rst _ n=1 B1;
$ read member(f:/FPGA _ DSP/Viterbi/bits . txt 位);
out _ file=$ fopen(f:/FPGA _ DSP/Viterbi/result . txt 'w );//获取文件句柄
for(I=0;i=255开始吧
data _ in=bits[I];
#10;
$fwrite(out_file,% b % b ,data_out[1],data _ out[0]);
结束
结束
总是# 5 clk=~ clk
末端模块
模拟结果
3、维特比译码算法的FPGA实现
维特比算法数学原理复杂,从理解算法到实现需要做大量的工作。然而,赛灵思Vivado工具为我们提供了维特比解码器IP核,我们可以很容易地调用它来实现FPGA上的算法。
维特比译码器IP核的I/o数据格式
维特比译码器IP核的接口是基于AXI流协议的,AXI流协议的握手过程在上一篇文章中已经提到。如果你不I don’我不懂,请参考上一篇文章。下面主要介绍该IP的基本格式组成和输入输出数据:
输入数据:
当IP核接收输入数据时,它扮演从机的角色。输入数据的格式如下图所示,对应的编码率为2。如果编码率是N,则数据的位宽相应地是N*8。
当互联网协议(互联网协议)核配置为硬判决时,输入数据位宽为1,其余位用0补齐,当互联网协议(互联网协议)核配置为软判决时,输入数据位宽为3-5,其余位用0补齐,数据输入一对应高位,DATA_IN0对应低位。
输出数据:
互联网协议(互联网协议)核的译码输出数据总是一位,格式如下图所示。
最低位为译码数据,其他数据可以不做深入了解。
另外除了待译码数据的输入端口和译码数据输出端口外,该互联网协议(互联网协议)核还可以进行误码率(误码率)的计算,其余端口位误码率计算配置端口和结果输出端口,具体详情请参考官方手册pg027。
互联网协议(互联网协议)核生成流程
Vivado软件为我们提供了维特比(译码器)译码互联网协议(互联网协议)核,可以进行图形化配置然后进行调用和使用,配置参数要与编码过程中的相关参数严格对应,具体过程如下所示:
在图形化配置互联网协议(互联网协议)核完成后,我们提取相应的网表文件在Modelsim环境下进行了仿真,如何在Modelsim环境下仿真Vivado IP核我们在前面也有提及,如有不懂的也可翻阅前面的文章进行学习,相关测试程序如下。
`时间刻度为一纳秒/1皮秒
模块dec _ TB();
glbl glbl();
注册aclk
reg aresetn
reg[15:0]s _ axis _ data _ tdata;
寄存器s _ axis _ data _ tvalid
电线s _轴_数据_ tready
wire[7:0]m _ axis _ data _ tdata;
电线m _轴_数据_ t有效
注册m _轴_数据_趋势
reg[15:0]s _ axis _ dstat _ tdata;
reg s _ axis _ dstat _有效
电线s _ axis _ dstat _ tready
wire[15:0]m _ axis _ dstat _ tdata;
导线m _ axis _ dstat _ tvalid
注册m _ axis _ dstat _ tready
reg codeData[511:0];
reg[9:0]I;
reg[9:0]j;
整数out _ file
初始开始
aclk=1 b1
aresetn=1 b1
# 5 aresetn=1 b0
# 5 aresetn=1 b1
$ read成员(F:/FPGA _ DSP/Viterbi/codeData。txt ,codeData);
out _ file=$ fopen(f:/FPGA _ DSP/维特比/解码数据。txt ,'w );//获取文件句柄
结束
总是# 5 aclk=~ aclk
//送数据
总是@(posedge aclk或negedge aresetn)开始
如果(!aresetn)开始
s _ axis _ data _ tvalid=1 b0
s _ axis _ data _ tdata=16 d0
i=9 d0
j=9 d1
结束
否则if (s_axis_data_tready)开始
如果(i=9 d510)开始
s _ axis _ data _ tvalid=1 b1
s _ axis _ data _ tdata={ 7 d0,codeData[j],7 d0,codeData[I]};
I=I ^ 2;
j=J2;
结束
其他
s _ axis _ data _ tvalid=1 b0
结束
结束
//取数据
总是@(posedge aclk或negedge aresetn)开始
如果(!aresetn)开始
m _ axis _ data _ tready=1 b1
结束
否则if (m轴数据有效)开始
$fwrite(out_file,% b ,m _ axis _ data _ tdata[0]);
结束
结束
//-在此开始实例化模板的剪切-//INST _标签
维特比_0您的实例名(。aclk(aclk),//输入线aclk。aresetn(aresetn),//输入线阿雷塞特
//接收数据时为从设备。s _ axis _ data _ tdata(s _ axis _ data _ tdata),//输入线[15 : 0] s_axis_data_tdata。s _ axis _ data _ t valid(s _ axis _ data _ t有效),//输入线s _轴_数据_ t有效。s _ axis _ data _ tready(s _ axis _ data _ tready),//输出线s轴数据趋势
//发送数据时为主设备。m _轴_数据_数据(m _轴_数据_数据),//输出wire [7 : 0] m_axis_data_tdata。m _ axis _ data _ t valid(m _ axis _ data _ t有效),//输出线m _轴_数据_ t有效。m _ axis _ data _ tready(m _ axis _ data _ tready),//输入线m轴数据趋势
//BER测量。s _ axis _ dstat _ tdata(s _ axis _ dstat _ tdata),//输入线[15 : 0] s_axis_dstat_tdata。s _ axis _ dstat _ t valid(s _ axis _ dstat _ t valid),//输入线s _ axis _ dstat _ t有效。s _ axis _ dstat _ tready(s _ axis _ dstat _ tready),//输出导线s _ axis _ dstat _ tready。m _ axis _ dstat _ tdata(m _ axis _ dstat _ tdata),//输出wire [15 : 0] m_axis_dstat_tdata。m _ axis _ dstat _ t valid(m _ axis _ dstat _ t valid),//输出线m _ axis _ dstat _ t有效。m _ axis _ dstat _ tready(m _ axis _ dstat _ tready)//输入导线m _ axis _ dstat _ tready
);
末端模块
仿真波形:
原文标题:卷积码编码及维特比译码(维特比)算法的原理及其现场可编程门阵列(现场可编程Gata阵列的缩写)实现
文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。
审核汤梓红
推荐阅读
- 消谐装置概述(一次消谐器通流试验方法)
- 在手机上安装佳能打印机驱动程序? canon官网驱动下载
- 歌手阿朵复出娱乐圈了吗,阿朵这些年都在做什么
- ct800_ct8
- sony ericsson pc suite软件软件介绍(sony ericsson pc suite软件)
- 奥运会自行车骑多少公里一圈,奥运会自行车骑多少公里
- 红米2和红米2a有什么区别? 红米2a参数
- 掠夺者系列凯佰赫战盾_凯佰赫战盾
- 可以装下全地球水的瓶子,你见过吗英语(可以装下全地球水的瓶子,你见过吗)
- 斯洛伐克足球世界排名,斯洛伐克的足球排名
- 轩辕伏魔录3.2泯灭(魔兽地图)游戏介绍(轩辕伏魔录3.2泯灭(魔兽地图))
- 新车磨合期多少公里_新车磨合期注意事项
- nba各篮球队教练,nba篮网主教练是谁
- 如何采用无线技术进行电力传输设备(如何采用无线技术进行电力传输)
- rx580不玩游戏耗电? rx580玩游戏是真的垃圾
- 雷克萨斯lx570售价是多少? 雷克萨斯570多少钱
- 具有里程碑意义的6部喜剧片,哪部更能拯救你的不开心
- 非门是什么芯片(非门芯片的型号介绍)
- 三星手机历史机型? 三星手机型号一览表