Digital PLL's -- Part 2
In Part 1, we found the time response of a 2nd order PLL with a proportional + integral (lead-lag) loop filter. Now let’s look at this PLL in the Z-domain [1, 2]. We will find that the response is characterized by a loop natural frequency ωn and damping coefficient ζ.
Having a Z-domain model of the DPLL will allow us to do three things:
- Compute the values of loop filter proportional gain KL and integrator gain KI that give the desired loop natural frequency and damping. Deriving these formulae is somewhat involved, but the good news is we only have to do it once.
- Compute the linear-system time response to a step in the reference phase.
- Compute the frequency response.
Figure 1. DPLL Time Domain Model Block Diagram
Figure 1 is the time-domain DPLL model we derived in part 1. To convert this to a useful Z-domain model, we replace the accumulators in the Loop Filter and NCO with the transfer function z-1/(1 – z-1), who’s numerator and denominator we can multiply by z to get 1/(z – 1). This gives us the model in Figure 2, where we have also indicated the phase detector gain Kp.
Figure 2. DPLL in the Z-domain
The open-loop response of this system is the product of the transfer functions of the three blocks:
$$ G_1(z) = \frac{K_pK_LK_{nco}}{z-1} + \frac{K_pK_IK_{nco}}{(z-1)^2} \tag{1} $$
2nd Order System in s and z
A 2nd order continuous-time system with a Lead-lag filter is shown in Figure 3. [3, 4]. See Appendix B for a derivation of the closed-loop response. If we convert this to the Z-domain, we’ll see the response has the same form as that of our DPLL. This will allow us to relate KL and KI of the DPLL to ωn and ζ.
Figure 3. 2nd order system in s with a zero in the closed-loop response
To convert this system to the z-domain equivalent, make the following replacement:
$$ s \rightarrow \frac{z-1}{T_s} $$
This approximation is valid as long as the loop natural frequency is much less than the sample frequency (see Appendix C). The Z-domain block diagram is shown in Figure 4, where we have allowed for the possibility that the loop filter could have a sample rate Ts_filt different from the NCO sample rate Ts_nco.
Figure 4. 2nd order system in the z-domain
The open-loop response G2(z) is:
$$ G_2(z) = \frac{2\zeta\omega_nT_{s\_nco}}{z-1} + \frac{T_{s\_filt}T_{s\_nco}\omega_n^2}{(z-1)^2} \tag{2} $$
By equating open-loop response G1 of our DPLL to G2, we can find KL and KI in terms of ωn and ζ.
Equating G1 and G2:
$$ \frac{K_pK_LK_{nco}}{z-1} + \frac{K_pK_IK_{nco}}{(z-1)^2} = \frac{2\zeta\omega_nT_{s\_nco}}{z-1} + \frac{T_{s\_filt}T_{s\_nco}\omega_n^2}{(z-1)^2} $$
Solve for KL and KI:
$ K_pK_LK_{nco} = 2\zeta\omega_nT_{s\_nco} $ → $ K_L = 2\zeta\omega_n/K_p\; * \; T_{s\_nco}/K_{nco} $ (3)
$ K_pK_IK_{nco} = T_{s\_filt}T_{s\_nco}\omega_n^2 $ → $ K_I = T_{s\_filt}\omega_n^2/K_p \; * \; T_{s\_nco}/K_{nco} $ (4)
A given DPLL design has defined values for Ts_filt,Ts_nco, Kp, and Knco. Given those values, KL and KI are uniquely determined by the choice of ωn and ζ. Note that the units of Kp are cycle-1. See Appendix D for an alternate form of the equations for KL and KI.
Computing the Closed-loop response
The closed loop phase response of the DPLL in Figure 2 is given by:
$$ CL(z) = \frac{Z[u]}{Z[ref\_phase]} = \frac{G_1}{1 + G_1} $$
Thus from equation 1,
$$ \frac{K_pK_LK_{nco}} {z-1} + \frac{K_pK_IK_{nco}} {(z-1)^2} $$
$ CL(z) = $ __________________________________
$$ 1 + \frac{K_pK_LK_{nco}} {z-1} + \frac{K_pK_IK_{nco}} {(z-1)^2} $$
$$ CL(z) = \frac {b_0 + b_1z^{-1}} {1 + a_1z^{-1} + a_2z^{-2}} \qquad (5) $$
Where
b0 = KpKLKnco
b1 = KpKIKnco - KpKLKnco
a1 = KpKLKnco – 2
a2 = 1 + KpKIKnco - KpKLKnco
Equation 5 is in the form of an IIR filter transfer function, which allows for straightforward computation of the time and frequency responses in Matlab.
Example
This example uses the same parameters as Example 2 in Part 1. We will compute KL and KI, then we will find the time and frequency response using CL(z). For this example, fs_nco = fs_filt = fs. The Matlab script is listed in Appendix A. The DPLL parameters are as follows. As you can see, not all of the parameters from the time domain model apply to the Z-domain model.
fs 25 MHz
Reference frequency NA
Initial reference phase NA
NCO initial frequency error NA
Knco 1/4096
Kp 2 cycle-1
fn 400 Hz loop natural frequency. fn = ωn/(2π)
ζ 1.0 loop damping coefficient
1. Find KL and KI
KL= 2*zeta*wn*Ts/(KP*Knco) % loop filter proportional gain KI= wn^2*Ts^2/(KP*Knco) % loop filter integral gain KL = 0.4118 KI = 2.0698e-005
2. Compute the time response to a step in the reference phase. Since CL(z) is in the form of a digital filter transfer function, we can find the time response using the Matlab "filter" function.
b0= KP*KL*Knco; b1= KP*Knco*(KI - KL); a1= KP*KL*Knco - 2; a2= 1 + KP*Knco*(KI - KL); b= [b0 b1]; % numerator coeffs a= [1 a1 a2]; % denominator coeffs x= ones(1,N); % step function y= filter(b,a,x); % step response pe= y-1; % phase error response
The phase error response is shown in Figure 5. Because this model is linear, the non-linear acquisition behavior we saw in the time-domain model of Part 1 (Figure 3.4) is missing. Thus we see that the Z-domain model is less capable than the time-domain model for computing the time response. Finally, one detail worth mentioning: the response has some overshoot. This is caused by the zero in CL(z). (An all-pole system would not have overshoot for ζ = 1).
3. Compute the frequency response CL(z).
u = 0:.1:.9; f= 10* 10 .^u; % log-scale frequencies f = [f 10*f 100*f 1000*f]; z = exp(j*2*pi*f/fs); % complex frequency z CL= (b0 + b1*z.^-1)./(1 + a1*z.^-1 + a2*z.^-2); % closed-loop response CL_dB= 20*log10(abs(CL)); semilogx(f,CL_dB),grid
The closed-loop frequency response is shown in Figure 6. Comparing this response to that of the equivalent continuous-time system in Figure B.2, we see that they match. Note the peak in the response occurs near the loop natural frequency of 400 Hz. The slope of the response in the stopband is -20 dB/decade.
Figure 5. Phase Error for unit-step change in reference phase. fn = 400 Hz, ζ = 1.0.
Figure 6. Closed-Loop Frequency Response. fn = 400 Hz, ζ = 1.0.
4. Plot the step response and the frequency response for different values of damping. Figure 7 shows the step response and Figure 8 shows the frequency response.
Figure 7. Step Response. fn = 400 Hz; ζ = 0.5 (blue), 1.0 (green), 2.0 (red)
Figure 8. Closed-Loop Frequency Response. fn = 400 Hz; ζ = 0.5 (blue), 1.0 (green), 2.0 (red)
Appendix A. Z-Domain model of DPLL with fn = 400 Hz
%pll_response_z2.m nr 5/24/16 % Digital 2nd order type 2 PLL % step response and closed loop frequency response Knco= 1/4096; % NCO gain KP= 2; % 1/cycles phase detector gain wn = 2*pi*400; % rad/s loop natural frequency fs = 25e6; % Hz sample rate zeta = 1; % damping factor Ts= 1/fs; % s sample time KL= 2*zeta*wn*Ts/(KP*Knco) % loop filter proportional gain KI= wn^2*Ts^2/(KP*Knco) % loop filter integral gain % Find coeffs of closed-loop transfer function of u/ref_phase % CL(z) = (b0 + b1z^-1)/(a2Z^-2 + a1z^-1 + 1) b0= KP*KL*Knco; b1= KP*Knco*(KI - KL); a1= KP*KL*Knco - 2; a2= 1 + KP*Knco*(KI - KL); b= [b0 b1]; % numerator coeffs a= [1 a1 a2]; % denominator coeffs % step response N= 100000; n= 1:N; t= n*Ts; x= ones(1,N); % step function y= filter(b,a,x); % step response pe = y – 1; % phase error response plot(t*1e3,pe),grid xlabel('ms'),ylabel('Phase Error = u/ref-phase -1'),figure %plot phase error % Closed-loop frequency response u = 0:.1:.9; f= 10* 10 .^u; % log-scale frequencies f = [f 10*f 100*f 1000*f]; z = exp(j*2*pi*f/fs); % complex frequency z CL= (b0 + b1*z.^-1)./(1 + a1*z.^-1 + a2*z.^-2); % closed-loop response CL_dB= 20*log10(abs(CL)); semilogx(f,CL_dB),grid xlabel('Hz'),ylabel('CL(z) dB')
Appendix B. 2nd order continuous-time system closed loop response in s
Figure B.1. 2nd order system in s with a zero in the closed-loop response
$ A(s) = 2\zeta\omega_n + \frac {\omega_n^2} {s} $ lead-lag filter
$ G(s) = \frac {1} {s} A(s) = \frac {2\zeta\omega_n} {s} + \frac {\omega_n^2} {s^2}$
$CL(s) = G/(1+G) $
$ CL(s) = \frac {2\zeta\omega_n + \omega_n^2} {s^2 + 2\zeta\omega_n + \omega_n^2} $
where
ωn= 2πfn = loop natural frequency
ζ= damping factor
Figure B.2. Closed-Loop Frequency Response. fn = 400 Hz, ζ = 1.0.
Appendix C. Converting H(s) to H(z)
This is a way to approximate H(s) when a system’s passband frequency range is much less than the sample frequency. We choose this method because it results in a block diagram and transfer function that have the same form as that of our DPLL in Figure 2.
The definition of z is:
z = exp(sTs)
where s is complex frequency and Ts is the sample time. If we approximate z by the first two terms in the Taylor series for ex, we have
z ~= 1 + sTs (1)
Here we are assuming 2πfTs << 1, or f/fs << 1/2π. For our examples, we have been using fn = 5 kHz or less and fs = 25 MHz. So fn/fs = .0002 << 1/2π.
Rearranging equation 1, we get
s ~= (z – 1)/Ts
To convert H(s) to H(z) we replace each occurrence of the variable s by (z – 1)/Ts.
Appendix D. Alternative formulae for loop filter coefficients
The gain block in front of the NCO has gain Knco. The output frequency of the NCO due just to Vtune is
f = Vtune*Knco*fs_nco
If we define Kv = Knco*fs_nco Hz,
then Knco can be replaced by Kv*Ts_nco in the formulae for KL and KI. So equations 3 and 4 become:
$ K_L = 2\zeta\omega_n/(K_pK_v) $
$ K_I = \omega_n^2T_{s\_filt}/(K_pK_v) $
Here, the units of Kp are cycle-1, which is consistent with Kv in Hz. Alternative units for Kp and Kv are radian-1 and rad/s, respectively.
References
1. Gardner, Floyd M., Phaselock Techniques, 3rd Ed., Wiley-Interscience, 2005, Chapter 4.
2. Rice, Michael, Digital Communications, a Discrete-Time Approach, Pearson Prentice Hall, 2009, Appendix C.
4. Rice, C.1.3
6/9/2016 Neil Robertson
- Comments
- Write a Comment Select to add a comment
I was wondering if this is right:
"To convert this to a useful Z-domain model, we replace the accumulators in the Loop Filter and NCO with the transfer function (z^-1)/(1 – z^-1)"I've done this many times and I can only get the equation 1/(1 – z^-1). Where does the numerator z^-1 come from??
Hi,
The numerator term z^-1 occurs if the delay element is in the forward path of the accumulators, as shown in Figure 1. If the delay element is in the feedback path, the numerator term is 1, as you mention.
Note that if the NCO accumulator has no forward delay, there is no delay in the PLL loop at all, which can cause timing problems in the real world.
regards,
Neil
Hi, Neil
Great thanks for your document. I am wondering whether the equation (5) should be something like below. Right?
CL(z)=(b_1 z^(-1)+b_2 z^(-2))/(1+a_1 z^(-1)+a_2 z^(-2) ) (5)
Yarn,
You may be right. Your equation's numerator could be rewritten as:
num = z^-1(b1 + b2z^-1)
or, using conventional subscripts:
num= z^-1(b0 + b1z^-1)
Compared to equation 5, this has an extra zero at z = 0, which corresponds to a delay of one sample. This would account for the unit delay in the NCO.
As a practical matter, I don't think it affects the response.
regards,
Neil
Hi, Neil
Yes, thanks. It just addes a sample delay which will not impact the loop dynamics.
To post reply to a comment, click on the 'reply' button attached to each comment. To post a new comment (not a reply to a comment) check out the 'Write a Comment' tab at the top of the comments.
Please login (on the right) if you already have an account on this platform.
Otherwise, please use this form to register (free) an join one of the largest online community for Electrical/Embedded/DSP/FPGA/ML engineers: