# (GSoC) MIMO system

**URL:** <https://www.ruby-forum.com/t/gsoc-mimo-system/239367>\
**Category:** GNU Radio\
**Created:** [February 23, 2014, 5:35pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367 "2014-02-23T17:35:16Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Detlef\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Detlef\_R](https://www.ruby-forum.com/u/Detlef_R)\
**Post date:** [February 23, 2014, 5:35pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/1 "2014-02-23T17:35:16Z")

</div>

Hello everyone,

I’m a graduate student from China. I major in Computer Science and my  
research focus on wireless networks. Today, I’m glad to share some of my  
ideas on MIMO with you. (maybe a little pleonastic)

Definitely, MIMO is not a new terminology since it has been studied for  
many years. But it was not until 2009 that MIMO really come to us. Now,  
it  
is much closer. MIMO is widely deployed in both cellular networks and  
WLANs, with multiple antennas it can increase the performance of  
wireless  
systems significantly. The good news is, with the help of GNU Radio and  
USRPs, we can also enjoy the benefits brought by MIMO. Now, I’m on a  
project to build a simple MIMO system.

Basically, this system works a bit like a micro MIMO WLAN. The AP in  
this  
WLAN has two antennas and all of the Clients have only one antenna.  
Apparently, such a system should support both uplink and downlink  
transmission.

Uplink: Clients can transmit frames to the AP. With two antennas, the AP  
will receive two copies of the same symbols transmitted by the Client.  
The  
only difference is that these symbols traverse different channels and  
experience different degrees of channel attenuation. With the  
CSI(Channel  
State Information) which can be acquired by the preamble, the AP  
leverages  
some decoding techniques to combine the signals received by the two  
antennas and decode the corresponding symbols. When there is only one  
Client transmit to the AP, decoding can be done by MRC(Maximal-ratio  
combining) algorithm. Multiply the symbols received by the antennas with  
the conjugate complex of channel attenuation value h respectively, the  
total SNR in this transmission can be increased. If there are two  
clients  
transmit to the AP simultaneously, decoding can be done by ZF or  
ZF-SIC(zero-forcing Successive Interference Cancellation) algorithm.  
Multiply the symbols received by the antennas with the orthogonal vector  
of  
the channel attenuation vector H, the contribution of corresponding  
Client  
can be eliminated. Thus, the symbols transmitted by the two clients can  
be  
separated and decoded. (ZF-SIC is _difficult_ to implement due to the  
synchronization issues between different Clients).

Downlink: AP can also transmit to the Clients. The biggest advantage is  
that the AP can transmit to up to two different Clients simultaneously  
with  
two antennas. MIMO node can utilize Beamforming techniques to pre-code  
the  
symbols transmitted by the two antennas. If the AP transmit to only one  
Client, it just need to adjust the signal transmit on the two antennas  
according to the channel attenuation h. Thus the total power received by  
the Client is increased. The AP can also transmit to two Clients  
concurrently, as long as the two Client’s channel attenuation  
coefficient  
is linearly independent. Through transmitting linearly combination of  
symbols to different receivers on separate antennas simultaneously, the  
Clients can decode the symbols for them as if other signals do not  
exist.  
the total capacity is thus increased.

So, here is my basic proposal (which might be added to the “Signal  
Processing” section of GR GSoC website?)

_MIMO system_

MIMO is a great technology which utilizes multiple antennas at both  
transmitter and receiver to improve communication performance. It is  
more  
and more prevalent now. But MIMO is not a standard application in GNU  
Radio  
yet. Creating an OOT module (gr-mimo) that implements some of the basic  
encoding and decoding algorithms would be great for the research  
beginners  
and engineers.

_Objectives_

1. Build a MIMO system with one AP and several Clients, the AP has two  
antennas and all of the Clients has one antenna only.

2. On the uplink, implement the MRC decoding algorithm at the AP. The  
Clients transmit to the AP randomly based on standard OFDM PHY.

3. On the downlink, implement the Beamforming encoding algorithm at the  
AP.  
Upon receiving the frame from the Clients, the AP encodes the frames to  
two(one) of the clients and transmits the frames to them(it)  
simultaneously. Also based on OFDM PHY.

Notes: the channel state information (CSI) used in encoding and decoding  
algorithms can be acquired by OFDM preambles (Sync words).

_Requirements_

Decent understanding of OFDM and MIMO. Algorithms would be coded in both  
C++ and Python.

_Potential mentor(s)_

* * *

PS: I work on this project for both study and research purpose, before  
it I  
have gone through many relative papers and tutorials on how to build a  
MIMO  
system in GNU Radio. So I feel that implementing a MIMO system in GNU  
Radio  
is feasible. Nevertheless, I have to treat it cautiously since it is  
really  
complicated to make it work. Now, I have already built an elementary  
MIMO  
node with two USRPs (figure of the AP is attached to the end of the  
Email)  
and I’m working on a new module (gr-mimo) based on tx\_ofdm.grc and  
rx\_ofdm.grc to implement uplink transmission. The next step is to debug  
and  
test the uplink transmission. Since there is no gr-mimo standard module  
in  
GNU Radio, I guess this project might be useful to GNU Radio beginners.  
If  
it has the honor of being involved in Google Summer of Code(GSoC) 2014,  
that would be fantastic. Anyway, I am eager to get some insights from  
you. 🙂

Thanks,

Zhou YiZiRui

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 24, 2014, 6:37am UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/2 "2014-02-24T06:37:36Z")

