After discussing the proposed MIMO-OFDM receiver structure (see post of last week) with my mentors this week, we decided to do some major changes in the structure of the receiver to meet some general requirements.
These requirements are:
- Use stream tags instead of trigger signals wherever it is possible.
- Keep the receiver structure transparent and easy understandable.
- Write as little as possible new signal processing blocks, which don’t have a general purpose but are specially written for the MIMO-OFDM receiver.
- Rather introduce a new signal processing block instead of losing functionality/performance or engineering ugly workarounds.
As you may have noticed, the last two requirements contradict themselves and there there have to be compromises.
I tried to fulfill theses demands as good as possible in the new design of the receiver structure which is shown in figure 1.
Some comments on this structure:
- The Schmidl & Cox synchronization is still used with the sum of the received signals.
- The trigger is replaced immediately afterwards in the MIMO-OFDM sync block with stream tags. This block also corrects the fine frequency offset which is estimated in the S&C block. Further, the block estimates the integer frequency offset out of the sum signal. This has the advantage that the sum signal can be dumped right here (after only FFTing the first 2 sync symbols instead of applying the FFT on the whole frame).
- The coarse frequency correction is implemented in a separate block. This is done to achieve more transparency.
- The MIMO-OFDM channel estimator has the same functionality as discussed last week, but it also dumps all sub-carriers which are not occupied. It can therefore be connected directly to the MIMO decoder.
- The MIMO decoder is one of the MIMO decoder algorithms. It must be generalized to a vector basis, each element of the vector representing one occupied sub-carrier (with different CSI!).
- We discarded the header/payload demux structure with 2 processing chains and a message loopback from the header reader to the demuxer as it is used in the SISO-OFDM receiver. We decided so, because the channel estimation and the equalization (which is part of the MIMO decoding) must be located before a demuxer. This would only leave the constellation demodulator and the header parser on the ‘header’ chain which is not enough to justify a separated chain and an asynchronous callback of the message port. So we rather decided to go with a linear and synchronous structure. The MIMO-OFDM header reader consumes the whole stream, demodulates and parses the header (marked by a tag), dumps the header and passes the payload with the appropriate length which it parsed out of the header.
- The payload demodulation and decoding is equal to the SISO-OFDM receiver.
I am currently implementing the new receiver structure. After I finished all the required C++ blocks, I want to test the whole receiver; first in simulation and finally over the air.