Interest in beamforming and GNSS receivers

Hi everybody,

I discovered GNU Radio few months ago, in a before-go-to-bed surfing. I
found it very interesting, but complicated because of my poor skills in
programming Python or C++. I’m doing research on Global Navigation
Satellite
Systems (GNSS) receivers, and I’m used to code everything in Matlab.
Night
after night, I’ve been browsing the documentation and making humble
steps: I
installed Ubuntu on my laptop, followed the -excellent, also for dummies
like me- guide for installing all the software, read diagonally the
documentation and played with sample codes. Some Hello Worlds, some
problems
with the audio module, getting used to read the mailing list, feeling
astonished by the intense activity of this community… nothing new, I
guess.

Now I want to take it more seriously. I’ve seen that both python and c++
have very well done matrix algebra libraries, and that’s exactly what I
need
for my research (you can call me naive). I would like to implement a
GNSS
receiver (in the wide sense) based on an antenna array and play with
beamforming algorithms and weird RF front-end architectures (direct RF,
IF
sampling, etc). My main concern is synchronization, concretely I want to
implement some signal processing algorithms in a real receiver in order
to
assess their impact in the whole system, testing them with real data.
I’ve
been working in the development of some algorithms that -theoretically-
performs better in multipath environments, but I want to see if this is
true
beyond classical academic benchmarks.

What is the state of GNSS receivers development in GNU Radio? I have
found
some expressions of interest in the Internet, but nothing concrete. I’m
willing to start it from the scratch, but it is nonsense to reinvent the
wheel. I would like to put in contact with other people interested on
these
topics. Taking advantage of your patience, I have some other questions
(and
you will see my newbie approach):

  • I’ve seen some statements about “beamforming is possible”. To what
    extend?
    I’m trying to understand the multi-antenna code example, but it is
    possible
    to use the four ADC at the same time? How well are they synchronized? it
    is
    possible to compute the weight values in software and perform the
    multiplication in the FPGA at real time? There is any other major
    bottleneck
    than algebraic weight computation time?

  • My first target is a “traditional” L1 C/A code GPS receiver. I guess
    that
    I can choose between RFX1200 and a BasicRx with an external front-end.
    Have
    someone worked in the connection of GNU Radio with gpstk?

  • It is 32 MHz the maximum bandwidth available? Will the USRP 2.0
    increase
    this bandwidth? It is possible to decrease the resolution of the ADCs
    and/or
    increase their sampling frequency?

  • I also would like to work on the Galileo signal structure and the new
    L2CS
    GPS signal, mostly on the correlators. I have a background on signal
    processing, but I’m strongly matlab-shaped in what about programming is
    concerned. I’m willing to learn, but am I pointing to the right
    direction?

If someone could enlighten me in some of this questions, it would be
greatly
appreciated. Sorry for the long text.

Best regards,
Carles Fernandez

Carles Fernandez wrote:

with the audio module, getting used to read the mailing list, feeling
assess their impact in the whole system, testing them with real data. I’ve

  • I’ve seen some statements about “beamforming is possible”. To what extend?
    I’m trying to understand the multi-antenna code example, but it is possible
    to use the four ADC at the same time?
    Yes.
    How well are they synchronized?
    They run off the same 64 MHz clock, so are synchronised.
    I have even used two connected USRPs running of the same clock (one is
    master and exports its clock to the slave USRP)
    (You use an additional flatcable between the USRPS and an align software
    block in gnuradio which aligns the samples)
    This gives you 8 ADCs. This means 8 real channels or 4 complex channels.

I used this setup for a phase array with 4 DBSRX daughterboards.
(DBSX daughterboards use complex sampling so they need two ADCs)
DBSRX boards also support the GPS frequencies and are a lot cheaper, so
you might want to consider them.
But they are receive only.

You can even go higher and connect 4, 8 or 16 USRPS.

it is
possible to compute the weight values in software and perform the
multiplication in the FPGA at real time?
You could do that, but that means extra multipliers in the FPGA, which
take up resources.
You could also do the multiplication in software, but then you have
several datastreams from the USRP (which could saturate the USB
connection
when using a high datarate).
(You can do maximal 4 receive streams from the USRP)
There is any other major bottleneck
than algebraic weight computation time?
You have to make sure the LO’s from the frontends are synchronised. This
is the case with the RFX1200. It uses the USRP clock as reference.
You also might need a more stable and/or precise (external) clock. the
current clock is 15 ppm (from the top of my head). I don’t know the
exact
phase-noise figures.
You also might need to put good low-noise LNAs in front of the RFX1200
or the DBSRX.

  • My first target is a “traditional” L1 C/A code GPS receiver. I guess that
    I can choose between RFX1200 and a BasicRx with an external front-end. Have
    someone worked in the connection of GNU Radio with gpstk?

  • It is 32 MHz the maximum bandwidth available?
    In theory you could have 64 Mhz bandwidth when using complex sampling
    (the RFX1200 does this).
    This uses two ADCs for one frontend (one for the I and one for the Q
    channel)
    Your frontend must support this analog bandwidth of course. The RFX1200
    has filtering which limits the bandwidth to about 25 MHz. You could
    change the filtering to widen it.
    This is a bit dangerous however because any remaining signals outside
    the 64 MHz band will fold around the niquist freq.

