I am making an application for angle of arrival (AoA) estimation using LimeSDR in MIMO spatial multiplexing mode. The plan is use WiFi signal for estimating the AoA.
To estimate the angle of arrival both receive antennas should be sampling at the same time and then phase difference between the received signal is used to estimate the angle. So far I have been able to setup the board in MIMO mode using both Rx antennas.
I wrote a simple application in Octave that transmits a tone of 2.5MHz from Tx1.
The carrier frequency is 2412MHz and sampling frequency is 10MHz.
I receive the signal at both Rx1 and Rx2. However, if I plot the received signal from both antennas some times there is a delay of 1 cycle.
It seems that the there is a delay of 1 sampling clock cycle between the 2 receivers. May be there is a setting in the board configuration .ini file that I need to change. Any help would be grateful ! I can also share the code on github if that will help.
Here are my questions:
What is the best way to calibrate the LimeSDR? I already tried LimeSuite and LimeUtil --cal both of them dont make a lot of difference.
After sometime the board heats up and the performance degrades. Is this a known issue ? How can it be solved?
Has some already tried using LimeSDR in MIMO 2x2 spatial multiplexing mode?
The disabling clock routine did not work for me. Also the shift seems to be random Ā±2samples with subsample (1/4th if remember correctly) steps. Give update if it did the job in your case.
PS
Subsample shift may seem odd but in lms7002d we have to do with sigma delta adc operating at higher frequency than output.
Thank you very much for the help, unfortunately did not work or I am making a mistake.
I created a .ini file using LimeSuiteGUI and at the end of the file I programme the registers as:
0x0086=0x4100 #CGEN off
0x0020=0xFFF7 # toggle both bit [9] and [11]
0x0020=0xF5F7
0x0020=0xFFF7
0x0086=0x4101 # CGEN ON
The .ini file in dropbox.
Is there a specific sequence of programming registers?
This routine should be at the start or at the end of .ini file?
@modimo I also observe random +/- Ts difference between the samples. I think after doing this procedure the probability of +/- Ts difference decreases but it is still there.
Did you find any work around for this in software?
No i did not. I tried fiddling with registers but no luck. You can use DSP methods to fix this but it seems to be excess means. Your test case is easier to reproduce than minÄ, maybe lime guys will take another look at the problem.
Since limesdr allows to sync multiple boards the synchronization within single chip should be obvious. But it is not. I did put my project aside because of that. Looking forward for any update in this matter.
From my experience the delay stays the same. It seems it is synchronous issue. Be careful though with restarting method. You might end up with small shift (subsample) that can easily be missed.
I created a .ini file using LimeSuiteGUI and at the end of the file I programme the registers as:
0x0086=0x4100 #CGEN off
0x0020=0xFFF7 # toggle both bit [9] and [11]
0x0020=0xF5F7
0x0020=0xFFF7
0x0086=0x4101 # CGEN ON
.ini file does not work that way, it does not produce such sequence of register writes. When .ini file contains duplicate addresses only the last value of repeating addresses is written.
You should do A and B channel alignment (or deciding by how many samples A and B channels are out of sync) manually each time after power up. Although there is a delay line in the LMS7002M which is able to delay up to 4 samples. Check register HBD_DLY (0x0404[15:13]) in RxTSP.
@obaidz8 Is it possible you can send me your code in Octave that can send from Tx1 and receive from Rx1 and Rx2 ? I would like to do a beamforming using LimeSDR to extend the range of communication, but because Iām new in this domain and really canāt find a lot of tutorial in octave. By now, all I have is the source code in LimeSDR workshop.
If not possible, can you suggest me some ressources for me to catch on this topic ? Thank you a lot
Iām seeing the same issue of non-synchronised Rx channels - really surprised there is no mechanism to align the data.
If an internal test signal and loopback is used to find the channel difference, would it remain constant if the loopback is switched off on-the-fly and ārealā signals sampled?
This does of course assume the test signal to both channels are aligned?