Turbo码的编译码原理及仿真研究.docx

上传人:b****1 文档编号:498937 上传时间:2022-10-10 格式:DOCX 页数:18 大小:925.01KB
下载 相关 举报
Turbo码的编译码原理及仿真研究.docx_第1页
第1页 / 共18页
Turbo码的编译码原理及仿真研究.docx_第2页
第2页 / 共18页
Turbo码的编译码原理及仿真研究.docx_第3页
第3页 / 共18页
Turbo码的编译码原理及仿真研究.docx_第4页
第4页 / 共18页
Turbo码的编译码原理及仿真研究.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Turbo码的编译码原理及仿真研究.docx

《Turbo码的编译码原理及仿真研究.docx》由会员分享,可在线阅读,更多相关《Turbo码的编译码原理及仿真研究.docx(18页珍藏版)》请在冰豆网上搜索。

Turbo码的编译码原理及仿真研究.docx

Turbo码的编译码原理及仿真研究

暑期实习报告

——Turbo码的编译码原理及仿真研究

一、研究背景

Turbo码通过对子码的伪随机交织实现大约束长度的编码,具有接近随机编码的特性,采用迭代译码取得了中等的译码复杂度,它的误码性能逼近了Shannon极限。

Turbo码相对以前的编码方式大大提高了功率的利用率,因此特别适用于信噪比受限的信道,同时Turbo码在衰落信道中也具有很好的编译码性能。

二、研究内容

1.学习卷积码原理及交织器设计,进行相关仿真分析。

2.阅读Turbo码相关文献资料,进行Turbo码编码仿真。

3.学习Turbo译码算法,进行Turbo码译码仿真,并分析不同码率、不同交织长度、不同迭代次数下的性能。

三、研究过程及结果

1.卷积码及交织器

(一)研究AWGN信道

<实例1>

clearall

t=0:

0.001:

10;

x=sin(2*pi*t);

snr=20;

y=awgn(x,snr);

subplot(2,1,1);plot(t,x);title('正弦信号x')

subplot(2,1,2);plot(t,y);title('叠加了高斯白噪声的正弦信号')

z=y-x;

var(z)

ans=

0.0098

(二)卷积码

FEC系统中除了应用分组码(BlockCode)外,还广泛使用卷积码(ConvolutionalCode)。

在同等码率和相似纠错能力下,卷积码的实现往往比分组码要简单,因此,在FEC系统中,将越来越多地应用卷积码。

(1)卷积码的原理

卷积码又称连环码,和分组码有明显的区别。

(n,k)线性分组码中,本组监督元只与本组信息元有关,与其他各组无关,即分组码编码器本身并无记忆性。

卷积码不同,每个(n,k)码段内的n个码元不仅与该码段内的信息元有关,而且与前面m段信息元有关。

m称为编码存储。

卷积码常用符号(n,k,m)表示。

(2)卷积码的编码函数

卷积码的编码函数主要有以下4个:

<1>code=convenc(msg,trellis)

完成输入信号msg的卷积编码,其中trellis代表编码多项式,但其必须是MATLAB的网格结果,需要利用poly2trellis函数将多项式转化为网格表达式。

msg的比特数必须为log2(trellis,numInputSymbols)。

<2>code=convenc(msg,trellis,puncpat)

作用与1相似,其中punpat定义凿孔模式。

<3>code=convenc(msg,trellis,…,init_state)

init_state指定编码寄存器的初始状态。

<4>decoded=vitdec(code,trellis,tblen,opmode,dectype)

对码字code进行Viterbi译码。

trellis表示产生码字的卷积编码器,tblen表示回溯的深度,opmode指明译码器的操作模式,dectype则给出判决器判决的类型,如软判决和硬判决。

<实例2>

仿真BPSK调制在AWGN信道下分别使用卷积码和不使用卷积码的性能,其中,卷积码的约束长度为7,生成多项式为[171,133],码率为1/2,译码分别使用硬判决译码和软判决译码。

