MSCBSC 移动通信论坛
搜索
登录注册
网络优化工程师招聘专栏 4G/LTE通信工程师最新职位列表 通信实习生/应届生招聘职位

  • 阅读:2655
  • 回复:0
基于CRC早期停止判断的Turbo译码算法
destild
新手上路
鎵嬫満鍙风爜宸查獙璇


 发短消息    关注Ta 

积分 -747
帖子 60
威望 13021 个
礼品券 0 个
专家指数 -1047
注册 2017-1-19
专业方向 
回答问题数 0
回答被采纳数 0
回答采纳率 0%
 
发表于 2018-12-04 15:01:57  只看楼主 

原文 Understanding LTE with MATLAB  ,作者Houman Zarrinkoub,本文是对于该书的翻译,书中的专业性词汇给出了英文原文,图和表的排版都是参考原文,翻译不准确的地方请读者多多包涵。本文仅限于个人学习,研究,交流,不得用于其他商业用途!



4.5 早期终止机制

在turbo译码器中执行的迭代次数是其主要特征之一。在实现高效的Turbo解码器时,我们面临一个明确的折衷。一方面,turbo译码器的精度和性能直接关系到其迭代次数。迭代越多,结果就越准确。另一方面,turbo译码器的计算复杂度与其迭代次数也成正比。


LTE规范允许通过设计早期终止来解决这种折衷的有效方法。该机制与Turbo编码器相结合。通过在turbo编码器的输入端附加CRC校验综合症,我们可以在Turbo解码器的迭代结束时检测任何比特错误的存在与否。我们现在可以选择在CRC检查表明没有检测到错误时提前停止解码,而不是按照固定的解码迭代次数来完成。这个非常简单的解决方案能够显著降低Turbo解码器的计算复杂度,而不会严重影响其性能。


4.5.1 MATLAB例子

下面的MATLAB函数(TurboDecoder_crc)显示了LTE Turbo解码器的实现,它检查输入帧末尾的CRC位,以便在执行最大迭代次数之前选择性地终止解码操作。正如我们所看到的,在这个函数中,我们使用LTETurboDecoder System对象而不是comm.TurboDecoder System对象。

 1function [yflagiters]=TurboDecoder_crc(u, intrlvrIndices)
2%#codegen
3maxIter=6;
4persistent TurboCrc
5if isempty(TurboCrc)
6    TurboCrc = commLTETurboDecoder('InterleaverIndicesSource',  'Input port', ...
7        'MaximumIterations', maxIter
);
8end
9[yflagiters] = step(TurboCrc, u,  intrlvrIndices);
10


在LTETurboDecoder中,常规的Turbo译码器也有相同的操作。然而,在每次解码迭代结束时,检查对应于CRC比特的输出的最后24个样本以进行错误检测。如果没有检测到错误,我们分支出循环并终止Turbo解码操作。在这种情况下,尽管尚未执行最大迭代次数,但是可能出现提前终止。如果检测到CRC位中的错误,则继续操作并输入下一个解码迭代,直到在迭代中没有检测到更多的错误或达到允许的最大迭代次数。


下面的MATLAB函数(CbCRCGenerator)在执行turbo编码之前将24位CRC特征值添加到传输块的末尾。

1function  y = CbCRCGenerator(u)
2%#codegen
3persistent hTBCRCGen
4if isempty(hTBCRCGen)
5    hTBCRCGen = comm.CRCGenerator('Polynomial',[1 1 zeros(116) 1 1 0 0 0 1 1]);
6end
7Transport block CRC generation
8y = step(hTBCRCGen, u);
9

下面的MATLAB函数(CbCRCDetector)在执行turbo解码之后将24位CRC综合征提取到传输块的末尾。

1function  y = CbCRCDetector(u)
2%#codegen
3persistent hTBCRC
4if isempty(hTBCRC)
5    hTBCRC = comm.CRCDetector('Polynomial',  [1 1 zeros(116) 1 1 0 0 0 1 1]);
6end
7Transport block CRC generation
8y = step(hTBCRC, u);
9


4.5.2误码率测试

为了检验早期终止算法的有效性,我们现在比较两种基于CRC的早期终止和不基于CRC的turbo解码的实现。下面的函数(chap4_ex04)执行CRC生成、turbo编码、加扰和调制以及它们的逆操作的组合,而不实现提前终止机制。

 1function [bernumBits]=chap4_ex04(EbNo, maxNumErrs, maxNumBits)
2%% Constants
3clear functions;
4maxIter=6;       % actual number of turbo decoder iterations
5FRM=2432-24; % Size of bit frame
6Kplus=FRM+24;
7Indices = lteIntrlvrIndices(Kplus);
8ModulationMode=1;
9k=2*ModulationMode;
10CodingRate=Kplus/(3*Kplus+12);
11snr = EbNo + 10*log10(k) + 10*log10(CodingRate);
12noiseVar = 10.^(-snr/10);
13%% Processsing loop modeling transmitter, channel model and receiver
14numErrs = 0; numBits = 0; nS=0;
15while ((numErrs < maxNumErrs) && (numBits < maxNumBits))
16    % Transmitter
17    u  =  randi([0 1], FRM,1);                                                          % Randomly generated input bits
18    data= CbCRCGenerator(u);                                                       % Code block CRC generator
19    t0 = TurboEncoder(data, Indices);                                            % Turbo Encoder
20    t1 = Scrambler(t0, nS);                                                              % Scrambler
21    t2 = Modulator(t1, ModulationMode);                                     % Modulator
22    % Channel
23    c0 = AWGNChannel(t2, snr);                                                    % AWGN channel
24    % Receiver
25    r0 = DemodulatorSoft(c0, ModulationMode, noiseVar);          % Demodulator
26    r1 = DescramblerSoft(r0, nS);                                                   % Descrambler
27    r2  = TurboDecoder(-r1, Indices,maxIter);                                % Turbo Deocder
28    y   =  CbCRCDetector(r2);                                                          % Code block CRC dtector
29    % Measurements
30    numErrs     = numErrs + sum(y~=u);                                          % Update number of bit errors
31    numBits     = numBits + FRM;                                                    % Update number of bits processed
32    % Manage slot number with each subframe processed
33    nS = nS + 2; nS = mod(nS, 20);
34end
35%% Clean up & collect results
36ber = numErrs/
numBits;                                                                % Compute Bit Error Rate (BER
)
37

