A method to implement space-time block coding on an FPGA

A few months ago, I wrote a blog post on the Alamouti space-time block code (STBC). It explained the concept of diversity and went through the mathematical equations involved with the encoding and decoding of the Alamouti STBC. In this post, I present one way of implementing the Alamouti STBC in an FPGA. In fact, this is the same method used in Nutaq’s OFDM reference design. The goal of this post is to provide the reader with the necessary tools required to extrapolate his or her own Alamouti STBC implementation or to implement a different STBC.

Let’s recall the Alamouti STBC:

In Nutaq’s OFDM reference design, x1 and x2 are complex numbers (or QAM-64 symbols) to be transmitted via a subcarrier after OFDM modulation. Due to the orthogonality of the subcarriers within an OFDM symbol, it is possible to treat each subcarrier independently. So, x1 and x2 represent, in our case, all the QAM-64 symbols of an OFDM symbol. Within the FPGA, the space-time encoding is performed as follows:

At the arrival of the first complex number, the RAM is in write mode from address 0. When we reach address 95 (or when we have 96 QAM-64 symbols, since only 48 out of 64 subcarriers are loaded with data in the reference design), we are ready to start the space-time coding. The RAM block switches to playback mode and reads the entire memory content. During this stage of reading, the ‘b’ portions of both multipliers on the right are set to 1. Afterwards, the RAM block is always in read mode, but we do a reading from address 48 and the ‘b’ portions of ‘Mult1’ and ‘Mult2’ are set to -1 and 1, respectively. This generates the OFDM symbol -x2*. When we reach address 95, we return to address 0. The ‘b’ portions of ‘Mult1’ and ‘Mult2’ are set to 1 and -1, respectively, to generate the OFDM symbol x1* by reading the RAM from addresses 0 to 47.

The following figure shows the data stream at the output of this coding:

 At the output of this block, we doubled the number of OFDM symbols. The indexes are incremented from 0 to 47 since, as I said earlier, only 48 of the 64 subcarriers are used to transmit information. It is important to note that the OFDM symbols for each antenna are interleaved with this method. The OFDM symbol #1 belongs to antenna #1, #2 belongs to the second antenna, #3 to the first antenna, and #4 to the second antenna. Deinterleaving needs to be performed prior to transmission.

With only minor modifications, you can use this method to implement other STBCs.

Example 1:

Example 2:

Both of these example STBCs would be easy to implement in Nutaq’s OFDM reference design.

LinkedIn Twitter YouTube Vimeo