clearall

EbNo=0:

10;%SNR的范围

N=1000000;%消息比特个数

M=2;%BPSK调制

L=7;%约束长度

trel=poly2trellis(L,[171,133]);%卷积码生成多项式

tblen=6*L;%Viterbi译码器回溯深度

msg=randint(1,N);%消息比特序列

msg1=convenc(msg,trel);%卷积编码

x1=pskmod(msg1,M);%BPSK调制

forii=1:

length(EbNo)

%加入高斯白噪声,因为码率为1/2,所以每个符号的能量要比比特能量少3dB

y=awgn(x1,EbNo(ii)-3);

y1=pskdemod(y,M);%硬判决

y1=vitdec(y1,trel,tblen,'cont','hard');%Veterbi译码

[err,ber1(ii)]=biterr(y1(tblen+1:

end),msg(1:

end-tblen));%误比特率

y2=vitdec(real(y),trel,tblen,'cont','unquant');%软判决

[err,ber2(ii)]=biterr(y2(tblen+1:

end),msg(1:

end-tblen));%误比特率

end

ber=berawgn(EbNo,'psk',2,'nodiff');%BPSK调制理论误比特率

semilogy(EbNo,ber,'-ko',EbNo,ber1,'-k*',EbNo,ber2,'-k.');

legend('BPSK理论误比特率','硬判决误比特率','软判决误比特率')

title('卷积码性能')

xlabel('Eb/No');ylabel('误比特率')

从图中可以看出,信噪比较高时,硬判决误码要比没有采用卷积码时性能大约提高3dB,而软判决译码要比硬判决译码性能好大约2dB。

(三)交织器

实际信道中产生的错误往往是突发错误或突发错误与随机错误并存,如短波、散射和有线交换等信道中。

在这类信道中应用纠随机错误码纠错,效果显然不好,如果能首先把突发错误离散成随机错误,再利用就随机错误的码纠错,则能取得明显效果。

移动通信中,如何选择合适的差错控制方法,不仅与信息码发生的错码数量有关,还与错码在数据信息中的分布有关,众所周知,大多数差错的产生既不是随机无关也不是明确的单个突发。

因此,单纯纠随机错误码或纠单个突发错误的信道编码将难以纠正的混合分布的错码。

尤其是在移动通信这种变参信道上,人们希望设计这样的信道编码,它既能纠随机错误又能纠单个或多个突发错误。

交织方法是一种很实用而且很常用的构造码的方法,它能把比较长的突发错误或多个突发错误离散成随机错误。

交织是指一个数据序列在一一对应的条件下进行数据的位置重排过程,其逆过程为解交织,也就是将接收到的信息序列进行位置还原,使数据的位置还原成发送时的顺序。

<实例3>

利用MATLAB仿真(7,4)Hamming码编码和矩阵交织器级联后的性能,并和未交织的性能进行比较。

注:

