导航:首页 > 源码编译 > 卷积码编译码实验vhdl

卷积码编译码实验vhdl

发布时间:2024-02-07 20:55:02

㈠ 卷积码编译码器的Matlab仿真实现

卷积程序我还是有的:
function [f,k]=conv_m(f1,k1,f2,k2)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
% f: 卷积积分f(t)对应的非零样值向量
% k:f(t)的对应时间向量
% f1: f1(t)非零样值向量
% f2: f2(t)的非零样值向量
% k1: f1(t)的对应时间向量
% k2: f2(t)的对应时间向量
% p:取样时间间隔
p=input('p=');
f=conv(f1,f2); %计算序列f1与f2的卷积和f
f=f*p;
k0=k1(1)+k2(1); %计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度
k=k0:p:k3*p; %确定卷积和f非零样值的时间向量
subplot(2,2,1)
plot(k1,f1) %在子图1绘f1(t)时域波形图
title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot(2,2,2)
plot(k2,f2) %在子图2绘f2(t)时波形图
title('f2(t)')
xlabel('t')
ylabel('f2(t)')
subplot(2,2,3)
plot(k,f); %画卷积f(t)的时域波形
h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍
title('f(t)=f1(t)*f2(t)')
xlabel('t')
ylabel('f(t)')

㈡ 卷积码的译码方法

若信道干扰序列为,其中。接收序列为
其中和。这里“+”为模 2 运算(q=p元码按模p运算)。译码就是根据编码规则和信道干扰的统计特性,对信息序列u(x)作出估值的方法。常用的有三类译码方法,即代数译码、维特比译码和序贯译码。
⒈代数
代数译码是将卷积码的一个编码约束长度的码段看作是[n0(m+1),k0(m+1)]线性分组码,每次根据(m+1)分支长接收数字,对相应的最早的那个分支上的信息数字进行估计,然后向前推进一个分支。上例中信息序列 =(10111),相应的码序列 c=(11100001100111)。若接收 序列R=(10100001110111),先根据R的前三个分支(101000)和码树中前三个分支长的所有可能的 8条路径(000000…)、(000011…)、(001110…)、(001101…)、(111011…)、(111000…)、(110101…)和(110110…)进行比较,可知(111001)与接收序列(101000)的距离最小,于是判定第 0分支的信息数字为 0。然后以R的第 1~3分支数字(100001)按同样方法判决,依此类推下去,最后得到信息序列的估值为=(10111),遂实现了纠错。这种译码法,译码时采用的接收数字长度或译码约束长度为(m+1)n0,所以只能纠正不多于(dmin-1)/2个错误(n长上的)。实用中多采用反馈择多逻辑译码法实现。
⒉维特比
维特比译码过程
维特比译码是根据接收序列在码的格图上找出一条与接收序列距离(或其他量度)为最小的一种算法。它和运筹学中求最短路径的算法相类似。若接收序列为R=(10100101100111),译码器从某个状态,例如从状态ɑ出发,每次向右延伸一个分支(对于l<L,从每个节点出发都有 2=2种可能的延伸,其中L是信息序列段数,对l≥L,只有一种可能),并与接收数字相应分支进行比较,计算它们之间的距离,然后将计算所得距离加到被延伸路径的累积距离值中。对到达每个状态的各条路径(有2=2条)的距离累积值进行比较,保留距离值最小的一条路径,称为幸存路径(当有两条以上取最小值时,可任取其中之一),译码过程如图。图中标出到达各级节点的幸存路径的距离累积值。对给定 R的估值序列为=(10111)。这种算法所保留的路径与接收序列之间的似然概率为最大,所以又称为最大似然译码。这种译码的译码 约束长度常为编码约束长度的数倍,因而可以纠正不多于(df/2)个错误。
维特比译码器的复杂性随m呈指数增大。实用中m不大于10。它在卫星和深空通信中有广泛的应用。在解决码间串扰和数据压缩中也可应用。
⒊ 序贯译码
序贯译码是根据接收序列和编码规则,在整个码树中搜索(既可以前进,也可以后退)出一条与接收序列距离(或其他量度)最小的一种算法。由于它的译码器的复杂性随m值增大而线性增长,在实用中可以选用较大的m值(如20~40)以保证更高的可靠性。许多深空和海事通信系统都采用序贯译码。

