Bitácora · DCSS · Concepto

El PLL

Unidad 7 · PLL · para qué hace falta, los tres bloques, qué es estar enganchado, el modelo equivalente de fase y las transferencias F(s) y E(s)

Un PLL (phase-locked loop, lazo de enganche de fase) es un lazo realimentado que genera su propia sinusoide y la va corrigiendo hasta que su fase sigue a la de una sinusoide de entrada. Tiene tres bloques: un detector que mide la diferencia de fase, un filtro que decide cuánto corregir y un oscilador que aplica la corrección. En el receptor es la herramienta para lo único que el ecualizador no arregla: que el oscilador local y el reloj del receptor no son los del transmisor. Analizado con fases en lugar de señales, es un sistema lineal con dos transferencias, F(s) para la fase que copia y 1−F(s) para la que deja como error, y se comporta como un pasabajos de fase.

01 · Lo que la cadena todavía no resuelve

La cadena de la Unidad 6 termina en un ecualizador adaptativo que abre el ojo, y todo lo que mide supone dos cosas que en un receptor de verdad no pasan. Que el oscilador local (LO) que baja la señal a banda base está exactamente a la frecuencia y en la fase de la portadora del transmisor. Y que el ADC muestrea con el mismo reloj que usó el transmisor para sacar los símbolos. Son osciladores distintos en equipos distintos: nunca coinciden, y además se corren con la temperatura y el tiempo. La filmina de introducción repasa la cadena entera, de ak a a^k, y ordena lo que queda por resolver:

problemade dónde saleremedio en la filmina
ruidocanal y receptorminimizarlo; FEC (redundancia)
interferencia intersímboloel canal recorta la bandaecualizador (FSE)
portadorael LO no coincide con la portadoraFCR; para el ruido de fase, BPS y CPR
sincronismoel reloj del ADC no coincide con el del transmisortiming recovery (PLL)

Las dos filas de abajo son el mismo problema: seguir una fase que se mueve y que el receptor no controla. La de portadora es la fase del LO contra la de la portadora; la de sincronismo, la fase del reloj de muestreo contra la del reloj de símbolos. Para la segunda la filmina ya escribe el nombre de la herramienta, y la primera es lo mismo: el FCR (fine carrier recovery, recuperación fina de portadora) es un PLL que corre una vez por símbolo, y es el lazo que modela el script de la clase, con fs=BR «para el FCR», dice su comentario. Los scripts de la Unidad 6 no tienen este problema porque no lo simulan: la señal no llega girada, y por eso el del CMA anuncia que ecualiza «sin FCR» (el algoritmo CMA).

02 · El error de fase y el de frecuencia, en la constelación

Después de bajar a banda base con un LO corrido, cada símbolo llega multiplicado por un fasor. Es la cuenta de la filmina, ak por una exponencial compleja con la fase del LO:

yk=akejθk

con θk la diferencia entre la fase de la portadora y la del LO en el instante del símbolo k. Multiplicar por ejθk no cambia el módulo: gira el símbolo un ángulo θk alrededor del origen. Hay dos casos, y son las dos entradas con las que la filmina prueba el lazo.

Un error de fase fijo, θk=θ0: el LO está a la frecuencia justa pero corrido en fase. La constelación entera aparece girada θ0, y quieta. Un slicer de QPSK decide por cuadrante, y los puntos están a 45° de los ejes, así que sin ruido aguanta cualquier |θ0|<45°; con ruido, el margen que se come el giro es margen que le falta al ruido. En fase es un escalón: θ(t)=θ0u(t).

Un error de frecuencia, θk=θ0+ω0k: el LO está a otra frecuencia. Ahora la fase crece sin parar y la constelación gira todo el tiempo, ω0 radianes por símbolo. Con ω0=4·10−3 rad por símbolo —a los 16 GBd del script, ω0fs/2π=10,19 MHz de corrimiento— da una vuelta entera cada 2π/ω0=1571 símbolos, y arrancando sin error de fase pasa los 45° en el símbolo 197. No hay giro chico que aguantar: tarde o temprano, todas las decisiones están en el cuadrante equivocado. En fase es una rampa, θ(t)=ω0t: un corrimiento de frecuencia se escribe como una fase que crece linealmente, y así lo trata todo el análisis.

