Turbo码的编译码算法仿真
电子信息类实践课III 通信系统仿真
题目Turbo码的编译码算法仿真
专业_____________
学号________________
姓名_________________
日期________________
注:本报告仅供参考
哈尔滨工业大学电子信息类实践课III通信系统仿真
1、课程设计目的(黑体小三,段前段后个一行)
通过完成在在衰落信道下采用不同调制信号进行Turbo码编译码的编程实现,
进一步了解了Turbo码的编码解码过程,以及在不同调制方式不同信道下的性能比见。通过对卷积和交织器的设计,深入了解卷积和交织的作用。以及熟悉了通信仿真的整体流程。
2、课程设计内容
具体叙述课程设计的主要内容和原理。
表1主要课程设计内容列表
在进行本次Turbo仿真时,采用了两种不同编程方式。在程序一中是直接调
用matlab Communications System Toolbox 中的Turbo编码和解码工具箱,通过配置参数进行仿真。而在程序二中则根据Turbo码编译码原理编写。如果程序一
更像是一个黑匣子,只能知道通过编解码模块前、后的数据,而具体做了哪些则不得而知。
图1 Turbo码编码器结构
典型的Turbo码编码器结构框图如图所示:由两个反馈的编码器通过一个交织器并行连接而成。如果必要,由成员编码器输出的序列经过删余阵,从而可以产生一系列不同码率的码。例如,对于生成矩阵为g=[gi,g2]的(2 , 1, 2)卷积码通过编码后,如果进行删余,则得到码率为1/2的编码输出序列;如果不进行删余,得到的码率为1/3。一般情况下,Turbo码成员编码器是RSC编码器。原因在于递归编码器可以改善码的比特误码率性能。
哈尔滨工业大学电子信息类实践课III通信系统仿真
通俗理解1/2码率就是信号中有一半都是“无用信号”,这些“无用信号”就是两个分量编码器的生成的校验码,而删余则是各删除一部分校验码,把剩下的再和信息比特合在一块,形成编码好的矩阵。
b.译码
图2 Turbo译码结构
Turbo码获得优异性能的根本原因之一是使用了迭代译码,通过与分量编码器对应的分量译码器之间软信息的交换来提高译码性能。对于Turbo码这样的并行级联码,如果分量译码器的输出为硬判决,则不可能实现分量译码器之间软信息的交换,从而限制了系统性能的进一步提高。从信息论的角度来看,任何硬判决都会损失部分信息,因此,如果分量译码器能够提供一个反映其输出可靠性的软输出,则其他分量译码器也可以采用软判决译码,从而系统的性能可以得到进一步提高。为此,人们提出了软输入软输出译码(SISO )的概念和方法。Turbo码的分量码SISO译码算法总体上可分为MAP和SOVA两类主要算法。其中MAP算法是一种最佳后验概率算法。SOVA类算法主要包括软输出的维特比算法(SOVA)和连续列表输出维特比算法(SLVA )。
SOVA算法实际上就是veterbi算法的扩展,保留的路径数不是两条而是和状态数有关从所有可行的路径中找最优的是最大似然序列检测。
d.衰落信道
由于多径和移动台运动等影响因素,使得移动信道对传输信号在时间、频率
哈尔滨工业大学电子信息类实践课III通信系统仿真
和角度上造成了色散,如时间色散、频率色散、角度色散等等。根据不同无线环境,接收信号包络一般服从几种典型分布,如瑞利分布、莱斯分布和Nakagami-m
分布。在仿真衰落信道时,最重要的参数是多径扩展和多普勒频移。
通常在离基站较远、反射物较多的地区,发射机和接收机之间没有直射波路
径,存在大量反射波;到达接收天线的方向角随机且在(0-2 pi)均匀分布;各反
3、设计与实现过程
信号生成
哈尔滨工业大学电子信息类实践课III通信系统仿真
图4、程序一框图
具体实现过程:按照流程图中的各方面(模块)内容进行代码级的详细说明,例如:衰落信道的设计
在进行仿真的过程中尝试使用了两种不同的编写方式:
a. Create Rayleigh fadi ng cha nnel object.
chan_ray = rayleighcha n(1/10000,100);
fadedSig = filter(cha n_ ray,modSig nal); % Apply the cha nnel effects
hChan = comm.AWGNCha nn el('NoiseMethod', 'Sig nal to n oise ratio (SNR)'); hCha n.SNR = EbNo_db( n);
fadedSig = filter(cha n_ ray,modSig nal); % Apply the cha nnel effects receivedSig nal = ste p( cha n, fadedSig); % App ly the cha nnel effects
b.调用改进JAKES模型产生单径平坦型瑞利衰落信道子程序
nsamp = 8;%脉冲抽样点数
ts = 1/(num*n sam p);%抽样时间间隔
t = (0: num* nsa mp -1)*ts;% 抽样时间序列
h = rayleigh(10,t);%调用瑞利衰落子程序,输入为(最大多普勒频移,抽样时间序列)
modSig nal = rect pulse(modSig nal, nsamp);%巨形脉冲形成modSig nal = h'.*modSig nal;% 通过瑞利信道
receivedSig nal = in tdu mp( receivedSig nal, nsamp); %匹配滤波相干解调使用matlab 函数rayleighchan
哈尔滨工业大学电子信息类实践课III通信系统仿真程序一:
a调用turbo编码器解码器
encoder =
comm.TurboE ncoder('l nterleaverl ndicesSource','l nput
P ort');
decoder =
comm.TurboDecoder('l nterleaverl ndicesSource','l nput p ort', ...
'Numlteratio ns',4);
b.调用AWGN信道
cha n = comm.AWGNCha nn el('EbNo',EbNo_db,'Bits PerSymbol',log2(M));
c.进行编码解码
Turbo 编码:encodedData = step(encoder,msg,index);
?…调制编码?…
过信道receivedSignal = step(chan,modSignal);
?- ?解调?…
Turbo 译码:receivedBits = step(decoder,-demodSignal,index);
程序二
code_le ngth = 1024;%码长
rate = 1/2;%码率
niter = 4;%迭代次数
a.信道:AWGN
EbN0_db = 2:6;
en = 10A(EbN0_db( nEN)/10);
L_c = 4*en *rate;%信道置信度
sigma = 1/sqrt(2*rate*en);%AWGN 信道标准差
过信道:r = en coder_out + sigma*ra ndn (1,code_le ngth*(2));
b.Turbo编码器
%第一个分量RSC编码
out put1 = rsc_en code(Gmsg,1);%1*2048
y(1,:) = out put1(1:2:2*code_le ngth);% 系统比特
y(2,:) = out put1(2:2:2*code_le ngth);% 校验比特
%第二个分量RSC编码
a = resha pe(y(1,:),32,32);
y_inv = resha pe(a',1,1024);
out put2 = rsc_en code(Gy_i nv,-1);% 输入1024 输出1*2048
哈尔滨工业大学电子信息类实践课III通信系统仿真
y(3,:) = out pu t2(2:2:2*code_le ngth);% 校验比特输出
删余生成码率为1/2的码
en coder_out(1:2:e nd) = y(1,:);
en coder_out(2:4:e nd) = y(2,1:2:e nd);
en coder_out(4:4:e nd) = y(3,2:2:e nd);%删余,奇为系统比特
c.Turbo译码器
通过解复用生成每个分量译码器的译码输入数据;初始化外部信息L_e(1:code_length)后。根据迭代次数,循环依次进行第一分量译码、第二分量译码。
%第一分量译码器
L_a(i ndex) = L_e; %先验信息
L_all = sova(rec_s(1,:),G,L_a,1);
L_e = L_all-2*rec_s(1,1:2:2*code_le ngth)-L_a;% 计算外部信息
%第二分量译码器
L_a = L_e(i ndex);
L_all = sova(rec_s(2,:),G,L_a,2);
L_e = L_all-2*rec_s(2,1:2:2*code_le ngth)-L_a;
最后再估计信息比特值。
d.软输入Viterbi算法
初始化时,建立网格图,网格中的零状态初始化度量为0,其他为负无穷。输
入先验信息L_a、RSC码生成矩阵以及数据;前向跟踪计算所有路径度量值;第一分量译码器,从零状态开始向后跟踪;第二分量译码器从最可能的状态开始后向跟踪;后向跟踪获得估计比特及最大似然路径;找到相应于不同信息比特估计的竞争路径的最小delta值,得到软输出。(具体可参看刘向东、向良军编著的《信道编码与matlab仿真》除SOVA算法外里面还给出了Log_MAP算法)。