㈢ 什么是卷积编码

卷积码是将k个信息比特编成n个比特,但k和n通常很小,特别适合以串行形式进行传输,时延小。
卷积码定义:

若以(n,k,m)来描述卷积码,其中k为每次输入到卷积编码器的bit数,n为每个k元组码字对应的卷积码输出n元组码字,m为编码存储度,也就是卷积编码器的k元组的级数,称m+1= K为编码约束度m称为约束长度。卷积码将k元组输入码元编成n元组输出码元,但k和n通常很小,特别适合以串行形式进
卷积码的编码器
行 传输,时延小。与分组码不同,卷积码编码生成的n元组元不仅与当前输入的k元组有关,还与前面m-1个输入的k元组有关,编码过程中互相关联的码元个数为n*m。卷积码的纠错性能随m的增加而增大,而差错率随N的增加而指数下降。在编码器复杂性相同的情况下,卷积码的性能优于分组码。
编码原理:
卷积码编码器
以二元码为例,编码器如图。输入信息序列为u=(u0,u1,…),其多项式表示为u(x)=u0+u1x+…+ulxl+…。编码器的连接可用多项式表示为g(1,1)(x)=1+x+x2和g(1,2)(x)=1+x2,称为码 的子生成多项式。它们的系数矢量g(1,1)=(111)和g(1,2)=(101)称作码的子生成元。以子生成多项式为阵元构成的多项式矩阵G(x)=[g(1,1)(x),g(1,2)(x)],称为码的生成多项式矩阵。

㈣ 基于图结构应用《编码,译码器》的设计与实现 这个毕业设计应该从什么思路下手啊~~计算机专高手请指点

兄弟你这个论文有点难度了。不是随便拉拉就行了。得找专业书籍慢慢找和高人指导了。
我查到点不指导有没有用。
Turbo卷积码(TCC)是3G无线系统中所采用的前向错误校正(FEC)机制的整体部分。然而,Turbo译码器所带来的计算负担非常重,并不太适合采用传统DSP或RISC处理器实现。由于现场可编程逻辑阵列(FPGA)内在的并行结构,FPGA为解决3G基站收发器中所需要的符号速率FEC和其它计算密集的任务提供了一个高性能信号处理平台基础。

Turbo 编码

级联码方案(Concatenated coding schemes)是为了通过结合两个或更多相对简单的分量或构造模块码来获得较高的编码增益。Turbo码认为是对级联码结构的一种改进,其中采用迭代算法对相关的码序列进行译码。Turbo码是通过将两个或更多分量码应用到同一数据序列的不同交织版本上构成的。对于任何传统单分量编码,译码器的最后一级生成的都是硬判决译码数据位。为了使象Turbo码这样的级联码方案工作得更好,译码算法不应被限制为只能在译码器间传递硬判决。为最好地利用每个译码器获得的信息,译码算法必须可以实现软判决交换,而不是采用硬判决。对于采用两个分量码的系统,译码的概念是指将来自一个译码器的软判决输入到另一个译码器的输入,并将此过程重复几次以获得更好的判决,如图1所示 。

3GPP Turbo 编码器

图2为3GPP编码器。

输入数据流输入到RSC1,它为每个输入比特生成一个对等比特(Parity Bit)。输入数据还经过交织后由RSC2处理生成第二个对等比特流。
3GPP标准定义,输入块的长度在40至5114 位之间。编码器生成一个速率为1/3的包括原始输入位和两个对等位的系统码。通过打孔方法可以获得1/2编码速度的编码。递归系统编码器的实现比较直接,然而交织器则不那么简单,要比标准的卷积或块交织器复杂。

