通信算法之十二:Turbo编码与译码仿真链路

一. Turbo编码与译码原理

       Turbo编码器是:并行级联卷积编码(PCCC,Parallel Concatenated ConvolutionalCode),它使用了两个8状态子编码器和一个Turbo码内交织器。Turbo编码器的码率为1/3。


二. 仿真链路:

信道环境:高斯白噪声

仿真参数:R =1/3 ,  约束长度=9,MAP交织器为:LTE交织器

仿真结果:LTE标准Turbo编码译码,仿真增益为:13dB。(12.6 - (-0.9 )= 13.5dB )

仿真平台:matlab

信道环境:高斯白噪声

信噪比SNR : -1.4:0.1:-0.6

仿真链路:源比特+Turbo编码+QPSK调制+AWGN+QPSK解调+Turbo译码+BER

仿真验证架构:



误码率曲线:



三.  MATLAB仿真代码

%****************************************************************
% 内容概述:Turbo编码与Turbo译码链路,符合LTE标准,仿真增益:13dB,R=1/3
% 仿真链路:源比特-->Turbo编码-->QPSK调制-->高斯白噪声信道-->
%           QPSK解调-->Turbo译码-->BER
% 创 建 人:
% 创建时间:2013年11月21日
% 参考文献:网络资料
% 版权声明:不可随意复制、不可随意传播。
%****************************************************************
clc;
clear all;
close all;
%系统参数设计------------------------------
TurboIter = 8;%Turbo迭代次数
SourceBitlen = 5184;%输入源比特长度
SNR = -1.4:0.1:-0.6;%信噪比序列
BerEbNo = zeros(1,length(SNR));

for nEN=1:length(SNR)
    Err_counter = 0;
    for nframe=1:10000  
        %输入源比特序列基带信号--------------------
        SourceBit = round(rand(1,SourceBitlen));
        
        %Turbo编码--------------------------------
        TurboInterTable = load TurboInterTable.mat
        for k=1:5
            if TurboInterTable(k,1)>=SourceBitlen
               break;
            end
        end
        RefLen = TurboInterTable(k,1);
        F1 = TurboInterTable(k,2);
        F2 = TurboInterTable(k,3); 
        %Turbo编码-
        Turbo_out = TurboEncode(SourceBit,SourceBitlen,RefLen,F1,F2);
        
        %QPSK调制---------------------------------
        Turbo_out2 = QpskMod(Turbo_out);
        
        %高斯白噪声信道----------------------
        soft_in = Channel(Turbo_out2,SNR(nEN));
        %QPSK解调---------------------------
        soft_in1 = QpskDemod(soft_in);    


        %Turbo译码--LTE----------------
        [hard_out,soft_out] = TurboDecode(soft_in1,TurboIter,RefLen,F1,F2);
        %误码率-----------------------------
        errs = length(find(hard_out(1:SourceBitlen) ~= SourceBit));
        Err_counter = Err_counter + errs;
        Ber = Err_counter/nframe/SourceBitlen;
    end
    BerEbNo(nEN) = Ber;
    fprintf(‘EcNo:%1.3fdB,误码率:%9.5e,\n‘,SNR(nEN),Ber);
end
grid on;
semilogy(SNR,BerEbNo,‘b-v‘);
xlabel(‘Ec/No[dB]‘);
ylabel(‘Bit Error Rate‘);
title(‘Turbo性能仿真误码率曲线‘);



【详细资料,及相应MATLAB代码,咨询qq:1279682290】

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。