This 64 MHz bandwidth is not transportable to the host PC with the
current supported resolutions (8 bit and 16 bit)
You have a maximum USB throughput of 32 MByte/sec. Which means 8 Mhz
bandwidth with 16 bit resolution and 16 MHz bandwidth with 8 bit
resolution.
When you implement verilog code to reduce the resolution to 4 or 2 bit
you would have 32 or 64 MHz bandwidth, but only for a single channel.
When you implement the despreading in the FPGA you would not have this
problem. (datarate goes way down after despreading)

Will the USRP 2.0 increase
this bandwidth?
Yes, its ADCs run at a higher freq, I don’t remember if it was 80 or 100
Msamples/sec.

Its connection to the host PC is Gbit ethernet. This will increase the
maximum bandwidth which you can transfer to the host-PC.

It is possible to decrease the resolution of the ADCs
You cannot decrease the resolution of the ADCs itsself, but you can
implement verilog code for the FPGA which reduces the resolution before
it
is send to the host-PC.

and/or
increase their sampling frequency?
No.

  • I also would like to work on the Galileo signal structure and the new L2CS
    GPS signal, mostly on the correlators. I have a background on signal
    processing, but I’m strongly matlab-shaped in what about programming is
    concerned. I’m willing to learn, but am I pointing to the right direction?

If someone could enlighten me in some of this questions, it would be greatly
appreciated. Sorry for the long text.

I hope this helped,

Martin Dudok van Heel

Hi all,

I have an interest in radioastronomy. I plan to make simple beamforming
phase array (primary with 4 and later with 8 antennas) with USRP (later
with 2) and GNU Radio. I am inspired by LOFAR radiotelescope.
Now I collect all available information about using GNU Radio and USRP
for it.

Martin, could you send more information about your solution, project
(url etc.) ?

Thanks,
Pavol

PS: I haven’t USRP yet. However, I am buying my first USRP, right now :slight_smile:

Carles Fernandez wrote:

codes. Some Hello Worlds, some problems with the audio module, getting
algorithms in a real receiver in order to assess their impact in the
I have some other questions (and you will see my newbie approach):
front-end. Have someone worked in the connection of GNU Radio with gpstk?

If someone could enlighten me in some of this questions, it would be
greatly appreciated. Sorry for the long text.

Best regards,
Carles Fernandez
Carles,

I’m just announcing my presence on the list: I’m the graduate research
assistant at Purdue University in charge of GNU Radio efforts, including
applications for GNSS. We are in a fairly early stage of development,
but I watch the GNU Radio list, and I’d be happy to hear about your
progress.

–Paul C.

Pavol Ďuriš wrote:

Hi all,

I have an interest in radioastronomy. I plan to make simple beamforming
phase array (primary with 4 and later with 8 antennas) with USRP (later
with 2) and GNU Radio. I am inspired by LOFAR radiotelescope.
Now I collect all available information about using GNU Radio and USRP
for it.

Martin, could you send more information about your solution, project
(url etc.) ?

Info about connecting murli-USRPs:
http://gnuradio.org/trac/wiki/MultiUsrp
http://gnuradio.org/trac/wiki/USRPClockingNotes
http://gnuradio.org/trac/browser/gnuradio/trunk/gnuradio-examples/python/multi_usrp
This last one is also in your gnuradio source directory:
gnuradio-examples/python/multi-usrp

It has been a while since I last used this setup, so there might be some
bitrot.
(incompatibilities between the multi-usrp fpga firmware (rbf-file) and
the latest gnuradio code and support for the latest daughterboards.)
But if this is the case then it should be solvable by implementing the
latest changes to the standard USRP firmware to the multi-USRP firmware.

There is not much info about my phase-array experiments online.
I know, I should update my website more often, but I am better at
writing code then at writing human-readable text.
I do haver a snapshot of my CMA (Constant Modulus Algorithm) adaptive
phase-array code.
This code automatically adapts to multiple FM, GMSK, QPSK or M-PSK
sources.
It should be able to extract multiple sources on the same frequency by
automatically nulling the other sources out when extracting one.
(max number of sources == number of antenna’s used)

Note that this code only works with phase-coherent daughterboards
(boards which use the USRP-clock as refclock)
This means allmost all daughterboards except TVRX.
(Which is too bad since I want to extract multiple broadband FM
stations, for now I use undersampled basicRX)
The code is at:
http://www.olifantasia.com/projects/gnuradio/mdvh/CMA_phase_array/

Other code of mine can be found at:
http://www.olifantasia.com/projects/gnuradio/mdvh/
or
http://gnuradio.org/trac/browser/gnuradio/branches/developers/nldudok1
or (when it has stabalized) in GnuRadio trunk

Greetings,
Martin

Thank you very much for your informative responses. Now things are
clearer
to me: the possibility of building an antenna array combining two or
more
USRPs is just exciting! I’m also delighted with the option of using an
external reference clock. I definitely will buy at least one USRP for
the
first experiments and the development of a simple GPS receiver. If my
progress is adequate, I will go for the multi-antenna approach.

I will keep you informed, and surely I will come often with new
questions.
Thanks again for those great sources of information, I’m really enjoying
while exploring them.

Cheers,
Carles.