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?
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.
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?
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
send out zeros to one of the channels when in single output (quick)
tear down the device object and make a new one for one channel (not
quick)
tear down the streamer, and create a one channel one (not quick)
make two streamers, and feed them both TX data for MIMO, and just one
for SISO
-josh
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.