Turbo码地编译码算法仿真汇总情况Word文件下载.docx
《Turbo码地编译码算法仿真汇总情况Word文件下载.docx》由会员分享,可在线阅读,更多相关《Turbo码地编译码算法仿真汇总情况Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
卷积、交织
杨佳能
不同调制信号的设计
熊风
在进行本次Turbo仿真时,采用了两种不同编程方式。
在程序一中是直接调用matlabCommunicationsSystemToolbox中的Turbo编码和解码工具箱,通过配置参数进行仿真。
而在程序二中则根据Turbo码编译码原理编写。
如果程序一更像是一个黑匣子,只能知道通过编解码模块前、后的数据,而具体做了哪些则不得而知。
a.编码
图1Turbo码编码器结构
典型的Turbo码编码器结构框图如图所示:
由两个反馈的编码器通过一个交织器并行连接而成。
如果必要,由成员编码器输出的序列经过删余阵,从而可以产生一系列不同码率的码。
例如,对于生成矩阵为g=[g1,g2]的(2,1,2)卷积码通过编码后,如果进行删余,则得到码率为1/2的编码输出序列;
如果不进行删余,得到的码率为1/3。
一般情况下,Turbo码成员编码器是RSC编码器。
原因在于递归编码器可以改善码的比特误码率性能。
通俗理解1/2码率就是信号中有一半都是“无用信号”,这些“无用信号”就是两个分量编码器的生成的校验码,而删余则是各删除一部分校验码,把剩下的再和信息比特合在一块,形成编码好的矩阵。
b.译码
图2Turbo译码结构
Turbo码获得优异性能的根本原因之一是使用了迭代译码,通过与分量编码器对应的分量译码器之间软信息的交换来提高译码性能。
对于
Turbo
码这样的并行级联码,如果分量译码器的输出为硬判决,则不可能实现分量译码器之间软信息的交换,从而限制了系统性能的进一步提高。
从信息论的角度来看,任何硬判决都会损失部分信息,因此,如果分量译码器能够提供一个反映其输出可靠性的软输出,则其他分量译码器也可以采用软判决译码,从而系统的性能可以得到进一步提高。
为此,人们提出了软输入软输出译码(SISO)的概念和方法。
码的分量码
SISO
译码算法总体上可分为MAP和SOVA
两类主要算法。
其中MAP算法是一种最佳后验概率算法。
SOVA类算法主要包括软输出的维特比算法(SOVA)和连续列表输出维特比算法(SLVA)。
SOVA算法实际上就是veterbi算法的扩展,保留的路径数不是两条而是和状态数有关从所有可行的路径中找最优的是最大似然序列检测。
d.衰落信道
由于多径和移动台运动等影响因素,使得移动信道对传输信号在时间、频率和角度上造成了色散,如时间色散、频率色散、角度色散等等。
根据不同无线环境,接收信号包络一般服从几种典型分布,如瑞利分布、莱斯分布和Nakagami-m分布。
在仿真衰落信道时,最重要的参数是多径扩展和多普勒频移。
通常在离基站较远、反射物较多的地区,发射机和接收机之间没有直射波路径,存在大量反射波;
到达接收天线的方向角随机且在(0~2pi)均匀分布;
各反射波的幅度和相位都统计独立。
图3瑞利分布概率分布密度
3、设计与实现过程
图4、程序一框图
●具体实现过程:
按照流程图中的各方面(模块)内容进行代码级的详细说明,例如:
●衰落信道的设计
在进行仿真的过程中尝试使用了两种不同的编写方式:
a.CreateRayleighfadingchannelobject.
chan_ray=rayleighchan(1/10000,100);
fadedSig=filter(chan_ray,modSignal);
%Applythechanneleffects
hChan=comm.AWGNChannel('
NoiseMethod'
'
Signaltonoiseratio(SNR)'
);
hChan.SNR=EbNo_db(n);
receivedSignal=step(chan,fadedSig);
b.调用改进JAKES模型产生单径平坦型瑞利衰落信道子程序
nsamp=8;
%脉冲抽样点数
ts=1/(num*nsamp);
%抽样时间间隔
t=(0:
num*nsamp-1)*ts;
%抽样时间序列
·
h=rayleigh(10,t);
%调用瑞利衰落子程序,输入为(最大多普勒频移,抽样时间序列)
modSignal=rectpulse(modSignal,nsamp);
%矩形脉冲形成
modSignal=h'
.*modSignal;
%通过瑞利信道
receivedSignal=intdump(receivedSignal,nsamp);
%匹配滤波相干解调
使用matlab函数rayleighchan
●程序一:
a.调用turbo编码器解码器
encoder=comm.TurboEncoder('
InterleaverIndicesSource'
'
Inputport'
decoder=comm.TurboDecoder('
...
'
NumIterations'
4);
b.调用AWGN信道
chan=comm.AWGNChannel('
EbNo'
EbNo_db,'
BitsPerSymbol'
log2(M));
c.进行编码解码
Turbo编码:
encodedData=step(encoder,msg,index);
调制编码·
过信道receivedSignal=step(chan,modSignal);
解调·
Turbo译码:
receivedBits=step(decoder,-demodSignal,index);
●程序二
code_length=1024;
%码长
rate=1/2;
%码率
niter=4;
%迭代次数
a.信道:
AWGN
EbN0_db=2:
6;
en=10^(EbN0_db(nEN)/10);
L_c=4*en*rate;
%信道置信度
sigma=1/sqrt(2*rate*en);
%AWGN信道标准差
过信道:
r=encoder_out+sigma*randn(1,code_length*
(2));
b.Turbo编码器
%第一个分量RSC编码
output1=rsc_encode(G,msg,1);
%1*2048
y(1,:
)=output1(1:
2:
2*code_length);
%系统比特
y(2,:
)=output1(2:
%校验比特
%第二个分量RSC编码
a=reshape(y(1,:
),32,32);
y_inv=reshape(a'
1,1024);
output2=rsc_encode(G,y_inv,-1);
%输入1024输出1*2048
y(3,:
)=output2(2:
%校验比特输出
删余生成码率为1/2的码
encoder_out(1:
end)=y(1,:
encoder_out(2:
4:
end)=y(2,1:
end);
encoder_out(4:
end)=y(3,2:
%删余,奇为系统比特
c.Turbo译码器
通过解复用生成每个分量译码器的译码输入数据;
初始化外部信息L_e(1:
code_length)后。
根据迭代次数,循环依次进行第一分量译码、第二分量译码。
%第一分量译码器
L_a(index)=L_e;
%先验信息
L_all=sova(rec_s(1,:
),G,L_a,1);
L_e=L_all-2*rec_s(1,1:
2*code_length)-L_a;
%计算外部信息
%第二分量译码器
L_a=L_e(index);
L_all=sova(rec_s(2,:
),G,L_a,2);
L_e=L_all-2*rec_s(2,1:
最后再估计信息比特值。
d.软输入Viterbi算法
初始化时,建立网格图,网格中的零状态初始化度量为0,其他为负无穷。
输入先验信息L_a、RSC码生成矩阵以及数据;
前向跟踪计算所有路径度量值;
第一分量译码器,从零状态开始向后跟踪;
第二分量译码器从最可能的状态开始后向跟踪;
后向跟踪获得估计比特及最大似然路径;
找到相应于不同信息比特估计的竞争路径的最小delta值,得到软输出。
(具体可参看刘向东、向良军编著的《信道编码与matlab仿真》,除SOVA算法外里面还给出了Log_MAP算法)。
4、结论
在进行仿真时,发现上述两种衰落信道误码率基本都是50%左右,也就意味着基本上全部都是错的。
在进行了分析之后发现,在不加其他模块进行仿真的时候,光对比经过衰落信道前后的比特流基本就能错一半左右。
图5衰落信道下程序1仿真结果
图6仿真得出ber值
因无法仿真出较好的衰落信道,因此两个程序都放弃衰落信道改用加性高斯白噪声信道。
图7程序1结果
在16QAM调制信号时在-1dB便能达到接近
。
图8程序2结果
程序二是1/2码率,采用BPSK调制、sova译码算法,需要到9dB时,误码率大概能达到
量级。
两者程序出现如此大的结果差异,最主要的可能与Turbo译码方式相关。
成绩评定表
成
绩
评
定
项目
比例
得分
报告成绩(百分制)
20%
答辩成绩(百分制)
80%
总评成绩(百分制)
100%
评语:
评审教师:
时间:
课题设计成绩评定表单独一页,装订在报告的最后