下面的函数(chap4_ex04_crc)在实现提前终止机制的同时执行相同的收发器。在算法部署提前终止的情况下,我们记录每个子帧中的实际迭代次数,然后计算直方图。

 1function [bernumBits]=chap4_ex04_crc(EbNo, maxNumErrs, maxNumBits)
2%% Constants
3clear functions;
4FRM=2432-24; % Size of bit frame
5Kplus=FRM+24;
6Indices = lteIntrlvrIndices(Kplus);
7ModulationMode=1;
8k=2*ModulationMode;
9CodingRate=Kplus/(3*Kplus+12);
10snr = EbNo + 10*log10(k) + 10*log10(CodingRate);
11noiseVar = 10.^(-snr/10);
12%% Processsing loop modeling transmitter, channel model and receiver
13numErrs = 0; numBits = 0; nS=0;
14while ((numErrs < maxNumErrs) && (numBits < maxNumBits))
15    % Transmitter
16    u  =  randi([0 1], FRM,1);                                                          % Randomly generated input bits
17    data= CbCRCGenerator(u);                                                       % Transport block CRC code
18    t0 = TurboEncoder(data, Indices);                                            % Turbo Encoder
19    t1 = Scrambler(t0, nS);                                                              % Scrambler
20    t2 = Modulator(t1, ModulationMode);                                     % Modulator
21    % Channel
22    c0 = AWGNChannel(t2, snr);                                                    % AWGN channel
23    % Receiver
24    r0 = DemodulatorSoft(c0, ModulationMode, noiseVar);          % Demodulator
25    r1 = DescramblerSoft(r0, nS);                              % Descrambler
26    [y, ~, ~]  = TurboDecoder_crc(-r1, Indices);                        % Turbo Deocder
27    % Measurements
28    numErrs     = numErrs + sum(y~=u);                                         % Update number of bit errors
29    numBits     = numBits + FRM;                                                   % Update number of bits processed
30    % Manage slot number with each subframe processed
31    nS = nS + 2; nS = mod(nS, 20);
32end
33%% Clean up & collect results
34ber = numErrs/
numBits;                                                              % Compute Bit Error Rate (BER
)
35

图4.6中的BER结果表明我们得到类似的误码率性能与早期终止的SNR值范围(微量红色)而提前终止(微量蓝色)。

4.5.3 时间测量

在本实验中,我们比较了没有基于CRC的早期停止机制(chap4_ex04.m)而采用turbo解码的收发机与采用基于CRC的早期停止机制(chap4_ex04_crc.m)的收发机的执行时间。实验通过调用以下Matlab测试平台进行。

1EbNo=1; maxNumErrs=1e7; maxNumBits=1e7
2tic; [a,b]=chap4_ex04(EbNo,maxNumErrs, maxNumBits); toc; 
3tic; [a,b]=chap4_ex04_crc(EbNo,maxNumErrs, maxNumBits); toc;



该脚本的第一行强制两个收发器函数对于给定的Eb/N0值1dB,每次调用处理1000万比特。第二行使用MATLAB函数tic和toc来获得没有提前终止的算法的运行时间。第三行记录了具有提前终止的算法的经过时间。

图4.7 提前终止Turbo译码典型的执行时间节省


在MATLAB命令行中打印的结果如图4.7所示。与没有提前终止(146秒)相比,提前终止(89秒)处理相同数量的输入帧花费的时间要少得多。




未完待续

2018/12/3


点击关注了解更多精彩内容!!




扫码关注5G通信官方公众号,免费领取以下5G精品资料
  • 1、回复“ZGDX”免费领取《中国电信5G NTN技术白皮书
  • 2、回复“TXSB”免费领取《通信设备安装工程施工工艺图解
  • 3、回复“YDSL”免费领取《中国移动算力并网白皮书
  • 4、回复“5GX3”免费领取《 R16 23501-g60 5G的系统架构1
  • 5、回复“iot6”免费领取《【8月30号登载】物联网创新技术与产业应用蓝皮书——物联网感知技术及系统应用
  • 6、回复“6G31”免费领取《基于云网融合的6G关键技术白皮书
  • 7、回复“IM6G”免费领取《6G典型场景和关键能力白皮书
  • 8、回复“SPN2”免费领取《中国移动SPN2.0技术白皮书
  • 对本帖内容的看法? 我要点评

     
    [充值威望,立即自动到帐] [VIP贵宾权限+威望套餐] 另有大量优惠赠送活动,请光临充值中心
    充值拥有大量的威望和最高的下载权限,下载站内资料无忧

    快速回复主题    
    标题
    内容
     上传资料请点左侧【添加附件】

    当前时区 GMT+8, 现在时间是 2024-04-20 06:53:58
    渝ICP备11001752号  Copyright @ 2006-2016 mscbsc.com  本站统一服务邮箱:mscbsc@163.com

    Processed in 0.310603 second(s), 13 queries , Gzip enabled
    TOP
    清除 Cookies - 联系我们 - 移动通信网 - 移动通信论坛 - 通信招聘网 - Archiver