Hay un tercer efecto, el ruido de fase del LO, que en lugar de girar la constelación la desparrama en arcos. La filmina le asigna otros remedios (BPS y CPR), y quedan para cuando lleguen. La pregunta que deja abierta la filmina, si un giro de π/2 se puede detectar, tiene una respuesta incómoda: una QPSK girada 90° es la misma QPSK, y nada en la constelación lo delata. El CMA, que no ve la fase, cae justo ahí (el algoritmo CMA), y la ambigüedad que eso trae al detector está en el detector de fase.

03 · Los tres bloques

Con la notación de la filmina, la entrada y la salida son dos sinusoides a la misma frecuencia ωv, cada una con su fase:

y(t)=Aycos(ωvt+θ(t)),v(t)=Avcos(ωvt+φ(t))

Todo lo que la entrada tiene de distinto —un corrimiento de fase, un corrimiento de frecuencia— está escrito adentro de θ(t), y todo lo que el lazo hace para seguirlo, adentro de φ(t). El PLL, dice la filmina, es un sistema que «trackea» la frecuencia y la fase de la sinusoide de entrada.

El signo de la realimentación es el que hace que el lazo corrija en lugar de escaparse. Si el VCO está atrasado, θ−φ>0, el detector entrega una tensión positiva, el VCO acelera y φ crece hacia θ; si está adelantado, al revés.

04 · Enganchado

La filmina define el estado phase-locked así: el PLL está enganchado si la fase de salida es la de entrada más una constante, φ(t)=θ(t)+cte, y entonces la frecuencia de salida es igual a la de entrada, en promedio. Dos cosas se leen de esa definición.

Enganchado no quiere decir error cero. Quiere decir error constante: la diferencia de fase dejó de crecer. En la constelación, que dejó de girar. Si la constante no es cero, la constelación queda quieta pero girada, como con un error de fase fijo. Que la constante termine en cero o no depende del filtro de lazo y de la entrada: ante una rampa, un filtro sólo proporcional engancha en frecuencia y deja un error de fase fijo, y un PI lo lleva a cero. Esa cuenta es la de el filtro de lazo.

Engancharse es un proceso. Desde un corrimiento de frecuencia, el lazo primero iguala la frecuencia (frequency lock) y después achica el error de fase (phase lock), y la filmina estima cuánto tarda cada etapa en función del ancho de banda del lazo (ancho de banda, adquisición y tracking). Todo el análisis lineal que sigue vale con el lazo enganchado: es ahí donde el error es chico y el detector se puede reemplazar por su recta. La filmina lo dice al empezar: se enfoca en el régimen permanente, con el lazo enganchado, usando sólo un análisis linealizado.

Simulación La constelación que deja de girar — una QPSK que llega con el LO corrido θ₀ en fase y ω₀ en frecuencia, y un tono piloto con el mismo corrimiento del que se engancha el PLL. A la izquierda, la salida desrotada en los últimos 200 símbolos; a la derecha, la fase de entrada θ y la del NCO φ, y abajo el error θ − φ. El lazo es el del script de la clase. Arranca abierto: el NCO no corrige nada.
error θ − φ en n — giro en los últimos 200 — corrección de frecuencia del NCO — dentro de ±1° desde — decisiones erradas en la ventana —

Con el lazo abierto, la nube de cada cuadrante es un arco: en 200 símbolos la constelación giró 200ω0 radianes, 45,8° con el valor de partida, y al mover n el arco recorre el círculo y las decisiones se ponen rojas cada vez que cruza un eje. El error de abajo es un diente de sierra: crece sin parar, y el detector lo ve módulo 360°. Con ω0=0 la constelación se queda quieta y girada θ0. Al cerrar el lazo, la fase del NCO arranca en cero y persigue a la de entrada, se pasa, vuelve, y termina corriendo pegada a ella con la misma pendiente. Con los valores de partida el error llega a 31,71° y queda dentro de ±1° desde el símbolo 1201; la corrección de frecuencia del NCO termina en ω0 exacto, que es lo que dice enganchado. Para ver la diferencia entre enganchar y seguir girando, conviene volver a n=0 con el lazo cerrado y avanzar de a poco: en los primeros cientos de símbolos la constelación todavía gira, y el giro se frena antes de que el error llegue a cero.

