Quantcast

How to implement MIMO transmissions

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to implement MIMO transmissions

Lara Deek
Hello,

I have a question about the details of transmitting using gnuradio. I
have set up a 2x2 MIMO transmitter using 2 USRP2's (or N200's) that
are connected via a MIMO cable. In C++, I initialize a single USRP
sink, and set the # channels to 2 (excluding the other settings).

I am currently using the uhd send() function to transmit data, and my
first question is: Does issuing a single send() function transmit
samples on both USRP2's simultaneously, to achieve MIMO spatial
diversity?

I also want to send different samples on each USRP2, to achieve MIMO
spatial multiplexing. Since the buffer that is passed to the send()
function is a vector, does specifying a vector of size 2, with each
vector holding different data, do the trick? In that case, to achieve
MIMO diversity, the 2 vectors would have to carry the same data,
correct?

Thanks,
Lara

_______________________________________________
Discuss-gnuradio mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to implement MIMO transmissions

Josh Blum-3


On 02/11/2013 02:51 PM, Lara Deek wrote:

> Hello,
>
> I have a question about the details of transmitting using gnuradio. I
> have set up a 2x2 MIMO transmitter using 2 USRP2's (or N200's) that
> are connected via a MIMO cable. In C++, I initialize a single USRP
> sink, and set the # channels to 2 (excluding the other settings).
>
> I am currently using the uhd send() function to transmit data, and my
> first question is: Does issuing a single send() function transmit
> samples on both USRP2's simultaneously, to achieve MIMO spatial
> diversity?
>
> I also want to send different samples on each USRP2, to achieve MIMO
> spatial multiplexing. Since the buffer that is passed to the send()
> function is a vector, does specifying a vector of size 2, with each
> vector holding different data, do the trick? In that case, to achieve
> MIMO diversity, the 2 vectors would have to carry the same data,
> correct?
>

Well in gnuradio, you dont have access to the send function. The
scheduler will deliver two streams of equal length (from 2 ports).

Inside of gr-uhd, internally the send() routine takes as an argument a
vector of points, in this case of size 2. If you are curious about the
UHD API usage, there is an example/rx_multi_samples.cpp in uhd. Its RX,
but the usage of the streamer and 2 channels is very similar.

-josh

> Thanks,
> Lara
>
> _______________________________________________
> Discuss-gnuradio mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>

_______________________________________________
Discuss-gnuradio mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to implement MIMO transmissions

Lara Deek
Thank you Josh for your reply!

> Well in gnuradio, you dont have access to the send function.

I created a usrp sink using uhd_make_usrp_sink(), and using the pointer to the multi_usrp that is returned from calling get_device() on the usrp sink variable, I access send() (ofcourse including the necessary uhd libraries). In fact, the method I use to access the send() function is the same as that used in the gr_uhd_usrp_sink.cc work() and start() functions.

> The
> scheduler will deliver two streams of equal length (from 2 ports).

I use the uhd send() function to transmit data, as shown in rx_multi_samples.cpp for the receiver, and I actually referred to tx_bursts.cpp to implement the transmitter. Then I guess to control the data [source] in the streams, I would have to transmit samples from a .dat file (as done in tx_samples_from_file.cpp) using an ifstream, correct? Can I avoid the gnuradio usrp_sink scheduler by doing this?

I also want to control when to use MIMO vs SISO, sometimes I only want to use a single antenna/transmitter. I can't find a method to specify which usrp/channel to use in send(). Is there a way to transmit on a single antenna/channel in a MIMO setting? There's set_antenna() in gr-uhd (set_tx_antenna() in UHD multi_usrp.hpp), can it be used to implement this?

Thanks again,
Lara
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to implement MIMO transmissions

Josh Blum-3


On 02/12/2013 01:38 PM, Lara Deek wrote:

> Thank you Josh for your reply!
>
>> Well in gnuradio, you dont have access to the send function.
>
> I created a usrp sink using uhd_make_usrp_sink(), and using the pointer to
> the multi_usrp that is returned from calling get_device() on the usrp sink
> variable, I access send() (ofcourse including the necessary uhd libraries).
> In fact, the method I use to access the send() function is the same as that
> used in the gr_uhd_usrp_sink.cc work() and start() functions.
>
>> The
>> scheduler will deliver two streams of equal length (from 2 ports).
>
> I use the uhd send() function to transmit data, as shown in
> rx_multi_samples.cpp for the receiver, and I actually referred to
> tx_bursts.cpp to implement the transmitter. Then I guess to control the data
> [source] in the streams, I would have to transmit samples from a .dat file
> (as done in tx_samples_from_file.cpp) using an ifstream, correct? Can I
> avoid the gnuradio usrp_sink scheduler by doing this?

Of course, you can use the same API (UHD) that the gr-uhd component. So,
you dont really need to make a usrp sink block, but, this method works
too :-)

>
> I also want to control when to use MIMO vs SISO, sometimes I only want to
> use a single antenna/transmitter. I can't find a method to specify which
> usrp/channel to use in send(). Is there a way to transmit on a single
> antenna/channel in a MIMO setting? There's set_antenna() in gr-uhd
> (set_tx_antenna() in UHD multi_usrp.hpp), can it be used to implement this?
>

It depends how quick you need to be able to reconfigure. You could

1) send out zeros to one of the channels when in single output (quick)
2) tear down the device object and make a new one for one channel (not
quick)
3) tear down the streamer, and create a one channel one (not quick)
4) make two streamers, and feed them both TX data for MIMO, and just one
for SISO

-josh


> Thanks again,
> Lara
>
>
>
> --
> View this message in context: http://gnuradio.4.n7.nabble.com/How-to-implement-MIMO-transmissions-tp39546p39574.html
> Sent from the GnuRadio mailing list archive at Nabble.com.
>
> _______________________________________________
> Discuss-gnuradio mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>

_______________________________________________
Discuss-gnuradio mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Loading...