LTE下行物理层传输机制(8)-DCI2A格式和下行双流的流量制约

在上一篇博文《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》中已经提到,如果当前UE的传输模式是TM4,且可以执行空分复用(一个PDSCH信道传输2个TB块),那么需要采用DCI2格式来承载控制信息域,使用的预编码矩阵需要参考UE反馈的PMI值,因此属于闭环性质的空分复用。相应的,LTE系统中也有一种开环的空分复用:如果当前UE的传输模式是TM3,且可以执行空分复用,那么此时PDCCH需要采用DCI2A格式发送,这时的空分复用就属于开环性质的空分复用,不需要参考UE反馈的PMI值。本文就具体介绍这个DCI2A格式。

1.组成DCI2A格式的bit内容

由于DCI2A格式用于TM3模式下的开环空分复用,而DCI2格式用于TM4模式下的闭环空分复用,因此DCI2A格式与DCI2格式包含的字段内容,除了与PMI反馈有关的“预编码信息”不同外,其他字段均是相同的。具体的,DCI2A包括以下字段:

资源分配头(Resource allocation header) – 本字段与DCI2格式相同,固定占1 bit。如果当前DCI2A使用资源分配方式0,则本bit位设置为0;若当前DCI2A使用资源分配方式1,则需要将本bit设置为1。与DCI2格式一样,如果当前的下行带宽小于或等于10个RB,也就是如果当前的下行带宽是1.4MHz的时候,DCI2A只使用资源分配方式0,此时DCI2A就没有这个1bit的“资源分配头”字段了

RB分配字段(Resource block assignment) - 本字段与DCI2格式相同,固定占ceil(N_DL_RB /P)bit。其中,N_DL_RB是下行带宽的RB个数,P是RBG_SIZE。具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》)。

PUCCH的TPC字段(TPC command for PUCCH) –本字段与DCI2格式相同, 固定占2 bits。具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》)。

下行分配DAI字段(Downlink Assignment Index) – 本字段与DCI2格式相同,固定占2 bits。具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》)。

HARQ进程号(HARQ process number) - 本字段与DCI2格式相同,如果是FDD制式,则固定占3 bits,如果是TDD制式,则固定占4 bits。具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》)。

TB块与码字的映射关系(Transport block to codeword swap flag) –  本字段与DCI2格式相同,固定占1 bit。具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》)。

对于TB1块,与DCI2格式相同,同样对应以下字段:

MCS字段(Modulation and coding scheme) – 固定占5 bits。表示TB块1的调制方式,结合RB个数可以查36213-7.1.7.2表获取TB size。

NDI指示字段(New data indicator) – 固定占1 bit。通过NDI是否反转,来判断TB块1在该HARQ进程中是新传还是重传。

冗余版本号RV(Redundancy version) – 固定占2 bits

对于TB2块,同样对应以下字段(与TB1字段相同):

MCS字段(Modulation and coding scheme) – 固定占5 bits。当前TB块2的调制方式,结合RB个数可以查36213-7.1.7.2表获取TB size。

NDI指示字段(New data indicator) – 固定占1 bit。通过NDI是否反转,来判断TB块2在该HARQ进程中是新传还是重传。

冗余版本号RV(Redundancy version) – 固定占2 bits

如果上述某个TB块,对应的MCS=0且RV=1,那么就表示该TB块无效。通过这种设定,就可以让PDSCH携带2个TB块还是1个TB块,继而明确“Transport block to codeword swap flag”字段的含义,是应该用上文中的Table 5.3.3.1.5-1还是用Table 5.3.3.1.5-2。

预编码信息字段(Precoding information) – 本字段与DCI2格式,用于向UE发送传输层数(layer)的值,占用的bit位个数与天线端口数有关,如Table 5.3.3.1.5A-1所示。


如果当前的天线端口数等于2,则本字段占用0bits,即此时DCI2A格式没有预编码信息字段(Precoding information)。之所以能这么处理,是因为如果是2天线端口,那么层数(layer)可以由当前有效的TB块个数给出,并不需要这个字段:如果是两个TB块都有效,那么传输层数layer=2,使用开环双流的预编码方案;如果只有1个TB块有效,则使用发射分集

TM4模式时UE会上报PMI和RI(秩指示)这两个参数,此时无论RI=1还是RI=2,都可以进行空分复用,只是选择的预编码矩阵会有所不同,具体参考《LTE下行物理层传输机制(7)-DCI2格式和预编码矩阵的选择》或下文的Table 6.3.4.2.3-1)。而在TM3模式下,虽然UE不再需要反馈PMI,但仍会向eNB发送RI参数,此时只有当RI=2(对应层数=2)的时候,TM3模式才可以进行空分复用

