[Top][All Lists]

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

Re: [Discuss-gnuradio] pll_refout_cc - finding optimum alpha & beta ??

From: Robert McGwier
Subject: Re: [Discuss-gnuradio] pll_refout_cc - finding optimum alpha & beta ??
Date: Thu, 16 Mar 2006 19:55:30 -0500
User-agent: Thunderbird 1.5 (Windows/20051201)

Eric Blossom wrote:
On Thu, Mar 16, 2006 at 05:49:34PM -0500, Charles Swiger wrote:
On Thu, 2006-03-16 at 14:39 -0800, Eric Blossom wrote:
On Thu, Mar 16, 2006 at 05:24:26PM -0500, Charles Swiger wrote:
On Thu, 2006-03-16 at 12:35 -0800, Eric Blossom wrote:

Here's the only place they're used:

    d_freq = d_freq + d_beta * error;
New frequency  =  Old_frequency +   GAIN_FOR_FREQ * measured-phase-error

    d_phase = mod_2pi(d_phase + d_freq + d_alpha * error);

phase is ALWAYS computed in an NCO by phase = phase + freq so this says that

phase_new = (phase_old + GAIN_FOR_PHASE*measured-phase-err) + NewFrequency. SO Something is amiss. You just turned your second order phase locked loop into a first order loop. It is NOT a typo.

It's way over my head but is d_freq supposed to be in the d_phase
calculation, 2nd line? phase is mod_2pi but freq can be a very big
number, like mod_2pi(100000 + 1.572849). That is I'm USING very big
numbers for max_freq and min_freq - don't suppose they're normalized
OK.  I can see why that would be a problem.  mod_2pi is optimized for
the expected "close in case" (symmetric around zero), thus the phase
isn't *really* getting folded down to [-pi,pi].
Try changing mod_2pi to make the bounds check and then compute the
modulus if it needs to using division, floor, multiplication and
subtraction. It's not cheap, but it'll probably compute the right

Uh, I just mutated the "+ d_freq" term out, guessing a typo, and got a
very well behaved organism. Maybe suitable for synchronous AM carrier

AMSAT VP Engineering. Member: ARRL, AMSAT-DL, TAPR, Packrats,
Laziness is the number one inspiration for ingenuity.  Guilty as charged!

reply via email to

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