一旦将输入数据块长度K 提供给编码器以后,编码器将计算交织矩阵行数R和列数 C,并创建相应的交织数据结构。R 和 C 是数据块长度K的函数。在输入符号被加载到交织矩阵以后,那么将根据一定的顺序进行行间交换和列间交换。交换模式是根据块长度K选择的(即依赖于K)。行和列交换完成后,通过逐列读出交织矩阵数据就可以得到最终的交织序列。在数据读出时需要进行删减操作,以保证在输出中只有正确的输入符号,请注意,交织阵列包含的数据位通常比K个原始输入符号要多 ,因为R C>K。然后,新的序列经过RSC2编码生成第二个对等位流。
实现交织器的一种方法是在存储器中存储完整的交换序列。即,一旦K 给定,即调用一个初始化例程(运行在处理器上的软件例程或利用FPGA中的功能单元)生成相应的交换序列,然后将这一信息存储在存储器中。然而,这一方法需要大量的存储器。利用Virtex -E FPGA 技术提供的 4096位每块的片上存储器,将需要[5114 13/4096]=17个存储器块。

在我们的方法中,采用一个预处理引擎生成一个序列值(存储),这一序列值被存储起来,交织器地址发生器将使用这些序列值。这一硬件单元采用几个小型数据结构(素数表)来计算所需要的序列。这一准备过程需要的时钟周期数与信息块的长度成比例。例如,对于K=40的块需要280时钟周期,而对于最大块长度K=5114,则需要 5290个时钟周期。该过程只需要在块长度变化时进行。地址发生器利用这些更为紧凑的数据结构来实时生成交织地址。

3GPP Turbo 译码器

译码器包括两个MAP(最大后验概率)译码器和几个交织器。Turbo算法的优良的性能源于可以在两个MAP译码器间共享可靠性信息(extrinsic data,外数据,或称先验数据)。

在我们的设计中,MAP译码器采用的是Bahl, Cocke, Jelinek 和 Rajiv (BCJR) 算法。BCJR算法计算每个符号的最大后验对数似然率,并且是一种真正的软判决算法。考虑到数据是以块的形式传输的,因此可以在时间维中前向或反向搜索一个符号序列。对于任一序列,其出现概率都是单独符号出现概率的乘积。由于问题是线性的,因此序列概述可以利用概率的对数和来代替。

为了与一般文献中的习惯一致,我们将译码迭代的前向和反向状态概率分别利用 和 来表示。通常,BCJR算法要求在接收到整个信息后才开始解码。对于实时应用,这一限制可能太严格了。例如,3GPP Turbo译码器将需要大量存储器存储一个5114符号信息块的完全状态结构(state trellis)。对于单片FPGA设计来说,这需要的存储资源太多了。与维特比(Vitebi)算法类似,我们可以先从全零向量 O和数据{yk}(k 从 n 到 n-L) 开始反向迭代。L次反向迭代可获得非常好的 n-L近似值。只要L选择合适,最终的状态标志(state metric)就是正确的。可以利用这一性质在信息结束前就开始进行有效的位译码。

L 被称为收敛长度。其典型值大约是译码器约束长度的数倍(通常为5至10倍),并随着信噪比的降低而增加。

通常,Turbo译码算法将计算所有的 (对整块信息),将这些数值存储起来,然后在反向迭代中与反向状态概率一起用来计算新的外信息(extrinsic information,或称先验信息)。我们的设计中采用了窗口化方法。

译码过程以一个前向迭代开始,计算包含L 个接收符号的块i的 值。同时,对未来(i+1)块进行一个反向迭代(标号 )。对块i+1的反向迭代结束时,就获得了开始对块i 进行反向迭代所需要的正确的 初始向量。 与此同时对数似然函数(Lall)也在进行。 每一 和 处理过程都需要8个max* 操作 - 每个针对状态结构(tellis)中的8个结点之一。最终的对数似然计算需要14个并行max* 运算符。为了提供可接受的译码速率,在设计中采用了38个max* 功能单元。

从 C描述到FPGA设计

FPGA Turbo 编码译码器设计是利用基于C的设计和验证方法进行的,如图3所示。

