Forum: GNU Radio what is the rate(sampling) of the impulse response using usrp_sounder.py ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bruh G. (Guest)
on 2008-12-06 00:43
(Received via mailing list)
Hey all,

I am using usrp_sounder.py to see channel impulse response. I used just
the
default parameters(length=4095) using:

usrp_sounder.py -t -f 2.40e9  -v
usrp_sounder.py -t -f 2.40e9 -v  -F 1st_Record.dat

1.  could someone tell me what the sampling rate of the recorded
impulse
response recorded will be?
2. on which  parameters will the sampling rate depend?
3. and if I contine the sounding for some time and stop, does it mean i
will
have N different impulse responses or N*4095 samples ?  -Thanks


Bruhtesfa
Johnathan C. (Guest)
on 2008-12-06 20:46
(Received via mailing list)
On Fri, 2008-12-05 at 23:42 +0100, Bruhtesfa E. wrote:

> I am using usrp_sounder.py to see channel impulse response. I used
> just the default parameters(length=4095) using:
>
> usrp_sounder.py -t -f 2.40e9  -v
> usrp_sounder.py -t -f 2.40e9 -v  -F 1st_Record.dat
>
> 1.  could someone tell me what the sampling rate of the recorded
>  impulse response recorded will be?

The impulse response bins are separated by 1/32MHz, or 31.25 ns.

> 2. on which  parameters will the sampling rate depend?

This is fixed.  The sounder transmitter sends a repeating PN sequence at
32 Mchips/sec.  The receiver correlates the received data against all
possible offsets of the PN sequence and outputs the resulting
correlation vector.

> 3. and if I contine the sounding for some time and stop, does it mean
> i will have N different impulse responses or N*4095 samples ?  -Thanks

You will have a repeating sequence of impulse responses of length 4095
samples, corrupted by noise.  You may coherently sum these to reduce
noise, however, the gr-sounder receiver does *not* perform any
frequency/phase synchronization, so the vectors will need
post-processing if you want to do this.

-Johnathan
Bruh G. (Guest)
on 2008-12-06 22:09
Johnathan C. wrote:
> On Fri, 2008-12-05 at 23:42 +0100, Bruhtesfa E. wrote:
>
>> I am using usrp_sounder.py to see channel impulse response. I used
>> just the default parameters(length=4095) using:
>>
>> usrp_sounder.py -t -f 2.40e9  -v
>> usrp_sounder.py -t -f 2.40e9 -v  -F 1st_Record.dat
>>
>> 1.  could someone tell me what the sampling rate of the recorded
>>  impulse response recorded will be?
>
> The impulse response bins are separated by 1/32MHz, or 31.25 ns.
>

but, does the USB support this much sampling rate of 32 MHZ?

 Also on simple gnu radio user manual, about gnuradio sounder it says :
"The sounder uses a custom FPGA bitstream that is able to generate and
receive a sounder waveform across a full 32 MHz wide swath of RF
spectrum; the waveform generation and impulse response processing occur
in logic in the USRP FPGA and not in the host PC. This avoids the USB
throughput bottleneck entirely."

This implies that the processed impulse response that goes to the USB is
of lower sampling rate than 32MHZ. or no? please correct me if i am
wrong.

 Thanks!

Bruhtesfa
Johnathan C. (Guest)
on 2008-12-06 22:26
(Received via mailing list)
On Sat, Dec 6, 2008 at 12:09 PM, Bruhtesfa E.
<removed_email_address@domain.invalid> wrote:

> but, does the USB support this much sampling rate of 32 MHZ?

No.

>  Also on simple gnu radio user manual, about gnuradio sounder it says :
> "The sounder uses a custom FPGA bitstream that is able to generate and
> receive a sounder waveform across a full 32 MHz wide swath of RF
> spectrum; the waveform generation and impulse response processing occur
> in logic in the USRP FPGA and not in the host PC. This avoids the USB
> throughput bottleneck entirely."
>
> This implies that the processed impulse response that goes to the USB is
> of lower sampling rate than 32MHZ. or no? please correct me if i am
> wrong.

The custom FPGA code performs the correlation in the USRP.  The
algorithm is a sequential correlator that processes an entire PN code
sequence per impulse reponse lag time.  So the data rate coming out of
the USRP is 64 Msps (ADC rate) divided by 8190 samples per PN sequence
(default degree of 12), or about 7.8 ksps.  Since each record is 4095
samples long, this outputs a full impulse response record about twice
a second.

The impulse response record still represents the original 32 Mchip/sec
correlation, so in your received data, each sample represents a lag of
about 31.25 ns.

-Johnathan
Bruh G. (Guest)
on 2008-12-16 18:26
Johnathan C. wrote:

