Active Radar

Hi, folks -

I’m trying to build an active pulsed radar using GR/USRP. Right now I am
only concerned with the transmission and reception of pulses. All radar
signal processing will happen offline. I know Eric is working on
passive radar. Has anyone tried active yet?

I have a start on the Tx and Rx blocks, but I’m looking for suggestions
– especially with regard to timing and synchronization. The following
is an overview of what I’ve got so far:

Tx. Block: Basically, the constructor accepts the pulse repetition
frequency and a file containing the baseband transmit signal. The work
method looks at the system time each call to determine whether or not it
should let loose another pulse.

Rx. Block: I can’t possibly log all samples due to memory limitations.
So, the work method attempts to record only a time gated subset of the
received samples. (This works for my application because I have an idea
where the target is.) The Rx block constructor accepts a pointer to
the Tx block so that it can access the time of transmission for the last
pulse. It also accepts the delay to wait before recording pulse data, as
well as the number of samples to record for each pulse.

The real problem is timing and synchronization. Below is a block
diagram that helps illustrate the problem.

     |---------  Ta  -------------|------ Tb ----|

Tx Block --> GR Scheduler --> USB --> USRP --> real world
. |
. |
. delay T
. |
. |
\ / \ /
’ ’
Rx Block <-- GR Scheduler <-- USB <-- USRP <-- real world
|--------- Ra -------------|------ Rb ----|

I’m trying to measure T, but there are unknown delays:

  • Ta, time pulse is put into the buffer until time it reaches USRP.
  • Tb, time pulse reaches USRP until time it leaves antenna
  • Rb, time pulse arrives at antenna until time it reaches USB
  • Ra, time pulse leaves USRP until time it is recorded in Rx. block

I assume Tb & Rb will be relatively constant and Ta & Ra will be more
variable. I have access to a digital RF memory. So, I hope to measure
the aggregate of Ta and Tb. I’m not sure I have the equipment to measure
Ra & Rb.

Obviously, I need very precise timing and synchronization. I need to
transmit at very precise intervals, and record at very precise times
after real world transmission. I’m thinking of counting samples
instead of using the system clock to determine relative times, but I
haven’t figured out how to synchronize this between Tx and Rx blocks.

Also, ideally, I would be able to transmit at 3kHz with a pulse width of
13us. Our application won’t let me deviate too much from that, but I’ll
have to take what I can get.

I will be very appreciative of any insights anyone has into this
problem.

Thanks and regards

  • Lee

On Wed, Jun 14, 2006 at 02:00:27PM -0400, Lee P. wrote:

Hi, folks -

I’m trying to build an active pulsed radar using GR/USRP. Right now I am
only concerned with the transmission and reception of pulses. All radar
signal processing will happen offline. I know Eric is working on
passive radar. Has anyone tried active yet?

Sounds like fun!

So, the work method attempts to record only a time gated subset of the
Tx Block --> GR Scheduler --> USB --> USRP --> real world

Ra & Rb.

I will be very appreciative of any insights anyone has into this
problem.

Thanks and regards

  • Lee

Hi Lee,

If you solve all these problems, I’d be most appreciative :wink:

I don’t have a short term fix for you, but the basic path we’re going
to be headed down will include “inband signaling” on the USB and Tx
and Rx timestamps in the packets.

This is part of what the mblock proposal from BBN is trying to make
easier to do. The ultimate timing control will be in the FPGA.
Imagine a free running counter in the FPGA clocked at the master clock
rate (64M). On the receive path, each USB packet will have a fixed
length header that includes the sample clock value that corresponds to
the first sample in the packet.

On TX, the idea is to have a timestamp in the header that says “do not
transmit before time t”. There will be some way to map “frames”
(variable length things possibly bigger or smaller than a USB packet),
into something we keep track of across the USB.

With these two primitive operations, what you’re trying to do gets
much easier.

If you have the time and inclination to work on any of the low level
timing stuff, I can definitely assist. We’ll need it sooner or later,
and if you’re interested in working on it now, that would be great!

It shouldn’t take more than a couple of days effort to work out the
format of the packets across the USB and a basic plan of attack. The
code in the FX2 won’t need any changes, it just passes them along.

The verilog will need substantial work, and the host code will need a
bit of tweaking, but that shouldn’t be hard. Pretty much just a
matter of adding and removing a header from the packet.

Last month I had a very successful trip to Virginia Tech, and we got a
lot done together. I’m willing to consider doing something similar at
Wright, particularly if there are at least two or three people who are
interested and willing to invest some time and effort.