如果当前的天线端口数等于4,则本字段占用2bits,具体含义如下文的Table 5.3.3.1.5A-2所示,表中的值不同,对应着不同的层数(layer)值。需要留意的是,表中的“One codeword”这一列,即只有一个码字有效(一个TB块有效)的时候,index=1的时候虽然可以进行空分复用,但此时的空分复用是不能用于新传数据的:只有当上一次的TTI传输是层数layer=2的空分复用,发送了2个TB块,而本次TTI只需要重传其中的一个TB块,才可以选择这种“只有1个码字有效的空分复用”方式


关于天线端口更详细的内容,请参考《LTE下行物理层传输机制(1)-天线端口Antenna Port和小区特定参考信号CRS》。

2.开环双流的预编码矩阵

前文提到,TM3模式下,两天线端口的时候,只有RI=2的时候才能进行空分复用,如果UE上报的RI=1,不能进行空分复用,只能进行发射分集。既然空分复用的时候,DCI2A码流中没有预编码矩阵相关的字段,说明开环下预编码矩阵是固定的,不像TM4模式下有多种可能性。两发两收的eNB-UE系统示意图如下所示。


TM3模式和TM4模式下,两天线端口的空分复用可以选择的预编码矩阵如下表Table 6.3.4.2.3-1所示。从表中可以看到,TM3只有在2个码字的时候才存在预编码矩阵,且这个矩阵确实是唯一的。


如果是四天线端口,由于DCI2A中携带了层数layer的值,根据这个layer值就可以唯一的确定预编码矩阵,只是相对两天线端口而言过程稍微复杂点,但原理相同,这里不再展开。

3.下行双流的流量制约

这里所指的“双流“,是指空分复用时一个TTI内同时传输两个TB块(传输块),不区分到底是开环还是闭环,即包含了TM3和TM4两种场景。

下行双流的流量除了受到上下行子帧配置(LTE-TDD)、MCS调制方式、带宽大小、误码率等影响外,还受到UE category的制约。以20MHz下行带宽为例,如果将所有的100个RB全部分配给某个UE,并且这个UE的MCS设置为最大值28,那么不考虑UE能力限制的情况下,每个TB块可以携带75376 bits,一个TTI(2个TB块)就可以传输75376×2=150752 bits。


但实际上不同的UE-category,1个TB块所能传输的最大比特数(用tbs表示)是不同的,如下表Table 4.1-1所示。比如,如果当前UE的Category=3,那么下行每个TB块最多可以传输75376 bits,但一个TTI内(即2个TB块之和)最多只能传输102048 bits,而不是75376×2=150752 bits。所以,要想达到理想的下行最大吞吐量,R9版本的UE,Category至少要达到Category4。如果是Category1,甚至不能进行空分复用,即eNB不能给Category=1的UE同时传输2个TB块


每种系统配置下的下行双流流量,可以通过以下方法近似推出(不考虑系统信息等占用的资源):

(A)如果当前是LTE-FDD制式,UE Category=4,20M带宽、空分复用、无误码率、MCS=28,那么每10ms可以传输的bits = (0子帧+1子帧+...+9子帧)流量 = 75376 bit × 2 × 10 = 1507520 bits,换算成Mbps,则等于 (1507520 × 100)/(1000×1000)= 150.752 Mbps。

(B)如果当前是LTE-TDD制式,则稍微复杂点,因为TDD制式有个特殊子帧的概念,而在特殊子帧里,100个RB实际能承载的bit数目只等效于75个RB,而75个RB在MCS=28的时候,能传输的bit数目是55056 bit,要小于75376 bits。


若当前UE Category=4,20M带宽、空分复用、无误码率、MCS=28,上下行子帧配置等于2(该配置有2个特殊子帧、2个上行子帧和6个下行子帧),那么每10ms可以传输的bits = (0子帧+1子帧+...+9子帧)流量 = (75376 bit × 2 × 6 + 55056 bit × 2 × 2)= 1124736 bits,换算成Mbps,则等于 (1124736 × 100)/(1000×1000)= 112.4736 Mbps。我在有线环境下测试的时候,下行最大流量大概在100~110Mbps之间。

参考文献:

(1)3GPP TS 36.212 V9.4.0 (2011-09) Multiplexing and channel coding

(2)3GPP TS 36.213 V9.3.0 (2010-09) Physical layer procedures

(3)3GPP TS 36.211 V9.1.0 (2010-03) Physical Channels and Modulation 

(4)http://www.sharetechnote.com