>
> The custom FPGA code performs the correlation in the USRP.  The
> algorithm is a sequential correlator that processes an entire PN code
> sequence per impulse reponse lag time.  So the data rate coming out of
> the USRP is 64 Msps (ADC rate) divided by 8190 samples per PN sequence
> (default degree of 12), or about 7.8 ksps.  Since each record is 4095
> samples long, this outputs a full impulse response record about twice
> a second.
>
> The impulse response record still represents the original 32 Mchip/sec
> correlation, so in your received data, each sample represents a lag of
> about 31.25 ns.
>
> -Johnathan



Thank you for the replies Johnathan!!!

But, i still get some problems when i experiment with it.

My objective is to measure impulse response of a room and extract
information on the movement of people inside the room.

1. I tried to monitor the impulse response of the room for 5 sec. So,
according to the discussion above(i.e since the FPGA computes impulse
response of length 4095,32MHZ in 0.5sec), I will have 10 impulse
response vectors in 5sec. But when i set { samples = 10 *
self._length**2 in usrp_sounder_rx.py } and run the code, it takes about
160 seconds to complete. So, I am confused. Does the recorded impulse
response correspond to 5sec or 160sec?

2. As, expected there is frequency offset on the received impulse
response.  what can i do to synchronize transmitter and receiver
daughter boards?     Thanks!

Bruhtesfa
Johnathan C. (Guest)
on 2008-12-16 23:07
(Received via mailing list)
On Tue, Dec 16, 2008 at 8:26 AM, Bruhtesfa E.
<removed_email_address@domain.invalid> wrote:

> My objective is to measure impulse response of a room and extract
> information on the movement of people inside the room.

As I had mentioned earlier, this will be difficult, as the time
resolution of the sounder impulse response will be on the order of
30-60 ft.  You might be able to use that; it depends on how you
process it.

> 1. I tried to monitor the impulse response of the room for 5 sec. So,
> according to the discussion above(i.e since the FPGA computes impulse
> response of length 4095,32MHZ in 0.5sec), I will have 10 impulse
> response vectors in 5sec. But when i set { samples = 10 *
> self._length**2 in usrp_sounder_rx.py } and run the code, it takes about
> 160 seconds to complete. So, I am confused. Does the recorded impulse
> response correspond to 5sec or 160sec?

I don't understand how you've modified the script to collect 5 seconds
of data.

> 2. As, expected there is frequency offset on the received impulse
> response.  what can i do to synchronize transmitter and receiver
> daughter boards?     Thanks!

You will need to use a stable time reference like a GPSDO on both the
transmitter and receiver.

-Johnathan
Bruh G. (Guest)
on 2008-12-17 11:44
Johnathan C. wrote:
> On Tue, Dec 16, 2008 at 8:26 AM, Bruhtesfa E.
> <removed_email_address@domain.invalid> wrote:


>> 1. I tried to monitor the impulse response of the room for 5 sec. So,
>> according to the discussion above(i.e since the FPGA computes impulse
>> response of length 4095,32MHZ in 0.5sec), I will have 10 impulse
>> response vectors in 5sec. But when i set { samples = 10 *
>> self._length**2 in usrp_sounder_rx.py } and run the code, it takes about
>> 160 seconds to complete. So, I am confused. Does the recorded impulse
>> response correspond to 5sec or 160sec?
>
> I don't understand how you've modified the script to collect 5 seconds
> of data.

 In the python code usrp_sounder_rx.py the number of impulse response
vectors is set to 100 by default. I have seen that from the statement (
samples = 100 * self._length**2) in class usrp_sounder_rx(gr.top_block).
I have also experiment with it.Then,I see by reading the file in matlab
that it really records 100 impulse response vectors or 100*4095 sampled
values.

 In my case, I want to use PN code of degree 12 and 32MHZ chip rate.And
this takes 4095*4095/32MHZ=0.5sec to record a single impulse response
vector (according to our previous discussion). Now, If I want to monitor
the room for 5sec, I need 5sec/0.5sec=10 impulse response vectors.

  So, I modified the PN code degree, chip rate and number of impulse
response vectors in usrp_sounder_rx.py. To change the number of impulse
response vectors to 10, I just used (samples = 10 * self._length**2)
instead of the default (samples = 100 * self._length**2)in the code.

But, When I run the code, it takes about 160sec to complete instead of
the expected 5sec.

So, I get confused? Is there a mistake I made ?
or, is there any factor that can delays the computation and recording of
a single impulse response vector slower than 4095*4095/32MHZ?



>> 2. As, expected there is frequency offset on the received impulse
>> response.  what can i do to synchronize transmitter and receiver
>> daughter boards?     Thanks!
>
> You will need to use a stable time reference like a GPSDO on both the
> transmitter and receiver.

Is there any method of synchronization by just wiring the transmit and
receive daughter boards together?

Thanks for your help!
Bruhtesfa
This topic is locked and can not be replied to.