discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] GPS with DBSRX, Almost There


From: Peter Monta
Subject: Re: [Discuss-gnuradio] GPS with DBSRX, Almost There
Date: Tue, 06 Mar 2007 23:32:05 -0800
User-agent: Thunderbird 1.5.0.9 (X11/20070212)

Gregory W Heckler wrote:


The real problem lies in the fact that the carrier tracking loop (a 3rd order PLL) of my software receiver cannot achieve phase lock. The phase jitter looks high, and the LO frequency drifts so much it dominates over the Doppler derived from satellite motion.

Yes, it looks like my dbs_rx is wandering 10 Hz or so over timescales
of a few seconds.  A second-order loop with bandwidth of about 20 Hz
seems to track all this out, but at the expense of noise---it would be
nice to use a smaller bandwidth for a stationary receiver.

Below are plots of 4 seconds of an actual dbs_rx recording (one point
per millisecond).  The first plot is unwrapped phase (y-axis in radians)
and the second is the demodulated data after the PLL (also attached as an
octave/matlab file).

So things look reasonably okay for strong L1 signals, but there may
be limits to how far the dbs_rx can be pushed for weak signals, if
cycle slips are at all important.  Maybe the strong PRNs can aid the
weak ones, since the LO jitter is common to all.


If anyone would like any GPS IF data I would be happy to email it to your personal email address (indicate how many seconds of data you would like). Thanks!

I could take a look if you like---two seconds perhaps?

Cheers,
Peter Monta

PNG image

PNG image

n = length(e);

r = 0;
phase = 0;
freq = 0;
data = zeros(1,n);

for i=1:n,
  pd = exp((1j)*phase) * e(i);          # phase detector
  data(i) = real(pd);                   # save data (in-phase arm)
  err = -arg(pd);

  if (err>pi/2),          # costas discriminator
    err = err - pi;
  endif
  if (err<(-pi/2)),
    err = err + pi;
  endif

  r = r + 0.0006*err;     # loop filter
  freq = r + 0.03*err;

  phase = phase + freq;   # NCO
end

reply via email to

[Prev in Thread] Current Thread [Next in Thread]