Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at the sample level.
basically you are right. But there is signal processing algorithm to track two dongles sampling/oscillator error separately and compensate them separately. Thus we can get them synchronized finally after signal processing algorithm.
What I need actually is that how to get two streams of sample from two dongles.
Actually I notice that in dump1090 it put rtlsdr_read_async in a new created background thread, then there is a possibility that I create two thread to operate two dongles. But in this method, there should be some mechanisms to synchronize two threads. It is complicated.
Anyone has simpler solution?
Thank you.
On Sun, Aug 25, 2013 at 9:49 PM, Thierry Leconte < thierry.leconte@laposte.net> wrote:
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at the
sample level.
Another issue you'll have is to start both dongles simultaneously... with the sampling rate you'll have on the dongles this becomes quite tricky : you get blocks of samples from both dongles but you have no idea of how many samples they are shifted in time. One way to solve this is to search for cross correlation between channels, but this is not very easy in realtime. This can be done by post-processing offline. I thaught of this a while ago, using a pin diode or something equivalent to shortcut both inputs to ground to find an easy way to have the synchro between channels but did not try it yet
sylvain
2013/8/25 Jiao Xianjun putaoshu@gmail.com
basically you are right. But there is signal processing algorithm to track two dongles sampling/oscillator error separately and compensate them separately. Thus we can get them synchronized finally after signal processing algorithm.
What I need actually is that how to get two streams of sample from two dongles.
Actually I notice that in dump1090 it put rtlsdr_read_async in a new created background thread, then there is a possibility that I create two thread to operate two dongles. But in this method, there should be some mechanisms to synchronize two threads. It is complicated.
Anyone has simpler solution?
Thank you.
On Sun, Aug 25, 2013 at 9:49 PM, Thierry Leconte < thierry.leconte@laposte.net> wrote:
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at the
sample level.
computer has become more powerful than our imagination. According to my experiences, order of Msps correlation operation can be done in real time by using state of art computer. Instead of cross correlation, we can also transmit a training sequence (for example spread code, m sequence, barker sequence, M sequence, ZC sequence, etc.) to do synchronization and sampling/frequency correlation.
On Sun, Aug 25, 2013 at 11:30 PM, Sylvain AZARIAN <sylvain.azarian@gmail.com
wrote:
Another issue you'll have is to start both dongles simultaneously... with the sampling rate you'll have on the dongles this becomes quite tricky : you get blocks of samples from both dongles but you have no idea of how many samples they are shifted in time. One way to solve this is to search for cross correlation between channels, but this is not very easy in realtime. This can be done by post-processing offline. I thaught of this a while ago, using a pin diode or something equivalent to shortcut both inputs to ground to find an easy way to have the synchro between channels but did not try it yet
sylvain
2013/8/25 Jiao Xianjun putaoshu@gmail.com
basically you are right. But there is signal processing algorithm to track two dongles sampling/oscillator error separately and compensate them separately. Thus we can get them synchronized finally after signal processing algorithm.
What I need actually is that how to get two streams of sample from two dongles.
Actually I notice that in dump1090 it put rtlsdr_read_async in a new created background thread, then there is a possibility that I create two thread to operate two dongles. But in this method, there should be some mechanisms to synchronize two threads. It is complicated.
Anyone has simpler solution?
Thank you.
On Sun, Aug 25, 2013 at 9:49 PM, Thierry Leconte < thierry.leconte@laposte.net> wrote:
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at
the sample level.
if you are trying to process ADS-B from two different dongles, running two dump1090's isn't a problem. i routinely run dump1090 and rtl_acars using two dongles on the same machine simultaneously. when running two dump1090 process you must provide the device id for each and make sure both aren't running their web servers on the same port.
a more useful setup is to have multiple receivers running on cheap servers (e.g. raspberry pi) at different locations and then collecting and correlating the data. having receivers at different locations should yield a larger coverage area.
On Sun, Aug 25, 2013 at 7:13 AM, Jiao Xianjun putaoshu@gmail.com wrote:
basically you are right. But there is signal processing algorithm to track two dongles sampling/oscillator error separately and compensate them separately. Thus we can get them synchronized finally after signal processing algorithm.
What I need actually is that how to get two streams of sample from two dongles.
Actually I notice that in dump1090 it put rtlsdr_read_async in a new created background thread, then there is a possibility that I create two thread to operate two dongles. But in this method, there should be some mechanisms to synchronize two threads. It is complicated.
Anyone has simpler solution?
Thank you.
On Sun, Aug 25, 2013 at 9:49 PM, Thierry Leconte < thierry.leconte@laposte.net> wrote:
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at the
sample level.
Hi,
Yes, you are right. The thought is kind of message combination or information fusion, diversity receiving. In this situation, large distance spaced antennas/dongles are required to get enough diversity. But in some application, such as beam forming, direction finding, we want to have antennas/dongles located in a strict relation ship, such as lambda/2 spaced antenna array. In this case we want to detect carrier phases of each channels.
On Mon, Aug 26, 2013 at 12:11 AM, Skip Tavakkolian < skip.tavakkolian@gmail.com> wrote:
if you are trying to process ADS-B from two different dongles, running two dump1090's isn't a problem. i routinely run dump1090 and rtl_acars using two dongles on the same machine simultaneously. when running two dump1090 process you must provide the device id for each and make sure both aren't running their web servers on the same port.
a more useful setup is to have multiple receivers running on cheap servers (e.g. raspberry pi) at different locations and then collecting and correlating the data. having receivers at different locations should yield a larger coverage area.
On Sun, Aug 25, 2013 at 7:13 AM, Jiao Xianjun putaoshu@gmail.com wrote:
basically you are right. But there is signal processing algorithm to track two dongles sampling/oscillator error separately and compensate them separately. Thus we can get them synchronized finally after signal processing algorithm.
What I need actually is that how to get two streams of sample from two dongles.
Actually I notice that in dump1090 it put rtlsdr_read_async in a new created background thread, then there is a possibility that I create two thread to operate two dongles. But in this method, there should be some mechanisms to synchronize two threads. It is complicated.
Anyone has simpler solution?
Thank you.
On Sun, Aug 25, 2013 at 9:49 PM, Thierry Leconte < thierry.leconte@laposte.net> wrote:
Le 25/08/2013 15:13, Jiao Xianjun a écrit :
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
Each dongle have its own clock, so it will never be synchronized at
the sample level.
Hi
Use the IR input for synchronization. 1PPS IR pulse sender.
SG
On Sun, Aug 25, 2013 at 4:13 PM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Hi,
Looks interesting! Can you give more details ? (specially on the processing behind) ?
regards sylvain
2013/9/2 Sdr Guru sdrguru1@gmail.com
1PPS IR pulse sender
The second way, use MLAT enabled dump1090 https://github.com/antirez/dump1090/pull/23 http://www.satsignal.eu/raspberry-pi/dump1090.html
On Sun, Aug 25, 2013 at 4:13 PM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Thanks.
sylvain
2013/9/2 Sdr Guru sdrguru1@gmail.com
The second way, use MLAT enabled dump1090 https://github.com/antirez/dump1090/pull/23 http://www.satsignal.eu/raspberry-pi/dump1090.html
On Sun, Aug 25, 2013 at 4:13 PM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Hi guys,
For the multiple dongles synchronization in signal level instead of bits/packets level, I setup a working repo in github, and write a initial demo framework. See below:
https://github.com/JiaoXianjun/multi-rtl-sdr-udp-relay.git
You may find information and instruction of demo quickly by reading the README.
My initial purpose is performing in-fly calibration for multiple dongles according to some pre-known signal (GSM, ADS-B?) to let them work together coherently.
An ideal scheme may be that we should generate a very narrow band and very week signal in (or just located at the edge of) target working band of dongles, and perform the software in-fly calibration in background (or driver level). This would be user friendly.
I know it is far from final state currently, and many things are not clear yet (See TODO). But please join me if you also think this is a good idea. Just check out the demo and run it to have a look.
Currently I just test the demo in Ubuntu-Linux.
BR
Jiao Xianjun
On Mon, Sep 2, 2013 at 8:23 PM, Sylvain AZARIAN sylvain.azarian@gmail.comwrote:
Thanks.
sylvain
2013/9/2 Sdr Guru sdrguru1@gmail.com
The second way, use MLAT enabled dump1090 https://github.com/antirez/dump1090/pull/23 http://www.satsignal.eu/raspberry-pi/dump1090.html
On Sun, Aug 25, 2013 at 4:13 PM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Hi
Are you using a common clock? http://kaira.sgo.fi/2013/09/16-dual-channel-coherent-digital.html
I've modified some of the RTL dongles, played with GNURadio and Octave. The results are promising, sample level correlation (2.4M/10, FM radio signal).
On Mon, Dec 30, 2013 at 9:38 AM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi guys,
For the multiple dongles synchronization in signal level instead of bits/packets level, I setup a working repo in github, and write a initial demo framework. See below:
https://github.com/JiaoXianjun/multi-rtl-sdr-udp-relay.git
You may find information and instruction of demo quickly by reading the README.
My initial purpose is performing in-fly calibration for multiple dongles according to some pre-known signal (GSM, ADS-B?) to let them work together coherently.
An ideal scheme may be that we should generate a very narrow band and very week signal in (or just located at the edge of) target working band of dongles, and perform the software in-fly calibration in background (or driver level). This would be user friendly.
Cheap (8USD+PP), simple, computer-controlled and legal FM band "marker" http://blog.palosaari.fi/2013/08/naked-hardware-12-usb-audio-transmitter.htm...
I know it is far from final state currently, and many things are not clear
yet (See TODO). But please join me if you also think this is a good idea. Just check out the demo and run it to have a look.
Testing it and I'll let you know.
Currently I just test the demo in Ubuntu-Linux.
BR
Jiao Xianjun
On Mon, Sep 2, 2013 at 8:23 PM, Sylvain AZARIAN <sylvain.azarian@gmail.com
wrote:
Thanks.
sylvain
2013/9/2 Sdr Guru sdrguru1@gmail.com
The second way, use MLAT enabled dump1090 https://github.com/antirez/dump1090/pull/23 http://www.satsignal.eu/raspberry-pi/dump1090.html
On Sun, Aug 25, 2013 at 4:13 PM, Jiao Xianjun putaoshu@gmail.comwrote:
Hi,
I want to use multiple rtl-sdr dongles to do some multi-antenna experiments.
Is it possible to read IQ samples from multiple rtl-sdr dongles in a synchronized manner?
I already have a glance at dump1090 codes, which is a project using rtl-sdr to decode aircraft broadcasting ADS-B messages in 1090MHz.
Seems that I should use rtlsdr_read_async() instead of rtlsdr_read_sync(), because that if rtlsdr_read_sync() is used, I have to call it multiple times sequentially. That looks not synchronized.
But rtlsdr_read_async() function only accept one rtl-sdr device as input parameter, and it will be blocked after it is called. So seems that it also can't be used for my purpose directly.
Also welcome any opinion on how to improve rtl-sdr lib/driver to support this feature.
Thank you.
BR
Jiao Xianjun
Hi
rtl-sdr-relay Some of the recommendations. Please add PPM error calculation, exactly like new rtl_test -p but multiple receivers simultaneously. It provides immediate information if something is wrong with USB or dongles. https://github.com/keenerd/rtl-sdr/commit/b5f89dcf40463130e717b6c9bb3a39a3c8... https://github.com/keenerd/rtl-sdr/blob/master/src/rtl_test.c
Please add automatic eeprom PPM calibration https://github.com/keenerd/rtl-sdr/commit/ecf267737ca52f5005b7a12a352307e8cd...
default sample rate 2.4M (28.8/12) or 1.2M (28.8/24), probably lower jitter MAX_NUM_DEV 4->16 :)
Some nice to have features. ip binding multicast support one common (interleaved) stream of all the receivers timestamped stream
I'm trying to convert MATLAB script to Ocatve.
SG
On Mon, Dec 30, 2013 at 9:38 AM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi guys,
For the multiple dongles synchronization in signal level instead of bits/packets level, I setup a working repo in github, and write a initial demo framework. See below:
https://github.com/JiaoXianjun/multi-rtl-sdr-udp-relay.git
You may find information and instruction of demo quickly by reading the README.
My initial purpose is performing in-fly calibration for multiple dongles according to some pre-known signal (GSM, ADS-B?) to let them work together coherently.
An ideal scheme may be that we should generate a very narrow band and very week signal in (or just located at the edge of) target working band of dongles, and perform the software in-fly calibration in background (or driver level). This would be user friendly.
I know it is far from final state currently, and many things are not clear yet (See TODO). But please join me if you also think this is a good idea. Just check out the demo and run it to have a look.
Currently I just test the demo in Ubuntu-Linux.
BR
Jiao Xianjun
Hi
Thanks for youar advices. I will check them as soon as possible. Now I am concentrating on GSM downlink FCCH and SCH channel synchronization. Today, the FCCH can be detected roughly.
The repo is expected progressing fast recently.
BR
Jiao Xianjun
On Thu, Jan 2, 2014 at 5:37 AM, Sdr Guru sdrguru1@gmail.com wrote:
Hi
rtl-sdr-relay Some of the recommendations. Please add PPM error calculation, exactly like new rtl_test -p but multiple receivers simultaneously. It provides immediate information if something is wrong with USB or dongles.
https://github.com/keenerd/rtl-sdr/commit/b5f89dcf40463130e717b6c9bb3a39a3c8... https://github.com/keenerd/rtl-sdr/blob/master/src/rtl_test.c
Please add automatic eeprom PPM calibration
https://github.com/keenerd/rtl-sdr/commit/ecf267737ca52f5005b7a12a352307e8cd...
default sample rate 2.4M (28.8/12) or 1.2M (28.8/24), probably lower jitter MAX_NUM_DEV 4->16 :)
Some nice to have features. ip binding multicast support one common (interleaved) stream of all the receivers timestamped stream
I'm trying to convert MATLAB script to Ocatve.
SG
On Mon, Dec 30, 2013 at 9:38 AM, Jiao Xianjun putaoshu@gmail.com wrote:
Hi guys,
For the multiple dongles synchronization in signal level instead of bits/packets level, I setup a working repo in github, and write a initial demo framework. See below:
https://github.com/JiaoXianjun/multi-rtl-sdr-udp-relay.git
You may find information and instruction of demo quickly by reading the README.
My initial purpose is performing in-fly calibration for multiple dongles according to some pre-known signal (GSM, ADS-B?) to let them work together coherently.
An ideal scheme may be that we should generate a very narrow band and very week signal in (or just located at the edge of) target working band of dongles, and perform the software in-fly calibration in background (or driver level). This would be user friendly.
I know it is far from final state currently, and many things are not clear yet (See TODO). But please join me if you also think this is a good idea. Just check out the demo and run it to have a look.
Currently I just test the demo in Ubuntu-Linux.
BR
Jiao Xianjun