LTE - TTI Bundling
The purpose of this tutorial is to show you how to configure and trigger TTI bundling and verify it. TTI Bundling is a kind of retransmission mechansim being used for regular LTE Uplink (not for IoT). Why retransmission ? Main purpose is to increase the reliability of PUSCH reception by eNB. This mechanism is especially helpful for the case where radio link quality is poor. Why repetition only for Uplink ? I guess it would be because of the available transmission power. In downlink, eNB use (can use) much higher power whereas UE TX power is only up to 23 dBm. So in the condition where radio link quality is very poor, there is possibility that PUSCH reception would easily fails whereas PDSCH reception is still successful. The mechanism can be illustrated as below.
Image Source : Sharetechnote
Table of Contents
- LTE - TTI Bundling
Test Setup
Test setup for this tutorial is as shown below.
Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
- tti_bundling : In this link, you would get the descriptions for all the items listed below
- snr_threshold
- phr_threshold
- hysteresis
- mcs_max
- l_crb_max
- e_harq_pattern
Test 1 : TTI Bundling - SNR / PHR Threshold
In this test, I will show you how to configure TTI bundling and how it is triggered by SNR/PHR values.
Configuration
In this tutorial, I used enb-ttiBundling.cfg which is copied and modified from enb.default.cfg.
For core network, we don't need any specific configuration. So the default configuration(mme-ims.cfg and ims.default.cfg) are used as it is.
Following is the configuration in enb-ttiBundling.cfg . Configure tti_bundling parameter with snr_threshold and phr_threshold. Set these threshold according to the radio link condition in your setup. There are vaious other types of threshold and parameters you can set. Refer to the document for the details.
This configuration is not mandatory, but I extended the timer so that eNB does not release the RRC before starting test.
Perform the Test
Check the physical configuration of the cell and see if it is configured as intended.
Power on UE and confirm that UE is attached.
Do continuous ping to get continuous UL traffic to check UL radio link threshold for TTI Bundling.
Tweak rx_gain to until UL SNR and PHR hits the triggering criteria of the tti bundling.
Log Analysis
In this section, you will see how to confirm if UE registration is complete from trace log. You can use the same method to find any issues (e.g, registration failure) for troubleshooting. When UE registration fails, you may use this tutorial to figure out the point of the failure and troubleshoot
NOTE : This section is just to check quickly some important points in the log, but it may be a little bit tricky to do the detailed log analysis (especially for lower layer log analysis). In that case, I strongly recommend you to use WebGUI for the log analysis. You may refer to WebGUI Tutorial
Before you try the test, I strongly suggest you to check on UE capability for your UE and confirm that it support the TTI Bundling that you want to try. You should see 'TTI bundling' is specified in featureGroupIndicators.
Check overall UL Radio Link Profile and check if there is any span where it hits the tti bundling criteria you specified.
Filter PUSCH only for easy analysis.
In PUSCH log print, you can easily check whether they are regular PUSCH or TTI Bundled PUSCH by checking tti_bundling_rep field in the log print.
RRC / NAS Signaling
RrcConnectionReconfiguration
: This is the RrcConnectionReconfigurationmessage sent by eNB to enable TTI bundling. (
{
message c1: rrcConnectionReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions c1: rrcConnectionReconfiguration-r8: {
...
radioResourceConfigDedicated {
mac-MainConfig explicitValue: {
ul-SCH-Config {
maxHARQ-Tx n5,
periodicBSR-Timer sf20,
retxBSR-Timer sf320,
ttiBundling TRUE
},
drx-Config release: NULL,
timeAlignmentTimerDedicated infinity,
phr-Config setup: {
...
}
},
physicalConfigDedicated {
...
}
},