If we apply the Layer 1 code book to a sequence of data, we will get the constellation as follows. If you briefly see the constellation, you don't find any differences in terms of constellation except overall amplitude gets smaller after going through the precoding block. But if you following through the precoding process for each one (single) constellation, you will understandthe differences.

The Octave code is here. (I create this code in Octave which is a Matlab like GNU program,but I guess it will run in Matlab without any modification. I tried to write the code so that I can run on both program but I haven't tested it in Matlab myself).

In addition, I posted another type of tutorials that may help you with intuitive understandings on this kind of complex number operation. See [Matrix Complex] section in www.slide4math.com.

Note : If I expand the transformation shown above into two antenna case (diversity) to give you more concrete idea, it can be illustration as follows. Since all of the data used here are complex numbers (Real = I, Imaginary = Q), the result of operation may not be so intuitive to you. If you are really interested in understanding the result of transformation, try thistransformation with your own program or pen-paper calculation on your own. At least, play with the matlab code that I created and linked here.

To make the process and understanding simpler, let's assume that we are only focusing on two antenna case. If it is two antenna case, the block diagram around the Precoding looks as follows. (TM3 is using this configuration)

In case of Procoding with Large Delay CDD, two additional matrix are multiplied before it is multiplied by Procoding matrix as shown below. Please keep in mind the role of each matrix in the equation. (Refer to CDD page if you want to know further details of CDD concept itself)

Then a question would come up. Where is W(i) matrix defined ? One or a couple of specially selected matrix from the codebook are used. Which matrix (which index) of the codebook is used are defined in the 36.211 as shown below.

The only way to understand this concept to the skin would be to try this yourself and play with all these parameters like your toys. To help this, I created a small octave code and attached here. (I create this code in Octave which is a Matlab like GNU program,but I guess it will run in Matlab without any modification. I tried to write the code so that I can run on both program but I haven't tested it in Matlab myself).

I posted another type of tutorials that may help you with intuitive understandings on this kind of complex number operation. See [Matrix Complex] section in www.slide4math.com.

Note : If I expand the transformation shown above into a 2 x 2 case to give you more concrete idea, it can be illustration as follows. Since all of the data used here are complex numbers (Real = I, Imaginary = Q), the result of operation may not be so intuitive to you. If you are really interested in understanding the result of transformation, try this transformation with yourown program or pen-paper calculation on your own. At least, play with the matlab code that I created and linked here.

Following is the real Downlink signal coming out of a LTE network emulator. I capture the signal and analyzed it with a vector spectrum analyzer with LTE analysis functionality.

Now let try apply the CDD. I would recommend you to try investigate on what's is CDD in practical sense and what would be the advantage of applying CDD. Here I would only show you the result of the CDD application. The Octave code is here. (I create this code in Octavewhich is a Matlab like GNU program,but I guess it will run in Matlab without any modification. I tried to write the code so that I can run on both program but I haven't tested it in Matlab myself). I posted another type of tutorials that may help you with intuitive understandings on this kind of complex number operation. See [Matrix Complex] section in www.slide4math.com.

Precoding for Spatial Multiplexing - Precoding with the selected Codebook

Transmit 5 6 3 X 2

< Codebook selection for Precoding - 2 Antenna Ports >

Getting one step deeper into the procedure, you may have a question asking 'Which code book matrix (W(i)) do we have to use for each DL transmission ?'. I think following table (Table 6.3.4.2.3-1 from 36.211) and the comments would answer the question.

Even though we can use any of the items in this table, NW can specify which of the items will be used for each user(each connection) by defining codebookSubsetRestriction IE in .radioResourceConfigDedicated.physicalConfigDedicated.antennaInfo.

< Codebook selection for Precoding - 4 Antenna Ports >

Transmit 5 6 3 X 2 3

Following is from Table 6.3.4.2.3-2 of 36.211 (Table 6.3.4.2.3-2 Codebook for transmission on antenna ports {0,1,2,3}).

How to interpret this table ? I took me pretty long time to figure it out. You would not get the Precoding Matrix directly from this table. You need to go through a couple of intermediate steps before you get the matrix.

First, you have to use following equation to calculate Wn. (Here you see a special symbol called 'Hermitian'. If you are not familiar with this, refere to Hermitian Matrix page)

Let's take u0 case as an example. u0 is defined as follows according to Table 6.3.4.2.3-2 of 36.211.

By plugging this into the Wn expression, you would get the result as follows.

Once you get the Wn, getting W matrix for one, two, three, four antenna case is almost automatic. I think just following illustration would be self-explanatory (I hope -:)).

Following is Wn that I calculated for all the codebook index. (You can get the Octave code that I used here. I haven't tried with Matlab.. it is up to you checking it with Matlab). I will leave it up to you to figure out all the W matrix for one, two, three, four antenna on your own. You would never know what you don't knowuntil you try on your own.

Codebook Ind

Wn

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Codebook Index

Wn

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Transmit 5 6 3 x 2

In previous sections, you have seen so many different precoding matrix. Then you may have ask 'How eNB can inform of which matrix it used ?' or 'How a UE can figure out which precoding matrix is used ?'.

eNodeB can inform UE of which codebook index is used by setting the PrecodingInformation field in DCI format 2 or 2A.

Tutorials on complex transformation

As I mentioned above, if you just see the overall constellation, you don't find any differences in terms of constellation except overall amplitude gets smaller after going through the precoding block. But if you following through the precoding process for each one (single) constellation, you will understand the differences. Following sequences of plots shows you 'Precoding'result of each points with each precoding (transformation) vector. Colored spots represents the constellation (I/Q data) coming(I/Q data) out of Layer Mapping block and coming into Precoding block. Black spots represents the constellation coming out of the Precoding block. You would notice that each of the colored spots creates two black spots. Even for the plot with only one black spots, it is the superimposed result of two black spots. Each of the black spots gets transmitted by each of the antenna.

Transmit 5 6 3 X 2 1

The Octave code is here. (I create this code in Octave which is a Matlab like GNU program,but I guess it will run in Matlab without any modification. I tried to write the code so that I can run on both program but I haven't tested it in Matlab myself).

Transmit 5 6 3 X 2x 14

I posted another type of tutorials that may help you with intuitive understandings on this kind of complex number operation. See [Matrix Complex] section in www.slide4math.com.