El lazo del widget es el del script de la clase —Kp=0,005, Ki=Kp/100, detector y NCO de ganancia 1— con la corrección aplicada al símbolo siguiente, que es lo mínimo que se puede construir: el NCO no puede desrotar el símbolo n con una fase que se calcula a partir del propio símbolo n. Ese símbolo de retardo sube el sobrepico del escalón de 39,72 % a 40,14 %; por qué, y qué pasa con más retardo, está en el PLL en tiempo discreto. El detector es el ideal de la filmina, la diferencia de fases módulo 360°. Barrida en MATLAB una grilla de θ0 entre −90° y 90° cada 15° y de ω0 entre 0 y 8·10⁻³ cada 0,5·10⁻³, el error nunca pasa de 90°, que es el θ0 inicial: el detector nunca da la vuelta, y la simulación es la transferencia lineal. Contra lsim en cinco de esos casos, la diferencia más grande es 2,6·10⁻¹³ rad.

05 · El modelo equivalente de fase

En el lazo de la sección 03 circulan cosenos a ωv, pero lo que el lazo controla es la fase, que cambia mucho más despacio. El modelo equivalente de fase de la filmina dibuja el mismo lazo con otras señales: entra θ(t), sale φ(t), y la frecuencia ωv desaparece porque es la misma en la entrada y en el VCO y se cancela en la resta. Cada bloque pasa a decir qué le hace a la fase:

Linealizar es lo que permite usar Laplace, y es la única aproximación. Mientras el error sea chico frente a la curva del detector, el lazo de abajo es exacto; cuando el error es grande —al engancharse desde lejos, o con un salto de ciclo— deja de valer, y el comportamiento lo decide la curva entera de W.

06 · Las dos transferencias, paso a paso

La filmina caracteriza el PLL con dos funciones: la transferencia F(s), de la fase de entrada a la de salida, y el error de fase E(s). Las dos salen del diagrama de arriba, con condiciones iniciales nulas.

Paso 1: el restador. El error es la entrada menos la salida, y la transformada de una resta es la resta de las transformadas:

E(s)=Θ(s)−Φ(s)

Paso 2: el camino directo. El error pasa por KPD, por L(s) y por KV/s, en serie, y las transferencias en serie se multiplican. Al producto la filmina lo llama G(s), la ganancia de lazo abierto:

Φ(s)=KPDL(s)KVs⏟G(s)E(s)

Paso 3: cerrar el lazo. Se reemplaza el error del paso 1 en el paso 2 y se despeja la salida:

Φ(s)=G(s)[Θ(s)−Φ(s)]⇒Φ(s)[1+G(s)]=G(s)Θ(s)

Es la realimentación de siempre, G/(1+GH), con H=1 porque la fase de salida vuelve entera al restador. Multiplicando arriba y abajo por s para sacar la fracción del VCO:

F(s)=Φ(s)Θ(s)=G(s)1+G(s)=KPDKVL(s)s+KPDKVL(s)

Paso 4: el error. Del paso 1, E(s)=Θ(s)−F(s)Θ(s). La transferencia del error es lo que la salida no copia:

E(s)Θ(s)=1−F(s)=11+G(s)=ss+KPDKVL(s)

Es la cuenta de la segunda filmina de dinámica, hecha desde el otro lado: ahí se parte del error y se lo despeja, acá se lo saca de F(s). Las dos funciones suman 1 en todas las frecuencias: lo que la salida no copia queda como error. Y la del error tiene una s en el numerador, un cero en continua, porque el VCO es un integrador: una fase que no cambia termina copiada sin error mientras KPDKVL(0)≠0. Qué pasa con una rampa, y por qué pide un integrador en el filtro, es el teorema del valor final aplicado a esta misma E(s): está en el filtro de lazo.

Con el filtro de la clase, el PI L(s)=Kp+Ki/s, el paso 3 da un sistema de segundo orden:

F(s)=KPDKVKps+KPDKVKis2+KPDKVKps+KPDKVKi=2ζωns+ωn2s2+2ζωns+ωn2

El amortiguamiento ζ y la frecuencia natural ωn salen de igualar coeficientes; con las constantes del script, tomando KPDKV=1 por muestra, ζ=0,3536 y fn=18,01 MHz. El lazo de segundo orden entero, con su transitorio, está en el filtro de lazo.

07 · Un pasabajos de fase

Pensada la fase de entrada como una suma de sinusoides de distintas frecuencias, F(s) dice cuánto de cada una copia el VCO. En continua vale 1: F(0)=KPDKVL(0)/KPDKVL(0), siempre que L(0)≠0. Las variaciones lentas de θ, el lazo tiene tiempo de corregirlas y las copia. Para las rápidas, el término s del denominador manda, F se va a cero, y no llega a reaccionar antes de que cambien de signo: quedan enteras en el error, porque 1−F→1. Es lo que la filmina resume en una línea: el PLL es un pasabajos operando en la zona lineal.

Con el lazo de la clase, F(s) evaluada en MATLAB sobre el círculo unidad:

frecuencia de la variación de fase|F|en dB
1 MHz1,0030,03 dB
16,35 MHz (el pico)1,7724,97 dB
30,34 MHz (bandwidth)0,708−3,01 dB
100 MHz0,135−17,40 dB
1 GHz0,013−37,82 dB

Hasta unos pocos megahertz el lazo copia la fase entera: es la deriva del LO, que se mueve despacio, y que el lazo tiene que seguir. Desde unos cientos de megahertz no copia casi nada: es el ruido que trae cada símbolo, que el lazo no tiene que seguir. Entre medio hay un pico de casi 5 dB, por debajo de fn: alrededor de 16 MHz el lazo no sólo copia la fase de entrada, la agranda. Es el mismo fenómeno que el sobrepico del escalón, visto en frecuencia. Dónde poner ese ancho es el compromiso central del PLL —ancho, engancha rápido; angosto, deja pasar menos ruido a la fase— y está en ancho de banda, adquisición y tracking.

08 · El análisis en MATLAB: phase_system.m, primera lectura

phase_system.m, el script de la clase, es el modelo equivalente de fase en tiempo discreto: no hay señales ni símbolos, sólo la fase que entra, la que sale y las transferencias entre ellas. El filtro de lazo es el PI con la integral hecha acumulador, Kp + Ki*z/(z-1); el VCO es un NCO, otro acumulador, z/(z-1); G = L*NCO es la ganancia de lazo abierto del paso 2, y feedback(G, H) hace la cuenta del paso 3, G/(1+GH), con realimentación negativa por omisión. KPD y KV no aparecen: valen 1 por muestra y quedan adentro de Kp y Ki. Abajo, el script corrido entero y sin tocar, seguido de las líneas que miden lo que el script dibuja y no imprime. Lo que figura como comentario es la salida real de correrlo en R2026a.

clear all
%close all

fs = 16e9; %GHz (fs = BR para el FCR)
Ts = 1/fs;
z = tf('z', Ts);

%%
% System modelling
Kp = 0.005;
Ki = Kp/100;

L = Kp + Ki*z/(z-1);
NCO = z/(z-1);
G = L*NCO;
Lat = 0;
H = z^-Lat;
F = feedback(G, H); %Funcion del PLL

%% Step response
figure
step(F)

%% Ramp response
figure
step(F*z/(z-1))
hold all
step(z/(z-1))

% %%
figure
pzmap(F)

%%
figure
bode(F)
hold all

%% Lo que el script dibuja y no imprime
si = stepinfo(F);
fprintf('sobrepico %.2f %%, asentamiento %.0f muestras, dcgain %.4f\n', si.Overshoot, si.SettlingTime/Ts, dcgain(F));
% sobrepico 39.72 %, asentamiento 1477 muestras, dcgain 1.0000
p = pole(F); c0 = zero(F);
fprintf('polos %.5f %+.5fj, |p| = %.5f, angulo %.5f rad\n', real(p(1)), abs(imag(p(1))), abs(p(1)), abs(angle(p(1))));
% polos 0.99746 +0.00658j, |p| = 0.99748, angulo 0.00660 rad
fprintf('ceros: '); fprintf('%.5f ', c0); fprintf('\n');
% ceros: 0.00000 0.99010
fprintf('bandwidth(F) = %.2f MHz\n', bandwidth(F)/2/pi/1e6);
% bandwidth(F) = 30.34 MHz
[gpk, wpk] = getPeakGain(F);
fprintf('pico de |F| = %.2f dB en %.2f MHz\n', 20*log10(gpk), wpk/2/pi/1e6);
% pico de |F| = 4.97 dB en 16.35 MHz

E = feedback(1, G);                       % el error, armado como lazo aparte
w = logspace(log10(2*pi*1e5), log10(2*pi*7.9e9), 400);
dE = max(abs(squeeze(freqresp(E, w)) - (1 - squeeze(freqresp(F, w)))));
fprintf('max |feedback(1,G) - (1 - F)| = %.2e\n', dE);
% max |feedback(1,G) - (1 - F)| = 1.19e-11
[nE, dEn] = tfdata(E, 'v'); fprintf('E num: '); fprintf('%.6g ', nE); fprintf('| den: '); fprintf('%.6g ', dEn); fprintf('\n');
% E num: 1 -2 1 | den: 1.00505 -2.005 1

n = (0:20000)'; th = 1e-3*n;              % rampa de fase de 1e-3 rad por muestra
ph = lsim(F, th, n*Ts); fprintf('rampa, PI: error final %.2e rad\n', th(end) - ph(end));
% rampa, PI: error final 7.99e-12 rad
ph = lsim(feedback(Kp*NCO, 1), th, n*Ts); fprintf('rampa, solo Kp: error final %.4f rad\n', th(end) - ph(end));
% rampa, solo Kp: error final 0.2000 rad

El script abre cuatro figuras, una por cada figure:

Lo que esta primera lectura deja afuera —qué es cada acumulador, por qué Lat = 0 no se puede construir y qué hace la latencia con el lazo, y cómo se pasa de s a z— está en el PLL en tiempo discreto. Los detalles que muerden en la primera corrida:

Para tener a mano

  1. El LO y el reloj del receptor nunca coinciden con los del transmisor. Seguir esa fase es el problema de la portadora (FCR) y el del sincronismo (timing recovery), y los dos se resuelven con un PLL.
  2. En la constelación, yk=akejθk: un error de fase fijo la gira y la deja quieta; un error de frecuencia la hace girar ω0 por símbolo, para siempre. En fase son un escalón y una rampa.
  3. Tres bloques: detector de fase, W(θ−φ)≈KPDe; filtro de lazo L(s), el que se diseña; VCO, que integra el control, KV/s.
  4. Enganchado: θ−φ constante, no necesariamente cero. La constelación deja de girar; que deje de estar girada depende del filtro.
  5. Modelo equivalente de fase: entra θ, sale φ, desaparece ωv, y el detector se linealiza alrededor de e≈0. Vale con el lazo enganchado.
  6. F(s)=KPDKVL(s)s+KPDKVL(s),E(s)Θ(s)=1−F(s)=ss+KPDKVL(s)
  7. El PLL es un pasabajos de fase: copia lo lento (la deriva del LO), deja como error lo rápido (el ruido). El lazo de la clase: −3 dB en 30,34 MHz, pico de 4,97 dB en 16,35 MHz.
  8. phase_system.m: feedback(G, H) es G/(1+GH); el error es feedback(1, G); la rampa es un escalón por z/(z-1), y su error se lee restando, no mirando la figura.
← Anterior Siguiente → Inicio
Relacionados El detector de fase El VCO y el NCO El filtro de lazo Ancho de banda, adquisición y tracking El PLL en tiempo discreto El transceptor con ecualizador adaptativo El algoritmo CMA La mitad de ζ deja pasar el mismo ruido El techo del PLL se mide en nanosegundos Ocho veces más rápido, sólo mientras el error da vueltas