LTE物理层概述(7)-- LTE之Turbo编码及其matlab仿真1
1、概述、
1.1 编码器
图1 Turbo编码器结构图
如图1所示,LTE使用 1/3码率 的 Turbo编码器作为信道编码方案的基础。内部采用两个3阶 RSC编码器并联,并由交织器一分为二。Turbo编码器输出为以下3个部分:
- 第一比特为系统比特;
- 卷积编码器1输出 —— 奇偶校验1比特流;
- 卷积编码器2输出 —— 奇偶校验2比特流;
卷积编码器均包含卷尾,因此 K bit 的比特流,Turbo编码器输出三个 (K+4)bit 的比特流,导致Turbo编码效率略低于 1/3.
1.2 交织
LTE交织器由正交多项式序列(QPP)构成,交织器转换输入比特。输出比特指数 p(i) 和输入指数 i 的关系可以由下面的正交多项式表示:
K 和 f1, f2的关系,详细可参考:
Turbo编码原理及基本概念https://blog.csdn.net/snowman898/article/details/123818131
1.3 译码器
Turbo译码器使用两个后验概率(APP)译码器和两个交织器构成反馈环。Turbo译码器的计算复杂度与迭代次数直接相关。译码基本原理可参照:
Turbo译码原理说明(一)https://blog.csdn.net/snowman898/article/details/124318295
2、Matlab仿真实现
2.1 编码Matlab实现
我们使用通信系统工具箱的系统对象 comm.TurboEncoder 进行编码,并设置网络结构和交织器属性符合LTE标准定义。
function y = lte_TurboEncoder(u, intrlvrIndices)persistent Turbo
if isempty(Turbo)Turbo = comm.TurboEncoder('TrellisStructure', poly2trellis(4, [13 15],13), ...'InterleaverIndicesSource', 'Input port');
endy = step(Turbo, u, intrlvrIndices);
2.2 译码Matlab实现
译码器实现时,函数同时调用交织指数(intrlvrIndices)以及 最大迭代次数(maxIter)两个参数作为输入。
function [y,flag,inters] = lte_TurboDecoder(u, intrlvrIndices, maxIter)
MAXITER = 6;
persistent Turbo
if isempty(Turbo)Turbo = comm.TurboDecoder('TrellisStructure', poly2trellis(4, [13 15],13), ...'InterleaverIndicesSource', 'Input port', 'MaximumIterations', MAXITER);
% 'InterleaverIndicesSource', 'Input port', 'NumIterations', maxIter);end[y,flag,inters] = step(Turbo, u, intrlvrIndices);
一般 LTE译码 5~7次较为合理,可以同时兼顾译码性能和计算复杂度。
其中 intrlvrIndices 详细代码如下:
function indices = lte_IntrlvrIndices(blkLen)
% codegen
[f1,f2] = getf1f2(blkLen);
Idx = (0:blkLen-1).';
indices = mod(f1*Idx + f2*Idx.^2, blkLen) + 1;
end
2.2 BER测量
Turbo译码的运算性能取决于迭代次数,对于一个给定的译码器,越高的迭代次数意味着越好的BER性能。代码如下所示:
function [ber, numBits] = chapter4_ex03_nIter(EbNo, maxNumErrs, maxNumBits, nIter)persistent AWGN
AWGN = comm.AWGNChannel;FRM = 2432;
R = FRM/(3*FRM+4*3);Indices = lte_IntrlvrIndices(FRM);% Modulation Mode
ModulationMode = 1; % 1--QPSK 2--QAM16 3-- QAM6
k = 2* ModulationMode;
snr = EbNo + 10*log10(k)+10*log10(R);AWGN.EbNo = snr;
% Compute noise variance
noiseVar = 10.^(-snr/10);% Processing loop: transmitter, channel model and receiver
numErrs = 0; numBits = 0;
nS = 0;while((numErrs < maxNumErrs) && (numBits < maxNumBits))% Transmitteru = randi([0,1], FRM, 1);t0 = lte_TurboEncoder(u,Indices);t1 = lte_Scrambler(t0, nS);t2 = lte_Modulator(t1, ModulationMode);% channelc0 = AWGN.step(t2);% Receiverr0 = lte_DemodulatorSoft(c0,ModulationMode, noiseVar);r1 = lte_DescramblerSoft(r0, nS); y = lte_TurboDecoder(-r1, Indices, nIter);% MeasurementsnumErrs =numErrs+ sum(y~=u);numBits = numBits + FRM;nS = nS + 2;nS = mod(nS, 20);
end% Compute BER
ber = numErrs/numBits;
如果我们将迭代次数分别设置为1、3和5次,如下图所示:
图2 Turbo随着迭代次数增加性能改变
2.3 Turbo译码早期终止机制
Turbo译码器的迭代次数 是 Turbo译码器主要特性之一。LTE标准提供了一个有效途径,通过引入早期终止机制解决这一问题。通过对 Turbo编码器添加crc校验,可以在迭代译码结束时检出是否存在错误比特。若CRC不存在错误比特,可提前终止译码。这一方案可以大幅降低Turbo译码器计算复杂度,且不会带来性能损失。
考虑CRC排列顺序
添加的CRC比特可以采用顺序或者逆序排列。UTRA采用CRC逆序排列,但在LTE研究中,逆序排列没有性能上的提高,却会增加系统处理的复杂度。因此,LTE采用顺序排列。
考虑CRC处理方式
当对较长的传输数据块进行分段时,一种选择是先对整个TB进行CRC处理,然后再进行分段处理,称为 TB CRC;另一是先进行分段处理,然后再对每个CB添加CRC校验处理,称为CB CRC。LTE选择的是两者结合,如下图所示:
图3-1 LTE CRC处理机制
图3-2 LTE CRC具体实现过程
由图3-2可知,先将TB添加24bit crc校验,当传输块大于6144bit(maxCBlkLen = 6144,含crc),先进行码块分段,再在每个CB上添加 24 bit CRC校验。此方法可以有效降低高速率传输时译码的平均迭代次数。应注意的是,LTE采用不同的CRC多项式分别生成 CB CRC和TB CRC。
function [y, flag, iters]=lte_TurboDecoder_crc(u, intrlvrIndices)
%#codegen
maxIter=6;
persistent TurboCrc
if isempty(TurboCrc)TurboCrc = commLTETurboDecoder('InterleaverIndicesSource', 'Input port', ...'MaximumIterations', maxIter);
end
[y, flag, iters] = step(TurboCrc, u, intrlvrIndices);
值得注意的是,commLTETurboDecoder这一函数原型只存在早期MATLAB版本中(R2015及以前),函数如下所示:
classdef commLTETurboDecoder < matlab.System %#ok<*EMCLS>
%commLTETurboDecoder Decode input using an early-terminating LTE turbo decoder.
% H = commLTETurboDecoder creates an LTE turbo decoder System object, H.
% This object uses the a-posteriori probability (APP) constituent decoder
% to iteratively decode the parallel-concatenated convolutionally encoded
% input data. It uses a CRC check for early decoder termination and
% outputs only the message bits (minus the checksum) corresponding to the
% code-block.
%
% H = commLTETurboDecoder(Name, Value) creates an LTE turbo decoder
% object, H, with the specified property Name set to the specified Value.
% You can specify additional name-value pair arguments in any order as
% (Name1, Value1, ... , NameN, ValueN).
%
% H = commLTETurboDecoder(INTERLVRINDICES, MAXITER) creates an LTE turbo
% decoder object, H, with the InterleaverIndices property set to
最终,我们给出包含早期终止机制的Turbo_crc译码:
function [ber, numBits]=chap4_ex04_crc(EbNo, maxNumErrs, maxNumBits)
%% Constants
clear functions;
FRM=2432-24; % Size of bit frame
Kplus=FRM+24;
Indices = lteIntrlvrIndices(Kplus);
ModulationMode=1;
k=2*ModulationMode;
CodingRate=Kplus/(3*Kplus+12);
snr = EbNo + 10*log10(k) + 10*log10(CodingRate);
noiseVar = 10.^(-snr/10);
%% Processsing loop modeling transmitter, channel model and receiver
numErrs = 0; numBits = 0; nS=0;
while ((numErrs < maxNumErrs) && (numBits < maxNumBits))% Transmitteru = randi([0 1], FRM,1); % Randomly generated input bitsdata= CbCRCGenerator(u); % Transport block CRC codet0 = TurboEncoder(data, Indices); % Turbo Encodert1 = Scrambler(t0, nS); % Scramblert2 = Modulator(t1, ModulationMode); % Modulator% Channelc0 = AWGNChannel(t2, snr); % AWGN channel% Receiverr0 = DemodulatorSoft(c0, ModulationMode, noiseVar); % Demodulatorr1 = DescramblerSoft(r0, nS); % Descrambler[y, ~, ~] = TurboDecoder_crc(-r1, Indices); % Turbo Deocder% MeasurementsnumErrs = numErrs + sum(y~=u); % Update number of bit errorsnumBits = numBits + FRM; % Update number of bits processed% Manage slot number with each subframe processednS = nS + 2; nS = mod(nS, 20);
end%% Clean up & collect results
ber = numErrs/numBits; % Compute Bit Error Rate (BER)
代码完整运行可自行下载:
LTETurbo编译码综合仿真-编解码文档类资源-CSDN下载1、Turbo设置最大迭代次数的编译码性能仿真,迭代次数分别设置为1/3/52、带早期终止机制的T更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/snowman898/85391832
LTE物理层概述(7)-- LTE之Turbo编码及其matlab仿真1相关推荐
- LTE物理层概述(6)-- LTE之调制与解调及其matlab仿真
LTE(长期演进)下行链路 PHY(物理)层处理链路可以认为是下行链路共享信道(DLSCH)和物理下行链路共享信道(PDSCH)处理的组合.DLSCH 即 下行链路传输信道 TrCH. LTE下行链路 ...
- LTE物理层概述(4)-- LTE时间帧及资源块
1.LTE时间帧描述 图1所示为LTE物理层帧结构,理解LTE传输过程取决于清晰理解数据的时 - 频分布 图1 LTE帧结构 由图1可以看出: LTE 每帧长10ms,分为10个子帧,每个子帧长1ms ...
- 基于空间通信超短QC- LDPC编码的matlab仿真实现
欢迎订阅<FPGA学习入门100例教程>.<MATLAB学习入门100例教程> 目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础
- LTE无线侧接口协议::::::之::::::LTE接口概述
LTE接口概述 1.LTE无线网络接口协议总览 1.1UE---EPC接口框图 1.2 UE---EPC间各接口名称.连接网元.接口功能以及协议列表 2.E-UTRAN和EPC的分工模块 2.1 E- ...
- 初识LTE(五):完整的SISO LTE 物理层实现
文章目录 初识LTE(五):完整的SISO LTE 物理层实现 零.代码地址 一.实现整体过程 1.参数初始化 commlteSISO_params commlteSISO_initialize pr ...
- LTE物理层过程--小区搜网、随机接入、功率控制、测量、数据传输
前言 终端和网络进行通讯需要进行哪些物理层的交互呢? 终端需要搜索到服务自己的网络,然后接入网络,这就涉及小区搜索过程和随机接入过程:在交互过程中,终端和网络都需将功率调节到合适的大小,以增强覆盖或抑 ...
- Turbo编码相关知识
这段时间里,看到的一些书籍和程序中,很多都用到LDPC码,卷积码和Turbo码,刚好又在学习Turbo码,故将资料中的关于Turbo码编码的知识点加以整理. Turbo编码进化自卷积码,在LTE ...
- 搜matlab代码的网站,LTE小区搜索matlab仿真
[实例简介] LTE小区搜索过程的matlab仿真,比较详细,内容不错 [实例截图] [核心代码] 35738649matlab └── matlab ├── Bc.m ├── CellSearch. ...
- turbo编码原理以及matlab实现
一.原理 Turbo的编码器由两个并行的分量编码器组成.分量编码器的选择一般是卷积码.在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱.两个编码器的输出共同作为冗余信息 ...
- td lte pss同步matlab仿真,一种LTE-A帧定时同步算法的AISC设计与实现
0 引言 当前LTE-Advanced系统架构趋于扁平化,以往的帧定时同步方案已不再适合LTE-Advanced系统,因此,需要寻找一种新的帧定时同步实现方案.本文将该算法分成3个步骤:粗定时同步和小 ...
最新文章
- android xUtils的使用
- 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(一):扩展方法概述
- 【研究】大脑如何在“知道”与“无知”之间做出决定
- 不用恐惧AI的高速发展,论击败阿法狗(零)最简单的方法
- 使用Redis分区将数据分割到多个Redis实例
- python操作excel表格-Python自动化办公之操作Excel文件
- Mysql主从复制(docker例子)
- Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softmax回归
- C#中DateTime的缺陷与代替品DateTimeOffset
- win7 'IIS APPPOOL\Classic .NET AppPool' 登录失败
- 比亚迪2021年上半年营收908.85亿元 同比增长50.22%
- Linux进程的管理与调度(五) -- Linux下0号进程的前世(init_task进程)今生(idle进程)
- LeetCode 309 Best Time to Buy and Sell Stock with Cooldown 解决方案
- 杰控连接mysql_工控自动化应用方案:杰控FameView组态软件在数据库连接和查询方面的应用...
- 图像处理之图像质量评价指标PSNR(峰值信噪比)
- 纬创软件本社对日JAVA开发
- (VC++2013)MFC自绘圆形按钮
- day13-面向对象进阶
- 无法安装 cloudera-manager-agent
- win10 安装mysql5.7 超详细(亲测成功)