(Code=encode(msg,n,k,’type/fmt’)可以进行一般的线性分组编码、循环编码和Hamming编码。

编码方式由type指定。

Linear、cyclic、hamming分别对应上面三种方式。

Fmt取值可以是binary或decimal,说明输入待编码数据是二进制还是十进制。

code=encode(msg,n,k)默认使用Hamming编码。

Msg=decode(code,n,k,’type/fmt’)用来译码,type/f,t的取值与encode函数相对应。

Msg=decode(code,n,k)时,默认对Hamming编码进行译码。

clearall

N=10000;

k=4;%编码码字消息比特长度

n=7;%编码码字长度

x=randint(N*k,1);%消息比特

code=encode(x,n,k);%(7,4)Hamming编码

code1=matintrlv(code,N/10,10*n);%(N/10,10*n)矩阵交织

noise=randerr(N,n,[0:

n-3;0.80.090.070.030.01]);%信道差错,包括独立差错和突发差错

noise=reshape(noise.',N*n,1);

y=bitxor(code,noise);%无交织接收信号

y=decode(y,n,k);%Hamming译码

[err,ber]=biterr(x,y);%统计误比特率

y1=bitxor(code1,noise);%有交织接收信号

y1=matdeintrlv(y1,N/10,10*n);%解交织

y1=decode(y1,n,k);%Hamming译码

[err,ber1]=biterr(x,y1);%统计误比特率

disp('无交织时的误比特率:

');

ber

disp('有交织时的误比特率:

');

ber1

结果:

程序运行结果可以看出,无交织器时的误比特率要大于有交织器时的误比特率,由此可以看出,交织器在信道改造中的作用。

2.Turbo码编码

1993年,CBerron等学者在国际通信会议上提出了Turbo码,由于Turbo码是在充分考虑了关于无差错传输的3个基本条件的基础上提出的,因此它具有优秀的纠错能力。

Turbo码是并行级联编码,编码部分包括编码、交织、删余等,如图3所示。

信息序列u送入分量编码器RSC1得到校验序列c1;u经过交织后再送入分量编码器RSC2得到校验序列c2,两个分量编码器结构相同,如图4所示。

交织器是一个一一映射的函数,它将信息序列的比特位置重置,从而改变码字重量,改善译码性能。

将系统比特u与校验比特c1、c2复接后送入信道,完成编码。

为了提高码率,可通过图3中的删余矩阵模块来有规律的删除一些校验信息。

3.Turbo码译码

Turbo码获得优异性能的根本原因之一在于采用了迭代译码,通过分量译码器之间软信息的交换来提高译码性能。

译码部分包括与编码部分相对应的译码器、解交织器等。

将一个译码器的软输出信息作为下一个译码单元的先验输入,为获得更好的译码性能,将此过程迭代数次,这就是Turbo码译码的基本工作原理。

图5所示为Turbo码译码器结构框图。

它由两个软输入软输出(SISO)译码器DEC1和DEC2串行级联组成。

将接收到的序列解复接得到xk,yk和zk。

把xk,yk和由DEC2产生的外信息送入DEC1,通过一定的译码算法,得到u的似然比信息,即对RSC1进行译码。

将其中的外信息进行交织处理,再与经交织的xk和yk一同送入DEC2,通过译码,得到DEC2的外信息,再通过解交织送回DEC1,作为DEC1的先验信息,这样就完成了一次译码。

这样迭代多次,似然比的渐进值就逼近于对整个码的最大似然译码。

然后对此似然比进行硬判决,即可得到信息序列u的每一比特的最佳估计序列u’。

译码算法应该考虑到三方面的问题,及外信息的引入;如何在迭代译码中充分利用各类信息,防止简单正反馈的形成,确保算法收敛;充分利用码原件的相关信息。

常见的算法有一下几种:

(1)标准MAP算法

是对bahl软输出算法做一定修正后,通过除以先验分布来消除正反馈的算法。

对于约束长度为M1的卷积码,其运算量为每比特6x3^M次乘法和5x2^M次加法。

由于乘法运算量大,限制了译码的规模和速度。

(2)Log-MAP算法

实际上就是对标准MAP算法中的似然全部用对数似然度来表示,这样,乘法运算变成了加法运算。

总的运算量成为6x2^M次加法,5x2^M次求最大运算和5x2^M次查表。

(3)Max-Log-MAP算法

是在上述对数域的算法中,将似然值加法表示式中的对数分量忽略,是似然加法完全变成求最大值运算,这样除了省去大部分的加法运算外,最大的好处是省去了对信噪比的估计,使得算法更稳健。

(4)软输出维特比译码(SOVA)

其运算量为标准维特比算法的两倍。

维特比算法是最大似然序列估计算法,但由于在它的每一步都要删除一些低似然路径,为每一状态只保留一条最优路径,它无法提供软输出。

为了给他输出的每个比特赋予一个可信度,需要在删除低似然路径是做一些修正,以保留必要的信息。

其基本思想是利用最优留存路径和被删

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1