</div>

On 02/24/2014 12:33 AM, YiZiRui Z. wrote:

> Hello everyone,
> 
> Im a graduate student from China. I major in Computer Science and my  
> research focus on wireless networks. Today, Im glad to share some of my  
> ideas on MIMO with you. (maybe a little pleonastic)

Nice to see a Chinese face here 🙂

> transmission. Since there is no gr-mimo standard module in GNU Radio, I  
> guess this project might be useful to GNU Radio beginners. If it has the  
> honor of being involved in Google Summer of Code(GSoC) 2014, that would  
> be fantastic. Anyway, I am eager to get some insights from you. 🙂

Since you have done a lot of research, you should feel _confident_ it is  
feasible. I was involved in a MIMO project when I was doing my bachelor  
thesis about two years ago, and we implemented a 2x2 MU-MIMO system with  
CSI feedback and transmit precoding on USRP and GNU Radio. However, it  
only implements downlink transmission and lacks of OFDM (so just narrow  
band). Nevertheless it proved the feasibility. Unfortunately we hadn’t  
furthered that research since then. It’s really glad to see you want to  
explore it tightly with upstream. I attach the link to my thesis report  
(it is in Chinese) below, and hopefully you will find something helpful.

[1]  
[http://cloud.alick.me/public.php?service=files&t=0a67a7f2d09a1b4385dc85018d487918](http://cloud.alick.me/public.php?service=files&t=0a67a7f2d09a1b4385dc85018d487918)

## Regards,

Alick  
Fedora release 20 (Heisenbug) user

> **[User:Alick - Fedora Project Wiki](https://fedoraproject.org/wiki/User:Alick)**

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 24, 2014, 4:24pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/3 "2014-02-24T16:24:29Z")

</div>

On Mon, Feb 24, 2014 at 12:36 AM, Alick Z. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> > transmission. Since there is no gr-mimo standard module in GNU Radio, I  
> > band). Nevertheless it proved the feasibility. Unfortunately we hadn’t  
> > Fedora release 20 (Heisenbug) user  
> > [User:Alick - Fedora Project Wiki](https://fedoraproject.org/wiki/User:Alick)

Yes, and Matt E. and I proved that we could to 2x2 MIMO OFDM with  
GNU Radio on USRPs a number of years ago (there was not reason to  
think that we couldn’t; just had to be done). Our code, though, was a  
complete mess and fragile at the time. It’s even more obsolete now  
that we’ve replaced the OFDM layer. Which is why it’s time to get this  
done properly in GNU Radio.

Tom

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 24, 2014, 4:52pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/4 "2014-02-24T16:52:46Z")

</div>

