Multichannel (simultaneous) RX using LimeSDR

#1

Hi All,

I am currently using a stack of HackRF Ones in our lab to do simultaneously. These are not very wonderful.

When I saw that the LMS7002M RFSOC had 2 transceivers with 3 RX per transceiver, I was excited that it may meet my development requirements. However I can not seem to find any documentation or applications that demonstrate successful multi-channel receive on this device.

My requirements are for a four channel RX, so this would be using both radio chips at two RX per radio. Before we get into any of the technical concerns as to how we manage this data post-LMS7002 I really need to know: Has anyone ever configured one of the radio chips to successfully do multi-channel RX using both transceivers? If so, I’ll be buying LimeSDR’s tomorrow for our development.

If there is some place in the documentation where this is obviously stated, please point me in that direction as I couldn’t find anything that was really obvious when it came to configuration. From looking at the diagrams and the information in the data sheet I can’t see anything obvious that says it can’t be done.

Thanks all for your input.
Will

#2

I use both channels of one chip at the same time for transmit and receive. I can’t say if it is simultaneous or interleaved or whatever, but it come in A_Rx_L at one frequency and leaves A_Tx_L at another frequency while I have B_Rx_L receiving a signal and converting it on B_Tx_L. Pushing the chip to the limits on bandwidth, sample rate, signal gain, etc. I am not looking at the data at all though, so no USB.

#3

I have the same problem. I tried Osmocom Source/ Sink with GNU Radio but was not able to receive 2 RX channels.
I also asked if there is an application Application for using the 2 RX channels simultaneously but got no answer.

#4

Will,

Not being able to help you with switching 2 TX channels to RX (as this is what you want if I get it right), just wished to ask if you saw a new Lime board with two LMS chips. Don’t remember its name, saw it somewhere on their pages. Don’t know how much it would cost though :). But at least technically it should be able to give 4xTX…

I just started to use 2 RX channels in parallel in our custom Windows app, so far looks pretty decent.

Vladimir

#5

Yup, I did that, at first with custom C++ application in burst-based mode, and later again in GNU Radio Companion in continuous mode. I was transmitting BPSK signals with different main lobe width on two frequencies (utilizing two TX channels) and then receiving these signals with two RX channels. I was not actually decoding these BPSK signals (since that was not a purpose of my tests), but since the received signals spectrum looks quite well I would say it should work :slight_smile: Here is the example output:


1 Like
#6

I hadn’t seen the new board with two LMS chips yet, which would be good. That would give me four channels once I get an external reference clock on the chips.

Since you got the two channel RX working, how are you finding the timing of the RX samples? Can you get samples from each RX at the same time or within a sample or two? Sampling timing is important for my work.

Cheers
Will

#7

Yes, I tested this by switching both rx inputs to one generator output through T-type RF-connector. For my purpose it was sufficient, but I don’t remember exactly which maximum difference in terms of sample count I saw. I remember that it depended on sampling frequency and/or oversampling factor. If I remember correctly, at rates of 20 and 40 MHz it was exact sample-to-sample correspondence between two channels, but when I did rx at 10 MHz (meaning that I used x16 oversampling), I saw several samples phase offset. Though I dont remember how many. I think visually it was no more than 4-5 samples, may be 2-3, but not certain about this now. I just remember that it looked a bit surprising to me, but didn’t go deeper to find out what it was related with.

Vladimir

1 Like
#8

Actually such board is available on LimeNET campaign page (look for LimeSDR QPCIe). It is quite expensive though.

I have discovered MIMO channels alignment bug, which has been recently fixed by Josh Blum. However, this fix was applied only in SoapyLMS7 plugin, so if you are using e.g. LimeSuite to control your board, you can still suffer from this and observe misalignment as big as few thousands of samples…

1 Like
#9

In that comment on github, he states that it occurs if overflow has happened, if I get it right. But I don’t remember to read about overflows in your initial report (though may be I didn’t read it with much attention). Can this unsync happen with no overflows? It’s interesting to me because I’m using LimeSuite and probably will have to deal with that kind of failures myself. Though didn’t encounter it yet…

#10

Indeed, no “usual” overflows were reported, but I believe Josh meant overflows in internal fifo queues storing samples from both channels. Actually, he explained it little more in this post. What I’ve understood it means, that despite it is fixed in SoapyLMS plugin, it may still happen when you are using C driver API in direct way.

1 Like
#11

Thank you for this reference, it’s the nuance we must be aware of, as it isn’t fixed in C API. (Though I think it’s not essentially that kind of unalignment that will_mysky meant originally, but still.)

#12

Hi,
That problem should not happen with no overflows. Basically, as long as you read same amount of samples from each FIFO and no overflows occur, timestamp should be same for both channels so you don’t need to check both timestamps.
Use timestamp from each FIFO If you need to use channels independently or realign channels after lag spike. If FIFOs are constantly overflowing increase FIFO size or reduce sampling rate so your application can process data stream fast enough.

#13

Good news, thank you!

#14

Hi all,

I’m in the process of trying to RX from the “A” and B" receivers using GNURadio Companion and the associated stack of API. I have single channel RX working just fine. My osmocom source block uses the “soapy=0,driver=lime,nchan=2” as discussed in another thread (https://discourse.myriadrf.org/t/two-rx-channels-in-gnu-radio/1234/5) but I am getting the error

RuntimeError: resolve_port: hierarchical block ‘source_impl’: output 1 is not connected internally

every time I attempt to run the code. I can’t see where I’m going wrong here. LimeUtils can locate and connect to the device without issue, and if I run single channel source (and remove the “nchan=2”) everything works fine.

Thanks everyone for your help
Cheers
Will

#15

My advise is to use USRP Source/Sink instead of Osmocom Source/Sink, as you won’t be able to use LimeSDR in MIMO mode with Osmocom blocks anyway.

#16

Hi all,

I also looking for to receive simultaneously two RX frequencies. But according my investigation, it’s doable only if the two frequencies are in the range of the bandwidth (61.44MHz). Indeed, according the datasheet of the LMS7002M, the two RX chains share the same RXLO/PLL. Is it correct ?

Thanks for your reply.

#17

Yes

#18

I have gotten signals out using the UHD: USRP Source block, setting Device Arguments to

“soapy=0,driver=lime,nchan=2”

the number of Channels to 2, but how do I select the antennas? As this is a USRP dialog box, it lists certain things on the drop down. Can I just type “LNAL” and “LNAH” in the antenna boxes and make it go?

Thanks everyone for your assistance
Will

#19

Again, yes :slight_smile:

#20

ok, now I am quite confused. I have used the above method, and where it appears that it is rx’ing two signals when I record the input from each channel to a “file sink” in GNU Radio I am getting data from channel 0 only and nothing from channel 1. the antennas are connected to the RX1_H and RX2_H ports respectively. I wish there was more clear documentation for doing 2 channel RX because I can’t believe it’s this difficult to get working properly.

I am tuning both RX to the same frequency, with the same sample rate.