LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

How to implement demodulation for 2RX (photo attached. multi channel, 2rx at same time) ?

Dear friends, and NI engineer,  

 

My question, how to implement demodulation for multiple receiving? 

In other words, for single device, multi channel, 2 rx working at the same time (2D receiving), the output of "niUSRP Fetch Rx data"  is just 2D complex array, without t0 and dt (picture 1).  But the input of "MT demodulate PSK " needs the t0 and dt.  

 

Notes:

1. For this 2D array, I assume 1st row means the received information of channel 0, and 2nd row means the received information of channel 1 (plz correct me if this is wrong).  But if I just give one of those 2 rows to "MT demodulate PSK ", the error will happen,  because there is no t0 and dt.  

2. In picture 2, the in built example "MT PSK Transceiver (One Shot)" (without USRP), it shows that the input of demodulation has t0,dt, data.  Same thing, to my other projects (with USRP), the output of  "niUSRP Fetch Rx data" was composite by t0,dt,data.  Well, here is just 1D case. But I do need to implement the 2D case (2 RX for channel 0,1, receiving at the same time)  

3. I am using USRP 2953 or 2943.   

 

Thank you so much for your time and help.  

picture 1picture 1picture 2picture 2

0 Kudos
Message 1 of 9
(4,711 Views)

Regarding your first image: I feel this is so obvious maybe I am missing something, but the NIUSRP Fetch Rx Data vi is polymorphic and you can select the version you want. Selecting 2D CDB will drop down other options. If you select the CDB Cluster or WDT, you can get to t0 or dt.

 

Alternatively, also, from the help: "The time between samples in the waveform (the sample period) equals 1 divided by the coerced I/Q rate. Determine the coerced I/Q rate by reading the IQ Rate property after you set it or by reading the coerced IQ rate output of the Configure Signal VI."

 

Additionally, there is a time stamp: 

timestamp is the time of the clock in seconds, interpreted as whole seconds.fractional seconds.

/images/reference/en-XX/help/373380G-01/iu64.gif

whole seconds is the integer number of seconds for the time associated with the first sample of the waveform, according to the onboard device timer.

/images/reference/en-XX/help/373380G-01/idbl.gif

fractional seconds is the double-precision, floating-point value representing the remaining fraction of a second for the time associated with the first sample of the waveform, according to the onboard device timer.

 

From this information, you can probably infer t0 and dt.

0 Kudos
Message 2 of 9
(4,664 Views)

Thanks for your reply. 

1.  Yes, I know fatch rx data vi is polymorphic, but I have to use 2D CDB this time. That's why I am asking where are t0 and dt go.

2.  my final target is using demodulation vi for 2D CDB.  To be honest, I am not sure this is do able or not, even I add the t0 and dt.  Have you ever done this before?  Thank you.  

0 Kudos
Message 3 of 9
(4,662 Views)

Hah, I was hoping the timestamp cluster would be good enough. Typically, I would think that to demodulate a signal you only need to know the frequency and not the phase as the phase can be deduced and tuned afterward (i.e. you can minimize the power in the signal * reference and then flip your reference 90 degrees to get the maximum signal). But alas, I know nothing about the hardware or software you are using.

0 Kudos
Message 4 of 9
(4,652 Views)

Dear majoris,  

1.  I am using usrp 2953 or 2943 under labview in window 10.  

2.  Yes, you do answered the t0 and dt.  I just verified as well.  Thank you for that.  The reason I am doing 2D,  is because I need to implement something full duplex (2rx 2tx working at the same time, in one USRP). Have you ever done this before ?  

In other words,  in the in-built example "niUSRP EX Full Duplex (Single Device, Multi Channel)" shows that you have to initialize 2Tx in CH0,1 together,  or 2Rx in CH0,1 together.   Do you think there is a way, I can do initialize  Tx1 in CH0 and Tx1 in CH1 together, then initialize RX2 in CH0 and RX2 in CH1 together?  I hope I expressed what I want clearly enough.  Thank you again, majoris.  

0 Kudos
Message 5 of 9
(4,648 Views)

If you look at niUSRP EX Tx Multiple Outputs (Single Device, Multi Channel).vi and niUSRP EX Rx Multiple Inputs (Single Device, Multi Channel).vi, each one initializes the channels the way you described. Have you tried combining the configurations from each VI into your full duplex VI?

 

Enabling and configuration the channels is done using the niUSRP Property node so combining the configurations from the 2 VIs would simply look like 4 niUSRP property nodes instead of 2. 

Shalini M.
Partner Development Engineer
Alliance Partner Network
National Instruments
0 Kudos
Message 6 of 9
(4,635 Views)

Dear  shalumdawg,  

 

Thanks for your help.  

1. In "niUSRP EX Tx Multiple Outputs (Single Device, Multi Channel)",  this is TX, not RX, there is no modulation with it as well.  My question is implement the modulation into it (for RX now, but I need to do Tx as well later).   Do I miss something?  

2.  In the in-built example "niUSRP EX Full Duplex (Single Device, Multi Channel)" shows that you have to initialize 2Tx in CH0,1 together,  or 2Rx in CH0,1 together.   Do you think there is a way, I can do initialize  Tx1 in CH0 and Tx1 in CH1 together, then initialize RX2 in CH0 and RX2 in CH1 together?  I hope I expressed what I want clearly enough.  Thank you again.  

0 Kudos
Message 7 of 9
(4,626 Views)

1. You can separate the 2D array and then for each channel build your own complex double cluster like majoris recommended by adding the t0 and dt. If you look inside one of the modulation toolkit demodulate vis that should give you an idea of how to create that cluster. 
You could also take a look at the MT QAM Mod-Demod example to see if that implementation would work for you using simply an array of double complex instead of building the cluster. 

 

2. My previous post explains how to initialize Tx1 in CH0 and Tx1 in CH1 together, then initialize RX2 in CH0 and RX2 in CH1 together. You simply need to change how the current niUSRP property nodes in the "niUSRP EX Full Duplex..." example are configured and add more property nodes to configure the other channels. Looking at the single device, multi channel RX/TX examples configurations should help guide you. 

Shalini M.
Partner Development Engineer
Alliance Partner Network
National Instruments
0 Kudos
Message 8 of 9
(4,617 Views)

Dear  shalumdawg,  

 

Thanks again for your help. But I made a big mistake on last post. Please check the 3rd point below.  

1. My final final target is run 2tx, 2rx at the same time in one usrp 2953/54. Base on the inbuilt example, you MUST do the 2D array style. In other words, it won't work if you separate them. In other words again, if you initialize (tx0 in CH0 and rx2 in CH0) together, then initialize (tx0 in CH1 and rx2 in CH1), this will NOT work. Because they are all 1D "style". You will have initialize error. I use to do this way, but I failed. that's why I am asking this "separate way" is truly wrong or just some programming mistake on my side.   shalumdawg, you verify this easily, E.g. you just open 2 rx and tx example (in ModulationToolkitExamples), then try to let then run at the same time.      

2. In 1D, the output already has d0, dt, hence, I can  use demodulation vi directly.  

3. the example, "niUSRP EX Tx Multiple Outputs (Single Device, Multi Channel)" "niUSRP EX Rx Multiple Inputs (Single Device, Multi Channel)", already shown how to initialize 2tx or 2rx together. But I do want to know how can I (or this is impossible) initialize tx1, rx2 in CH0 together, then initialize tx1,rx2 in CH1 together.   Sorry about my mistake in the last post.  

0 Kudos
Message 9 of 9
(4,605 Views)