Hello Pavan,

I think we both are starting to understand the setup and the problem. Here
are the two hardware solutions:

Connect a shared 1PPS signal to *both* the master USRP of your MIMO cabled
pair and to the receiver (For example using an octoclock:
https://www.ettus.com/product/details/OctoClock-G)

OR

Connect GPS referenced 1PPS signals to both the master USRP of your MIMO
cabled pair and the receiver (For example using two of the GPSDO kits:
https://www.ettus.com/product/details/GPSDO-KIT)


There are many ways of implementing a protocol level time synchronization
in software/DSP. The paper I linked to talks about one way, there are
certainly others. I do not know of any example projects implementing them
though so you would have to develop your own.

Regards,
Derek

On Thu, Apr 21, 2016 at 8:04 AM, Pavan Yedavalli <psy2...@columbia.edu>
wrote:

> Hi Derek,
>
> I'll answer your questions in-line, because I think what you are saying is
> beginning to make me understand what I need:
>
>
> On Wed, Apr 20, 2016 at 9:03 PM, Derek Kozel <derek.ko...@ettus.com>
> wrote:
>
>> Hello Pavan,
>>
>> Are you trying to create a shared timebase between the two USRPs without
>> having a shared 1PPS or GPS reference? You are still not using enough
>> detail for us to understand fully.
>>
>
> To clarify, my setup is two USRPs connected via MIMO cable, and then
> another USRP acting as a receiver. So are you asking whether I'm trying to
> create a shared timebase between the two-USRP *unit* (because they are
> MIMO cabled) and the receiving USRP without having a shared 1 PPS or GPS
> reference? I think my answer to that must be yes, because I have not done
> anything else but connect them to the computer via ethernet and just have
> two of them connected via MIMO cable and the other one by itself. I'm
> assuming I need to have a shared reference between the transmit USRPs and
> the receive USRP, so how would I be able to do that? This could certainly
> be one of my problems.
>
>>
>> In Figure 5 both USRPs are connected with a MIMO cable and so have both
>> shared frequency and time bases. What is your weight block doing to the
>> sample stream? Is it a time delay block? I don't know what gnuradio would
>> do if you specified 10*sample_rate as the delay there as that's likely to
>> be a very large number of samples.
>>
>
> My weight block is applying a normalized magnitude phase correction to
> each antenna's transmitted signal, so, yes, it is essentially creating a
> time delay. Each weight is a complex value with magnitude 1 and a
> calculated phase. You are saying this could be a problem if it's
> calculating a value that is too high?
>
>>
>> If you have both USRPs connected with a time synchronization (shared
>> 1PPS, GPSDO, or MIMO cable) and have your flowgraph configured correctly,
>> then you can just use timed commands to the USRP_alpha to start
>> transmitting at time X and USRP_beta to start receiving at time X and you
>> will see your signal. You can then move to using burst mode using tags to
>> define the number of samples to send/receive along with timed commands to
>> send/receive bursts of samples. This works because the clocks in both USRPs
>> will be aligned to each other.
>>
>
> I feel like there are two steps here. First, I need to get the
> transmitting USRPs (which are conneced via MIMO cable) to time sync to each
> other (which I believe I have done through using USRP sink in GRC and
> setting the second channels time and clock to MIMO cable?), and second, I
> need to get the receive USRP to receive at the same time. So, just as
> above, I need to get my receive USRP to be on the same time as my transmit
> USRPs? Once I'm able to do that, then I can do burst mode to transmit and
> receive timed signals, as you are mentioning?
>
>>
>> If you do *NOT* have a shared time source for each radio, for instance
>> they are far apart and do not have GPS references, then you need to do some
>> sort of protocol level alignment to create a shared understanding of time
>> between them. A frequently used method is for USRP_alpha to transmit a
>> beacon with a known period (say once every 10 seconds). All other USRPs
>> then receive for longer than 10 seconds to be guaranteed to receive the
>> beacon (assuming they're within range of the transmission). When the
>> receiving USRPs detect the incoming beacon they align their local time to
>> the master (Beacon transmitting) USRP.
>>
>
> I guess a similar question to the above: can I have a shared time source
> between the transmit USRPs (which are already MIMO cabled to each other)
> and the receive USRP? It seems like that would be easier to do than going
> through this protocol level alignment, but maybe it's not possible given my
> setup.
>
>>
>> Here's a quick paper talking about this topic. The technique is widely
>> used.
>> http://www.ece.uah.edu/~milenka/docs/dc_ssst05_synch.pdf
>>
>>
>> I hope this helps and is applicable to your need. If you have more
>> questions please try drawing your desired system and maybe include a
>> timeline of events that you expect the radios to do. Attaching your
>> existing flowgraphs, either as photos using GRC's screen capture feature
>> (file>screen capture) or the actual GRC file, also helps us understand what
>> exactly you are working with.
>>
>
> I had to take down the setup because I am moving labs, but I will send
> some flowgraphs and the diagram of the system next week. Thank you again
> for being so patient and trying to help me. I think I'm just a bit lost on
> a few of the simple things, but once those are figured out, then I think it
> should be smoother sailing.
>
>>
>> Derek
>>
>> On Wed, Apr 20, 2016 at 4:05 PM, Pavan Yedavalli <psy2...@columbia.edu>
>> wrote:
>>
>>> Hi Martin,
>>>
>>> I guess I have a few questions:
>>>
>>> 1.) Are there any examples in the gnuradio codebase/flowgraph repository
>>> that show how to do synchronized feedback between two USRPs? In other
>>> words, I send a signal from a transmit USRP, and then I receive that signal
>>> at the receive USRP, and then I send back something else from the receive
>>> USRP back to the transmit USRP, and this would be a sequential process in
>>> which they are aligned and know when to transmit and/or receive? I saw a
>>> post
>>> <http://stackoverflow.com/questions/28710869/how-to-set-usrp-transmitting-time-and-receiving-time-in-gnu-radio>
>>>  that
>>> I think would be relevant, but I'm not sure how to apply it.
>>>
>>> I believe this should be a pretty standard scenario in which you want to
>>> have two USRPs communicate with each other synchronously. I guess I'm just
>>> having trouble finding an example of how to do this.
>>>
>>> 2.) Related to the above question, maybe there are no examples to do
>>> feedback in one flowgraph, so what I have been doing is the following in my
>>> flowgraphs:
>>>
>>> Flowgraph A:
>>>
>>> The synchronized MIMO flowgraph (Figure 5) from this
>>> <https://www.ettus.com/content/files/kb/mimo_and_sync_with_usrp.pdf>,
>>> so essentially I have two USRPs synchronized and transmitting out two
>>> signals that should be offset but frequency aligned. In my own flowgraph's
>>> main(), instead of applying a "phase shift" block, I am applying my own
>>> "weights" block to both transmissions.
>>>
>>> So, I am now sending a signal that has those weights applied to it. So,
>>> after I do tb.start(), then I sleep for 10 seconds (by doing sleep(10))
>>> hoping that in the 10 seconds my receiver will catch the signal that I'm
>>> transmitting and put it into file.
>>>
>>> Flowgraph B:
>>>
>>> My own receiver.py in which I have a USRP sink->FFT->Complex to
>>> Mag->File sink. I also have a connection from FFT->QT GUI to see a plot of
>>> what is being captured.
>>>
>>> I now run Flowgraph A in one terminal and Flowgraph B in another
>>> terminal. I need to capture A's transmission with the first weights within
>>> the 10 seconds (as it's sleeping) into the file sink. Then, A will send a
>>> signal with another set of weights applied, and I will need to capture that
>>> in the next 10 seconds, and so on. My problem is that I'm often capturing
>>> noise because my receive was not aligned with when I was transmitting my
>>> desired signal. So, I end up only capturing noise after the transmission
>>> stops as opposed to the actual signal when the transmission is happening.
>>>
>>> Essentially, I am trying to mimic feedback by doing the above, but I
>>> don't know how to align my transmitter and receiver, especially because
>>> they are two different blocks. Is there a way to make both the transmission
>>> and reception one block so that I can do sleep(rx_time +
>>> n_samples_since_tag/sampling_rate) (I think this could be right?) as
>>> opposed to my static sleep(10) and pray for the best?
>>>
>>> Would it be helpful at all if I showed you my code? I still feel like
>>> I'm not being clear. Sorry about that. If there were any examples, then I
>>> think that would be the best for me to look at.
>>>
>>> Thanks for any help again.
>>>
>>>
>>> --
>>> Pavan
>>>
>>> _______________________________________________
>>> Discuss-gnuradio mailing list
>>> Discuss-gnuradio@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>
>>>
>>
>
>
> --
> Pavan
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to