算法开发阶段采用具有定点C类型的Art Library 来对定点计算的位真(bit-true)效应进行准确建模。在这一阶段考察了几种可能算法的定点性能。一旦选定正确的量化算法,就可利用A|rtDesignerPro创建一个专用DSP架构。A|rtDesignerPro的一个最强大的功能之一是可以插入和利用专用的数据通道核心(称为专用单元,ASU)。利用这些ASU加速器核心可以使我们处理Turbo译码器算法内在的计算复杂性。

A|rtDesignerPro可自动完成寄存器分配、调度和控制器生成。在Turbo编码译码器设计中, A|rtDesignerr的自动循环合并可获得最佳的;任务调度,MAP译码步骤的内部循环都只有一个周期长。

A|rtDesignerPro生成的最终结果是可综合的寄存器级(RT-level) VHDL或Verilog 描述。基于C的工具流支持FPGA专用功能。例如,可利用BlockRAM自动构造RAM,而寄存器文件也可利用分布式存储器而不是触发器来实现 。

最后,逻辑综合和Xilinx实施工具套件将RTL HDL 转换为 FPGA 配置位流。

FPGA Turbo 编码译码器实现

A|rtDesigner创建的Turbo编码器和译码器核心硬件结构包含许多专用ASU加速器。其中最重要的一个加速器完成max* 操作。max* 运算符根据下式计算两个幂值a 和 b:

max* (a,b)=ln(expc(a)+expc(b))。

如 图4所示, max* 运算是通过选择(a,b)最大值,并应用一个存储在查找表(LUT)中的校正因子近似进行的。这一近似算法非常适合利用Xilinx FPGA 实现,其中LUT是其最终基本构造单元。

结果

Turbo译码算法硬件字长的选择极大地影响总体性能。利用C-to-FPGA设计流程,这一定点分析是完全在C环境中完成的。结果示于图 5。

上图显示出了我们的浮点Turbo译码器算法和对应的定点算法之间的性能差别。仿真是在5114块长度、5次译码迭代和AWGN信道模型情况下进行的。结果清晰明显出性能的损失是非常小的。

我们的Turbo译码器的定点性能做为译码器迭代次数的函数 ,对于1.5 dB SNR,位错率为10-6。

译码器功能的实现非常具有挑战性,我们同时针对Virtex-E和 Virtex-II 器件进行了适配。Virtex-II 器件实施是采用运行在1.85 speedfile数据库上的Xilinx 4.1i 实施工具集完成的。利用XC2V1000BG575-5 FPGA实现的最终设计,达到了66 MHz 的时钟性能,消耗了3,060个逻辑片 和 16个块RAM。对于从40至 5114符号长度的块,采用5次译码迭代循环的情况下,译码器达到了2 至6.5 百万符号每秒(Msym/s)的吞吐量。编码器占用了903个逻辑片、3个块RAM并支持83 MHz时钟频率。对于从40至5114位的块长度,速率可达到9 至20 Msym/s。

能用上就好了,用不上别怪我。对不起哈~祝福你~

阅读全文

与卷积码编译码实验vhdl相关的资料

热点内容
centos开机命令行模式 浏览:695
遍历所有listpython 浏览:660
力控加密文件夹 浏览:515
如何更改移动服务器密码 浏览:686
苹果8p手机加密 浏览:749
ipad建文件夹怎么弄 浏览:833
iphone13对wap3加密 浏览:555
pdf文件打开失败 浏览:913
dubbo怎么调用不同服务器接口 浏览:40
全能解压王app历史版本 浏览:75
优先队列与拓扑排序算法 浏览:281
pdf转换formacbook 浏览:871
pdf文件内容怎么编辑 浏览:48
134压缩机排气温度多少 浏览:256
unity等待编译后 浏览:806
黑鲨手机锁屏视频在哪个文件夹 浏览:781
wow地图解压后怎么压缩 浏览:823
有pdf却打不开 浏览:462
七星彩软件app怎么下载 浏览:219
32单片机的重映射哪里改 浏览:818