Week 09 – Hierarchical MIMO Encoder Block

I successfully finished the MIMO channel estimator this week. The corresponding qa test is also finished and running. I therefore completed all elements which are required to build up the hierarchical python blocks of the MIMO encoder and decoder.

Encoder Block

The encoder block has the following structure, exemplary shown in figure 1:

Figure 1: Example of the hierarchical MIMO encoder block with M=2 Alamouti encoding.

The first block is one of the implemented MIMO encoding algorithms; here as an example the Alamouti encoder. After the encoding process, the MIMO training sequences have to be appended as a pilot to each of the M streams. This can be done by the existing block gr::blocks::tagged_stream_mux which multiplexes the 2 incoming streams by concatenating the training sequence as a pilot to the data stream. The concatenation is controlled by stream tags which signal the length of the symbols. The MIMO training sequences differ for each output stream but are constant for each OFDM symbol over time. The training sequences can therefore be produced by a gr::blocks::vector_source_cc block, respectively.

OFDM Transmitter

After finishing the MIMO encoder block, I want to integrate it into the existing OFDM transmitter. To decide where to integrate the MIMO capability into the OFDM system, I had a closer look at the OFDM transmitter. The hierarchical python block ofdm_tx has the following simplified structure:

Figure 2: Simplified structure of the ofdm_tx block.

Figure 2 only shows the part of the encoder which is interesting for us. The actual input of the ofdm_tx block is a pure data stream which is chopped into a packet based transmission with the usage of tagged_stream blocks. A header is added to the packets and the data is modulated separately for header and payload. After that, the header and payload data are multiplexed together. This is the point where the flowgraph of figure 2 begins. The OFDM carrier allocator assigns the complex symbols to OFDM carrier and adds pilot symbols for synchronization purposes. The IFFT operation corresponds to the OFDM modulation. The modulated data is finally transmitted over the air after anĀ  insertion of the cyclic prefix.

So where do we segregate this flowgraph by the insertion of our MIMO encoder, producing M output streams instead of one? To answer this question, we have to take a look at the planned structure of the receiver and especially the order of the synchronization and decoding steps:

  • Receive N signals.
  • Estimation of frame, time and frequency offset with a combination of the N branches; afterwards synchronization of each branch.
  • MIMO decoding.
  • OFDM demodulation.
  • Demodulation.

This succession order gives information about the order of the different pilot symbols: The decoder needs the OFDM sync symbols before the MIMO training sequences. This determines the location of the MIMO encoder at the slot before the OFDM carrier allocator so that the sync symbols are appended temporally after (and therefore locally ahead of) the MIMO training symbols. The branch from the OFDM carrier allocator to the hardware sink is then copied M times after the MIMO encoder.


Next week I want to finish the hierarchical encoder block and validate its functionality by qa tests. Before I start to implement the decoder block, I want to check if the MISO-OFDM transceiver still gets synchronized. After this step, I can move on to approach the MIMO-OFDM transceiver scheme.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s