On Mon, Feb 24, 2014 at 1:36 PM, Alick Z. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > transmission. Since there is no gr-mimo standard module in GNU Radio, I  
> > band). Nevertheless it proved the feasibility. Unfortunately we hadn’t  
> > Alick  
> > Fedora release 20 (Heisenbug) user  
> > [User:Alick - Fedora Project Wiki](https://fedoraproject.org/wiki/User:Alick)
> 
> * * *
> 
> Discuss-gnuradio mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

Hi Zhao,

It is very nice to receive your reply, seems I’m not alone here.  
Your thesis is written with clarity and meaning, which is certainly  
helpful  
me. Besides, you know, it really feels enjoyable to read some relevant  
materials in Chinese. 🙂  
Maybe we will have more discussion in the future.

Thank you,  
Zhou

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 24, 2014, 5:09pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/5 "2014-02-24T17:09:16Z")

</div>

On Mon, Feb 24, 2014 at 11:22 PM, Tom R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Nice to see a Chinese face here 🙂
> > 
> > > transmission. The next step is to debug and test the uplink  
> > > only implements downlink transmission and lacks of OFDM (so just narrow  
> > > –  
> > > done properly in GNU Radio.
> 
> Tom
> 
> * * *
> 
> Discuss-gnuradio mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

Hi Tom,

As far as I am concerned, plenty of work has done on MIMO. While both of  
the software(GNU Radio) and the hardware(USRP) are developing fast, many  
of  
the source codes are not compatible. So, maybe I have to do this work  
from  
the beginning, while former works are still instructive.  
Do you think I should add this idea to the GR GSoC website?

Thanks,  
Zhou

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 25, 2014, 6:58pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/6 "2014-02-25T18:58:44Z")

</div>

Hi Alick,  
Do you have an english copy of your thesis? I am looking to  
read up on MIMO implementation and try a few basic things on gnuradio.

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 27, 2014, 3:53am UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/7 "2014-02-27T03:53:52Z")

</div>

On 02/26/2014 01:57 AM, Karan T. wrote:

> Hi Alick,  
> Do you have an english copy of your thesis? I am looking to  
> read up on MIMO implementation and try a few basic things on gnuradio.

Sorry, but I do not. I suggest you read the application notes  
“Synchronization and MIMO Capability with USRP Devices” as a starter  
if you are using USRP with GNU Radio.

–  
Alick  
Fedora release 20 (Heisenbug) user

> **[User:Alick - Fedora Project Wiki](https://fedoraproject.org/wiki/User:Alick)**

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [March 3, 2014, 6:02am UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/8 "2014-03-03T06:02:35Z")

</div>

Karan T. wrote in post #1138019:

> Hi Alick,  
> Do you have an english copy of your thesis? I am looking to  
> read up on MIMO implementation and try a few basic things on gnuradio.

Hi Karan,  
Did you get Alick’s thesis in english?. If so, could you please  
mail me to [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid). Thanks in advance.

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [February 24, 2014, 7:05pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/9 "2014-02-24T19:05:13Z")

</div>

On 02/24/2014 05:08 PM, YiZiRui Z. wrote:

> Hi Tom,
> 
> As far as I am concerned, plenty of work has done on MIMO. While both of  
> the software(GNU Radio) and the hardware(USRP) are developing fast, many  
> of the source codes are not compatible. So, maybe I have to do this work  
> from the beginning, while former works are still instructive.  
> Do you think I should add this idea to the GR GSoC website?

Sure, go ahead!

M

---

<div class="post-metadata">

**Author:** ![YiZiRui\_Z](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@YiZiRui\_Z](https://www.ruby-forum.com/u/YiZiRui_Z)\
**Post date:** [March 4, 2014, 5:34pm UTC](https://www.ruby-forum.com/t/gsoc-mimo-system/239367/10 "2014-03-04T17:34:29Z")

</div>

Just out of curiosity … do you still have your MIMO code around for us  
to look at? It might be a complete mess and fragile, but it also might  
be instructive in some ways. If not, that’s OK too; just thought it  
worth asking. Thanks! - MLD