I’ll make the same offer to any other group of GNU Radio users: if
you’ve got people who are mostly up to speed, are trying to use GNU
Radio do get something done, and are willing to to invest the time and
effort, I’m willing to consider a visit to your site to work with you
on getting your problems solved. All of this is subject to my
availability, funding for travel, etc.

Eric

Eric B. wrote:

On Wed, Jun 14, 2006 at 02:00:27PM -0400, Lee P. wrote:

Hi, folks -

I’m trying to build an active pulsed radar using GR/USRP. Right now I am
only concerned with the transmission and reception of pulses. All radar
signal processing will happen offline. I know Eric is working on
passive radar. Has anyone tried active yet?
I am also working on passive radar at the moment, not active (yet).
I would suggest using a chirp signal instead of a pulse.
It is much more accurate and power efficient.

On TX, the idea is to have a timestamp in the header that says “do not
transmit before time t”. There will be some way to map “frames”
(variable length things possibly bigger or smaller than a USB packet),
into something we keep track of across the USB.
It would also be handy to have a feedback-path for TX.
The fpga could report back:
TX packet AAA was transmitted on timestamp XXXX
Then you can also send continuous streams (of packets) and still have
exact synchronisation with RX.
(RX packet BBB was received on timestamp YYYY)

On my passive radar experiments.
After doing a lot of simulation I am now trying to do real-world
passive-radar using the usrp and just basic RX-boards with simple
standard
cheap FM/TV antenna-amplifiers in front of them.
(I still need better filtering of the FM band)

I do get signals, but it is probably not an accurate radar image.
If I plot slant-range (the total distance transmitter-object-receiver)
against received phasediff between my two antenna’s I get allways
spirals.
This would suggest I have a doppler-shift which allways increases with
objects further away which is not very logical.

If I correlate with different doppler shifts my spirals turn around but
they keep being spirals.
In this image I change the doppler shift in every frame

In this image every frame is from samples further in time.

Greetings,
Martin

Martin D. wrote:

If I correlate with different doppler shifts my spirals turn around but they keep being spirals.
In this image I change the doppler shift in every frame
http://www.olifantasia.com/projects/gnuradio/mdvh/passive_radar/passive_radar_time_is_time_x_arc_is_phasediff_length_is_slantrange.gif
In this image every frame is from samples further in time.
http://www.olifantasia.com/projects/gnuradio/mdvh/passive_radar/passive_radar_time_is_doppler_x_arc_is_phasediff_length_is_slantrange.gif
Little mistake,It is the other way around.

In this image every frame is from samples further in time.

In this image I change the doppler shift in every frame

On Thu, 2006-06-15 at 02:12 +0200, Martin D. wrote:

I would suggest using a chirp signal instead of a pulse.
It is much more accurate and power efficient.

Thanks a lot Martin. We are actually hoping to use the returns for SAR.
For that we need a lot of bandwidth on scene – like 100+ MHz.
Obviously, this can’t be done instantaneously, but it can be achieved
via a stepped-frequency waveform. To that end I am using a 13-bit
barker coded baseband sequence modulated on a (hopefully) stepped
frequency pulse train. I didn’t mention this in my email because the
stepped frequency adds another layer of complexity that I don’t know how
to handle right now. I actually pinged the list about this a while ago
with no response.

http://lists.gnu.org/archive/html/discuss-gnuradio/2006-05/msg00296.html

Basically, I need to step the VCO by (hopefully) 10 MHz between each
pulse. Since I need this to be correlated with a baseband pulse train
provided by another block, I need to do this in C++ (I think) and not
Python. It would be very easy to implement in Python, but I never seem
to find the easy way :slight_smile: I’ll investigate this once I am transmitting
and receiving a pulse train.

On my passive radar experiments.
After doing a lot of simulation I am now trying to do real-world passive-radar using the usrp and just basic RX-boards with simple standard
cheap FM/TV antenna-amplifiers in front of them.
(I still need better filtering of the FM band)

I do get signals, but it is probably not an accurate radar image.
If I plot slant-range (the total distance transmitter-object-receiver) against received phasediff between my two antenna’s I get allways spirals.
This would suggest I have a doppler-shift which allways increases with objects further away which is not very logical.

I’m not familiar with this method of slant range vs. phase difference.
Usually, I plot range vs. Doppler. I would like to learn more, do you
have a reference you can point me to? Do you have range-Doppler images
of this data?