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.
The encoder block has the following structure, exemplary shown in figure 1:
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.
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 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.
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.