Beyond repetition coding

We have used repetition coding to achieve the diversity gain, where the error rate decays with SNRL. However, the diversity gain is achieved by repeating the same symbol in L time slots, reducing the effective data rate by L. Can we achieve the diversity gain without decreasing the data rate?

We are indeed able to achieve the diversity gain while keeping the data rate. We will show how to achieve it using a rotation code in the case of L=2.

Rotation code

To put things into perspective, we have studied two cases at the opposite ends of the spectrum:

  • maximum diversity gain with reduced data rate, by sending completely correlated symbols (i.e., the same symbol over L time slots)
y=hx+w,=1,,L.
  • no diversity gain with normal data rate, by sending completely uncorrelated symbols
y=hx+w,=1,,L.

In the first case, the diversity gain is achieved through the perfect correlation between symbols, so that we can recover the symbol even if deep fading is experienced in some, but not all, time slots. So a natural idea is to send different symbols in different time slots, but introduce some correlation among them. In this way, we may be able to achieve the diversity gain with the same data rate.

One way to introduce correlation is to use a rotation code, illustrated below for the case of L=2:

Illustration of a rotation code

In binary phase shift keying (BPSK), the four possible tuples of symbols (x1,x2) are the four vertices of an upright square, namely (a,a),(a,a),(a,a),(a,a). In the rotation code, we rotate the square and use the four vertices of the rotated square. This introduces some correlation: if x1 is positive and has a large value, then xD is more likely than xA, indicating that x2 is more likely to be a.

Next, we analyze the performance of rotation coding.

Performance of rotation coding

Again, due to symmetry, we can focus on the case where xA was sent but was mistaken for other symbols by the detector. Then we can bound the error probability by the union bound

peP(xAxB)+P(xAxC)+P(xAxD),

where P(xAxB) is the pairwise error probability of choosing xB when xA was sent and when xA and xB are the only two symbols. By using the union bound, we can reuse the result on the error probability of binary detection, namely

P(error|h)=Q(uAuB2N0/2).

Now we need to determine uA and uB in the rotation code.

The rotation can be expressed by the multiplication with the rotation matrix. Specifically, if we rotate the square counterclock wise by θ, the rotation matrix is defined as

R=[cosθsinθsinθcosθ],

and the four symbols are

xA=R[aa],xB=R[aa],xB=R[aa],xC=R[aa].

Focusing on xA and xB, the exact expressions of them are

xA=[acosθasinθasinθ+acosθ]andxB=[acosθasinθasinθ+acosθ]

Therefore, we have

uA=[h1xA1h2xA2]anduB=[h1xB1h2xB2]

Then the pairwise error probability is

P(xAxB|h1,h2)=Q(uAuB2N0/2)=Q(2SNR[|h1|2(cosθ)2+|h2|2(sinθ)2]).

Taking into account the distribution of the channel gains h1 and h2, the average error probability satisfies

P(xAxB)=Eh1,h2[Q(2SNR[|h1|2(cosθ)2+|h2|2(sinθ)2])](11+SNR(cosθ)2)(11+SNR(sinθ)2).

Now we can see that the error probability is bounded by SNR2, as long as cosθ0 and sinθ0.

Therefore, the rotation code achieves an error decay of SNR2 while transmitting two different symbols in two time slots!