Undersampling with USRP

Hi all,

I’m having some problems with sub-sampling signals using with the USRP.
I
currently have the board connected to a signal generator with a
sinusoidal
input at 0dBm. I’m using the usrp_rx_cfile.py script from USRP examples
with the -8 -s and --no-hb flags and a decimation of 4 and -f 0 (no down
conversion).

This gives me an output file with interleaved I and Q samples (with one
set
being empty due to -f 0), this works fine up to Nyquist frequency (8MHz,
as
sampling frequency is 64/4 = 16MHz) but beyond this the operation is not
as
expected. At 10MHz I expect to see a single sinusoidal component at
6MHz,
however this is corrupted by a strong component at 2MHz, and at any
frequency above 10MHz no signal is recorded. Any suggestions? (I have
checked the signal generator, it is working fine)

Thanks for your help

Jon

–========================================

Jon Gill

[email protected]

CAA Institute of Satellite Navigation

University of Leeds

Tel: +44 (0) 113 343 2025

==========================================

Jonathan G. wrote:

This gives me an output file with interleaved I and Q samples (with one set
being empty due to -f 0), this works fine up to Nyquist frequency (8MHz, as
sampling frequency is 64/4 = 16MHz) but beyond this the operation is not as
expected. At 10MHz I expect to see a single sinusoidal component at 6MHz,
however this is corrupted by a strong component at 2MHz, and at any
frequency above 10MHz no signal is recorded. Any suggestions? (I have
checked the signal generator, it is working fine)
The sampling freq is not 16 Mhz but 64 Mhz
So niquist is not 16/2 but 64/2=32 MHz
The cic-decimator resamples at 16 Mhz
But it also filters away anything outside of the new bandwidth.
Ideally you should not see anything beyond 8 Mhz.
Since the cic-decimator is not ideal, it doesn’t have perfect steep
slopes, you still see some niquist mirroring signals up to 10 Mhz.
This is why the halfband filter was introduced, to filter out the
garbage at the bandwith edges (which you disabled to get 16 Mhz
samplerate)

You do still get niquist mirrors around the actual niquist frequence of
the AD converter
example:
If you input a signal at 56 Mhz you will see it back as a single 6 Mhz
component if using -f 0.

If you input at 36 Mhz you will get a signal at 28 Mhz.
To see this signal you would have to use a -f 26.0e6 or something like
that.
Then you would see the signal at 2 Mhz.
(if you would use -f 28.0e6 you would see the signal at 0.)
If you would use -f 0, you would see nothing because 28 Mhz is outside
the bandwith ofthe cic-decimator.

I hope this helps,
Martin

Jonathan G. wrote:

one set being empty due to –f 0), this works fine up to Nyquist
frequency (8MHz, as sampling frequency is 64/4 = 16MHz) but beyond
this the operation is not as expected. At 10MHz I expect to see a
single sinusoidal component at 6MHz, however this is corrupted by a
strong component at 2MHz, and at any frequency above 10MHz no signal
is recorded. Any suggestions? (I have checked the signal generator, it
is working fine)

In complex sampling, 16 MS/s gives you a frequency range of +/- 8 MHz. A
signal at +10 MHz would alias to -6 MHz, not plus 6.

In any case, the [digital] antialiasing filters are removing the signal
once it goes beyond 8 MHz. You can sub-sample signals at the ADC since
there is no anti-aliasing there (assuming you use a BasicRX), but
digitally we have antialiasing filters in the decimation.

Matt