(5)3GPP TS 36.306 V9.9.0 (2013-12) User Equipment (UE) radio access capabilities

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
好久没写android的博客,最近在做一个android的项目,里面用到我们经常用的一个控件就是对话框,大家都知道android自带的对话框是很丑的,android5.x之后除外.所以就出现了自定义view,自己定义美观的对话框.好我们就来自定义对话框. 整体思路:定义一个类然后去继承Dialog类,然后重写相应的构造器方法.大家都知道一般的对话框的创建过程都是来一个AlertDialog.Builder对象,然后使用一些set方法来设置标题内容以及设置一些自定义的view和点击的Button以及相应的点
1.android 的UI线程阻超过5秒就会引发ANR(Application not responding)异常,如果等待超过3秒,你就会失去用户。 2.在android中组件的启动线程被称为主线程(也称UI线程),一般不在这线程中进行耗时的工作,所以我们将线程分为两种,分别是main thread和worker thread,当应用程度运行是时,系统默认的启动线程就是主线程,主要用来加载UI,完成和用户间的交互,所有这些都在同一个线程中进行,所以不能在这个线程中进行耗时工作,不能阻塞UI,androi
接触过自定义控件的开发者一看,笑了,立马关了网页。但是…你真的知道怎么绘制居中文本吗? 我不会?开玩笑,不就是: X=控件宽度/2 - 文本宽度/2;Y=控件高度/2 + 文本宽度/2 好吧,那我试一下。 1.自定义控件基本步骤 自定义View的属性 在View的构造方法中获得我们自定义的属性 #重写onMesure # 重写onDraw OK,简单,直接干起来。 1. 自定义View的属性 按照最简单的来,属性有:文本,文本颜色,文本大小。 我们在 /value/attrs.xml 中这么写: ?xml
首先,自定义控件分为三类: 自定义的组合控件 继承View的自定义控件 继承ViewGroup的自定义控件 在这里,我要写的是第二种,也就是继承自View的自定义控件,第一种自定义的组合控件,我已经写过了,可以在我的博客中可以找到 现在来看一下继承View的自定义控件 首先,需要写一个类继承自View,那么,它也有三个构造方法,有一个参数的构造方法实在代码中new这个自定义控件时被调用;有两个参数的构造方法是在布局中使用这个自定义控件的时候调用,有三个参数的构造方法,实在使用到这个自定义控件的样式时被调用

WindowManager的分析 - 2016-07-22 18:07:46

一、Window和WindowManager Window:表示一个窗口,从下面Window的源码中可以看出它有且只有一个实现类PhoneWindow。 The only existing implementation of this abstract class is * android.policy.PhoneWindow, which you should instantiate when needing a * Window. WindowManager:它是系统提供我们操作Window的一个接口

MTK6580-Psensor hal层驱动分析 - 2016-07-22 18:07:25

一、HAL 层Sensor 流程         Hal 就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。 Sensor 打开设备时序图:  其中SensorDevice 属于 JNI 层,与 HAL 进行通信的接口 ; 在 JNI 层调用了 HAL 层的 open_sensors() 方法
ART世界探险(2) - 从java byte code说起 Dalvik时代,如果不做JIT的话,只需要了解java字节码和Dalivk的字节码就够了。但是,到了ART时代,我们可能还要至少学习两种新东西:一个是编译后端的IR中间代码。比如,我们假如使用LLVM做为编译后端的话,需要做从dex到LLVM IR的转换工作。这个IR可能还不只一层,比如分中层的MIR和底层的LIR。 最后,我们还得了解机器指令。仅就ARM来说,现在是64位时代了,我们需要了解的就是AArch64和AArch32两种状态下的A

使用AndFix实现Android热修复 - 2016-07-22 18:07:19

AndFix Github: https://github.com/alibaba/AndFix AndFix介绍 AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。  就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。  AndFix 的补丁文件是以 .apatch 结

[置顶] VR学习 - 2016-07-22 18:07:15

VR学习 由于到去的公司从事VR这方面的开发,为了不打无准备之战,因此学习了一下Google的CardBoard VR实现。(仅仅是表皮,只是看Demo但是还是值得花点功夫看看) 效果图 这里的实现效果其实是,使用到了手机的传感器,陀螺仪(具体的往后面看) 学习Demo(再往深研究) 首先我们先看一下Demo中清单文件的权限和Activity的要求。 //请求网络权限 uses-permission android:name = "android.permission.INTERNET" / //手机NF

语音识别 - 2016-07-22 18:07:58

我使用 Speech Recognizer Intent 来获取 User Input ,然后再翻译成文本。但是我想让intent 连续的获取 user input 然后翻译成文本,来看用户是否说了某个词。现在的代码能实现,但是每次程序开始侦听输入时,电话就会发出短期的警笛声,准备输入。 有什么方法来删除已经播放过的又一次播放的声音? 代码: import java.util.ArrayList;import android.app.Activity;import android.content.Inte