Bitácora · DCSS · Unidad 7

El techo del PLL se mide en nanosegundos

Unidad 7 · PLL · La latencia del lazo y el ancho de banda que deja

Un PLL corrige la fase del oscilador del receptor con lo que mide del error, y en un receptor digital esa corrección no llega en el acto: entre que el detector ve el error y que el oscilador lo corrige pasan varios ciclos de reloj, porque el hardware procesa en etapas. Esa demora es la latencia del lazo. Qué son el filtro de lazo y sus constantes Kp y Ki está en el ensayo anterior y en el PLL.

El lazo del script de la clase, sin latencia, no tiene techo: se le puede multiplicar el ancho de banda por mil y sigue estable. El techo aparece con el retardo de la realimentación, y es chico. Con Kp = 0,005 y Ki = Kp/100 el lazo aguanta 85 ciclos de latencia y con 86 se cae: a 16 GHz son 5,3 nanosegundos, contra 92 ns que tarda en asentarse. Y el techo no depende de la tasa de símbolo. Con la forma del lazo de la clase, el ancho de banda máximo multiplicado por la latencia en segundos da 0,095, a 16 GBd o a cualquier otra tasa: la frecuencia natural más alta que se puede pedir es una décima de la inversa del retardo.

Lo que sigue tiene cinco partes: por qué sin latencia no hay techo y con un ciclo el techo queda lejísimos; la tabla de la latencia y el umbral exacto; el margen de fase, que lo predice con una resta; cómo escala el techo, que es como 1/Lat; y cuánto retardo tiene un receptor real y qué ruido de fase deja seguir.

01 · Sin latencia no hay techo

El script arma el lazo con un filtro PI, un NCO que acumula fase y un retardo puro en la realimentación. La pieza por pieza, con la transferencia derivada a mano, está en el PLL en tiempo discreto. Lo que importa acá es la forma final:

F(z)=G(z)1+G(z)z−Lat,G(z)=(Kp+Kizz−1)zz−1

Con Lat = 0 los polos son las raíces de (1+Kp+Ki)z2−(2+Kp)z+1, y quedan adentro del círculo para cualquier par de ganancias positivas; la cuenta está en el PLL en tiempo discreto. Medido con la misma forma del lazo —Kp por a y Ki por a2, que sube ωn en un factor a sin tocar ζ—, el polo más grande va de 0,9975 con a=1 a 0,9736 con 10, 0,7071 con 100 y 0,1336 con 1000. Más ganancia, más estable.

Un ciclo de latencia ya pone techo, y se calcula a mano. Con Lat = 1 el polinomio, sacando el polo en el origen, es z2+(Kp+Ki−2)z+1−Kp. Evaluado en z=−1 da 4−2Kp−Ki, que tiene que ser positivo. Con Kp=0,005a y Ki=5·10−5a2 la condición es a2+200a<80000, o sea a<200 exacto: una frecuencia natural de 3,6 GHz. Hay techo, pero doscientas veces arriba del lazo de la clase. Con un ciclo nadie lo toca.

02 · La tabla de la latencia, y el umbral

El script trae Lat = 0. Subiéndolo, con todo lo demás como está, el escalón de fase de un radián da esto:

Lat01251020508586100
en ns00,060,130,310,631,253,135,315,386,25
sobrepico39,72 %40,14 %40,58 %41,93 %44,37 %50,02 %75,14 %123,44 %inestableinestable
|polo| mayor0,9974850,9974970,9975100,9975490,9976230,9978000,9986200,9999961,0000351,000555

Los primeros veinte ciclos casi no se notan: diez puntos de sobrepico. Lo que la tabla no dice a simple vista es cuán abrupto es el final. Con 85 ciclos el lazo es estable y con 86 no, y el sobrepico de 85 ya es 123 %: la fase estimada se pasa más del doble del salto antes de volver. El polo mayor, que con cero latencia estaba a 0,0025 del círculo, con 85 está a 4·10−6. La latencia no lo empuja de a poco: los primeros cincuenta ciclos lo corren 0,0011, y los treinta y cinco siguientes, lo que queda.

Puesto en tiempo, contra la escala propia del lazo: el asentamiento del escalón sin latencia son 1477 muestras, 92 ns. Un retardo diecisiete veces más corto que eso lo tumba.

03 · El margen de fase lo predice con una resta

El lazo abierto sin latencia, G, cruza ganancia unitaria en Ωc=0,008012 rad/muestra —20,40 MHz a 16 GHz— con un margen de fase de 39,07°. Un retardo z−Lat tiene módulo 1 y fase −Ω·Lat: no mueve el cruce, sólo le resta fase. Cada ciclo se come Ωc radianes, 0,459°, y el lazo se cae cuando el margen llega a cero:

Latmáx=PM0Ωc=0,68190,008012=85,11

Las raíces dicen 85 y el margen dice 85,11. Es el mismo número por dos caminos que no comparten una cuenta: uno factoriza el polinomio característico con latencia, el otro evalúa G en un solo punto del círculo. Y la resta explica la forma de la tabla: el margen baja lineal con la latencia, pero el sobrepico depende del margen como la cuerda 2sen(PM/2) que separa a G del punto −1, y esa cuerda se achica sin aviso cerca de cero. Por eso los primeros diez ciclos cuestan 4,65 puntos de sobrepico, y los cinco que van de 80 a 85 cuestan 8,10.

La resta también dice qué compra latencia. Con Kp fijo y Ki=Kp/r, el umbral es 4 ciclos con r=4, 10 con 10, 24 con 25, 85 con 100 y 208 con 400, que es el ζ=0,707 de libro. Más amortiguamiento es más margen, y más margen aguanta más retardo; pero subir r a Kp fijo también baja ωn a la mitad, así que esa fila mezcla las dos cosas. Para separarlas hay que mover el ancho de banda sin tocar la forma, que es lo que sigue.

04 · El techo escala como 1/Lat, y la tasa de símbolo se cancela

Escalando Kp por a y Ki por a2, la respuesta es la misma curva con el eje de tiempo comprimido a veces: ζ=0,3536 fijo y fn=a·18,01 MHz. Para cada latencia se busca por bisección el a más grande con todos los polos adentro:

Laten nsa máxfn máxa máx · Lat
10,063200,03601 MHz200,0
20,12566,671200 MHz133,3
50,31319,91358,5 MHz99,55
100,6259,138164,5 MHz91,38
201,254,38678,98 MHz87,73
503,131,71330,85 MHz85,66
855,311,00118,03 MHz85,11
1006,250,850015,30 MHz85,00
20012,50,42337,622 MHz84,66
50031,30,16893,042 MHz84,47
100062,50,08441,520 MHz84,40

De veinte ciclos para arriba el producto de la última columna se queda entre 87,7 y 84,4: el techo es 1/Lat, con un 4 % de diferencia entre 20 y 1000 ciclos. Abajo de eso se despega, porque con dos o cinco ciclos el cruce ya no está en frecuencias bajas y la cuenta del margen deja de ser lineal; pero ahí el techo está en cientos de megahertz y no limita nada.

La cuenta de la sección anterior dice por qué. Con la forma fija, el cruce escala con a y el margen sin latencia no se mueve, así que el lazo se cae cuando a·Ωc·Lat=PM0. Pasado a hertz y con la latencia en segundos, τ=Lat/fs:

fn,máx·τ=PM02π·fnfc=0,1085·18,0120,40=0,096

Las bisecciones dan 0,0958 con 85 ciclos y 0,0950 con mil. Lo que no aparece en la fórmula es fs. Duplicar la tasa de símbolo no sube el techo si el retardo en nanosegundos es el mismo: duplica los ciclos de latencia y deja el producto quieto. El techo lo fija cuánto tarda la corrección en volver, medido con un reloj de pared.

Mirarlo

El widget arranca en el lazo de la clase sin latencia: 39,72 % de sobrepico, 39,07° de margen y nada que ver. Subí el ancho de banda primero, todo lo que quieras: el escalón se comprime y el lazo no se cae. Volvé a 18 MHz y subí la latencia. Abajo, la curva es el techo para cada latencia y el punto es tu lazo: cuando cruza la curva, se cae.

Widget Ancho de banda contra retardo — arriba, la fase estimada ante un escalón de fase de 1 rad, con el tiempo en nanosegundos; la barra al pie es el retardo de la realimentación en la misma escala. Abajo, la frecuencia natural máxima estable para cada latencia, con la forma del lazo de la clase (ζ = 0,354), y tu lazo como punto.
retardo — techo para esta latencia — margen de fase — sobrepico — fn·τ —

Con el ancho de banda de la clase, el punto cruza la curva entre 85 y 86 ciclos. Con 36 MHz, el doble, cruza en la mitad: entre 42 y 43. Y en cualquier lugar de la curva la lectura fn·τ del techo marca lo mismo, alrededor de 0,095. La curva de abajo es una sola hipérbola: frecuencia por tiempo, constante.

05 · Cuánta latencia tiene un receptor de verdad

A 16 GBd ningún circuito digital procesa una muestra por ciclo de reloj: el DSP trabaja con P muestras en paralelo por ciclo, a un reloj de fs/P. Si el camino del detector de fase al NCO y de vuelta atraviesa c ciclos de ese reloj —registros de pipeline, el multiplicador, el filtro—, la latencia en muestras es

Lat=c·P,τ=cfs/P

Cuántas muestras van en paralelo y cuántos registros hay en el camino depende del chip, y ni la filmina ni el script dan un número para ninguno de los dos: P y c quedan como parámetros. Lo que sí sale sin suponer nada es cuántos ciclos de reloj le entran al lazo de la clase, ⌊85/P⌋:

muestras en paraleloreloj del DSPciclos de reloj que aguantatecho con un solo ciclo
161 GHz599,73 MHz
32500 MHz248,63 MHz
64250 MHz124,02 MHz
128125 MHzninguno11,94 MHz

La última columna es el techo con Lat = P, medido igual que la tabla de la sección anterior. Con 64 muestras por ciclo, el lazo de la clase admite un solo registro en toda la realimentación; con 128, ni uno. Y como la tasa de símbolo se cancela, la cuenta se puede leer directo en el reloj: el techo es 0,095·freloj/c. Un lazo que tarda diez ciclos de un reloj de 250 MHz —640 muestras a 16 GBd— no puede pasar de 2,38 MHz de frecuencia natural, sea cual sea el baudio.

Para el lazo óptico de fase, que es otra implementación del mismo problema, Noé toma como realista un retardo de cien duraciones de símbolo (Journal of Lightwave Technology, 2005, en el trabajo que propone recuperar la portadora sin lazo). Cien ciclos es la última columna de la tabla de la sección 02: ahí el lazo de la clase ya es inestable. Ésa es la razón que da para abandonar la realimentación, y es la misma que asoma en la filmina cuando, para el ruido de fase, nombra la búsqueda ciega de fase y no un PLL.

06 · Qué ruido de fase deja seguir

El techo de estabilidad no es el ancho de banda que conviene: en el techo el lazo oscila para siempre. Lo que conviene depende de lo que haya que seguir. Para el ruido de fase de un oscilador, el modelo de siempre es un paseo al azar: la fase recibe en cada muestra un incremento gaussiano de varianza 2πΔνTs, con Δν el ancho de línea. El error que ve el detector, θ−z−Latφ, tiene entonces varianza

σe2=2πΔνTs·J,J=∑ns2[n]

donde s[n] es el error ante un escalón de fase. Un lazo lento deja crecer el paseo antes de corregirlo; uno rápido, cerca del techo, amplifica con su sobrepico. Hay un a que minimiza J, y se busca con fminbnd para cada latencia. Con Δν=1 MHz, que es el ancho de línea de los láseres DFB comerciales que cita el mismo trabajo:

Laten nsfn óptimasobrepico ahíJJ / Latσe con 1 MHz
50,31173,6 MHz66,84 %21,984,3965,32°
100,6379,50 MHz66,68 %48,124,8127,88°
201,2538,13 MHz66,59 %100,45,02211,38°
503,1314,89 MHz66,54 %257,45,14818,22°
855,318,70 MHz66,52 %440,55,18323,83°
1006,257,38 MHz66,52 %519,05,19025,87°
20012,53,68 MHz66,51 %10425,21136,65°

Tres cosas en la misma tabla. La primera: el óptimo está siempre a la mitad del techo —a·Lat entre 42,4 y 40,7 de veinte ciclos para arriba, contra 85— y con el mismo sobrepico, 66,5 %, que es mucho más que el 39,72 % de la clase. La segunda: J/Lat tiende a 5,2, así que el error mínimo es

σe,mín2≈2π·5,2·Δντ≈33Δντ

y otra vez manda la latencia en segundos: ningún ancho de banda baja el error de fase por debajo de un piso que crece como la raíz del retardo. La tercera es la que pesa: con un láser de 1 MHz y los cien símbolos de retardo de Noé, el mejor lazo posible con esta forma deja casi 26° de error de fase eficaz, y en una QPSK la frontera de decisión está a 45°. El lazo de la clase tal cual, sin latencia, deja 11,28° con el mismo láser: su ancho de banda está pensado para un lazo sin retardo, y ningún hardware da un lazo sin retardo.

El ruido aditivo tira para el otro lado: pide menos ancho de banda, no más. Las fórmulas de Bn y del compromiso entre adquisición y tracking están en ancho de banda, adquisición y tracking.

07 · El análisis en MATLAB

El lazo de phase_system.m tal cual, con la latencia barrida: la tabla, el umbral, el margen, el techo contra la latencia, el barrido de Ki = Kp/r y el ruido de fase. Lo que figura como comentario es la salida real de correrlo en R2026a.

%% 0. El lazo de phase_system.m, tal cual
fs = 16e9; Ts = 1/fs; z = tf('z', Ts);
Kp = 0.005; Ki = Kp/100;
L = Kp + Ki*z/(z-1);  NCO = z/(z-1);  G = L*NCO;

%% 1. Sobrepico contra Lat (H = z^-Lat en la realimentación)
for Lat = [0 1 2 5 10 20 50 100]
    F = feedback(G, z^-Lat);
    p = max(abs(pole(F)));
    if isstable(F)
        s = stepinfo(F);
        fprintf('Lat = %3d   sobrepico %6.2f %%   |polo| %.6f\n', Lat, s.Overshoot, p);
    else
        fprintf('Lat = %3d   inestable            |polo| %.6f\n', Lat, p);
    end
end

%% 2. El umbral exacto, y el margen de fase que lo predice
Lat = 0;
while isstable(feedback(G, z^-(Lat+1))), Lat = Lat + 1; end
fprintf('última Lat estable: %d (%.4f ns)\n', Lat, Lat*Ts*1e9);
for Lat = [80 85 86]
    F = feedback(G, z^-Lat);  s = stepinfo(F);
    y = filter([Kp+Ki, -Kp], [1 -2 1 zeros(1, Lat)] + [zeros(1, Lat) Kp+Ki, -Kp, 0], ones(1, 4e5));
    fprintf('Lat = %d: estable %d, |polo| %.6f, stepinfo %.2f %%, con filter %.2f %%\n', ...
        Lat, isstable(F), max(abs(pole(F))), s.Overshoot, 100*(max(y) - 1));
end
s = stepinfo(feedback(G, 1));
fprintf('asentamiento sin latencia: %.0f muestras = %.1f ns\n', s.SettlingTime/Ts, s.SettlingTime*1e9);
[~, Pm, ~, Wcp] = margin(G);
fprintf('margen %.2f° en %.2f MHz; PM/Ωc = %.2f muestras\n', Pm, Wcp/2/pi/1e6, deg2rad(Pm)/(Wcp*Ts));

%% 3. Sin latencia no hay techo: la misma forma, a veces más rápida
for a = [10 100 1000]
    Fa = feedback((a*Kp + a^2*Ki*z/(z-1))*NCO, 1);
    fprintf('Lat = 0, a = %4d: estable %d, |polo| %.4f\n', a, isstable(Fa), max(abs(pole(Fa))));
end

%% 4. El techo contra la latencia: Kp·a y Ki·a², misma ζ
% Polinomio característico en potencias de z: (z-1)² z^Lat + (Kp+Ki) z - Kp, por z.
car  = @(a, Lat) [1 -2 1 zeros(1, Lat)] + [zeros(1, Lat) a*Kp + a^2*Ki, -a*Kp, 0];
esta = @(a, Lat) max(abs(roots(car(a, Lat)))) < 1;
fn0 = sqrt(Ki)*fs/(2*pi);
fprintf('\n  Lat     ns     a_max   fn_max [MHz]   a_max·Lat\n');
for Lat = [1 2 5 10 16 20 32 50 64 85 100 128 200 500 640 1000]
    lo = 1e-3; hi = 1e3;
    for k = 1:45, m = sqrt(lo*hi); if esta(m, Lat), lo = m; else, hi = m; end, end
    fprintf('%5d %7.3f %9.4f %12.3f %11.2f\n', Lat, Lat*Ts*1e9, lo, lo*fn0/1e6, lo*Lat);
end

%% 5. Ki = Kp/r: el amortiguamiento compra latencia
for r = [4 10 25 100 400]
    cr = @(Lat) [1 -2 1 zeros(1, Lat)] + [zeros(1, Lat) Kp + Kp/r, -Kp, 0];
    Lat = 0; while max(abs(roots(cr(Lat+1)))) < 1, Lat = Lat + 1; end
    fprintf('r = %3d   ζ = %.3f   fn = %.2f MHz   última Lat estable %d\n', ...
        r, Kp/(2*sqrt(Kp/r)), sqrt(Kp/r)*fs/(2*pi)/1e6, Lat);
end

%% 6. Ruido de fase de Wiener: el mejor ancho de banda para cada Lat
% e = θ - z^-Lat φ; con θ de incrementos de varianza 2πΔν·Ts,
% var(e) = 2πΔν·Ts·J, J = suma de la respuesta al escalón del error al cuadrado.
J = @(a, Lat) sum(filter([1 -2 1], car(a, Lat), ones(1, round(60000/a))).^2);
sobre = @(a, Lat) 100*(max(filter([a*Kp + a^2*Ki, -a*Kp], car(a, Lat), ones(1, round(60000/a)))) - 1);
fprintf('\n  Lat   fn_opt [MHz]   a·Lat   sobrepico        J     J/Lat   σ con Δν = 1 MHz\n');
for Lat = [5 10 20 50 85 100 200 500]
    lo = log10(5/Lat); hi = log10(80/Lat);          % el óptimo cae en a·Lat ≈ 40
    la = fminbnd(@(x) J(10^x, Lat), lo, hi);  a = 10^la;
    Jm = J(a, Lat);
    fprintf('%5d %12.2f %7.2f %9.2f %% %9.2f %8.3f %8.2f°\n', Lat, a*fn0/1e6, a*Lat, sobre(a, Lat), ...
        Jm, Jm/Lat, rad2deg(sqrt(2*pi*1e6*Ts*Jm)));
end
fprintf('lazo de clase, Lat = 0: J = %.2f, σ = %.2f°\n', J(1, 0), rad2deg(sqrt(2*pi*1e6*Ts*J(1, 0))));

% Lat =   0   sobrepico  39.72 %   |polo| 0.997485
% Lat =   1   sobrepico  40.14 %   |polo| 0.997497
% Lat =   2   sobrepico  40.58 %   |polo| 0.997510
% Lat =   5   sobrepico  41.93 %   |polo| 0.997549
% Lat =  10   sobrepico  44.37 %   |polo| 0.997623
% Lat =  20   sobrepico  50.02 %   |polo| 0.997800
% Lat =  50   sobrepico  75.14 %   |polo| 0.998620
% Lat = 100   inestable            |polo| 1.000555
% última Lat estable: 85 (5.3125 ns)
% Lat = 80: estable 1, |polo| 0.999796, stepinfo 115.34 %, con filter 115.34 %
% Warning: Simulation did not reach steady state. Please specify YFINAL if this system is stable and eventually settles.
% Lat = 85: estable 1, |polo| 0.999996, stepinfo NaN %, con filter 123.44 %
% Warning: Simulation did not reach steady state. Please specify YFINAL if this system is stable and eventually settles.
% Lat = 86: estable 0, |polo| 1.000035, stepinfo NaN %, con filter 143129527.05 %
% asentamiento sin latencia: 1477 muestras = 92.3 ns
% margen 39.07° en 20.40 MHz; PM/Ωc = 85.11 muestras
% Lat = 0, a =   10: estable 1, |polo| 0.9736
% Lat = 0, a =  100: estable 1, |polo| 0.7071
% Lat = 0, a = 1000: estable 1, |polo| 0.1336
%   Lat     ns     a_max   fn_max [MHz]   a_max·Lat
%     1   0.062  200.0000     3601.265      200.00
%     2   0.125   66.6667     1200.422      133.33
%     5   0.312   19.9093      358.493       99.55
%    10   0.625    9.1378      164.539       91.38
%    16   1.000    5.5385       99.729       88.62
%    20   1.250    4.3865       78.984       87.73
%    32   2.000    2.7009       48.633       86.43
%    50   3.125    1.7133       30.850       85.66
%    64   4.000    1.3339       24.019       85.37
%    85   5.312    1.0013       18.030       85.11
%   100   6.250    0.8500       15.304       85.00
%   128   8.000    0.6629       11.936       84.85
%   200  12.500    0.4233        7.622       84.66
%   500  31.250    0.1689        3.042       84.47
%   640  40.000    0.1319        2.376       84.44
%  1000  62.500    0.0844        1.520       84.40
% r =   4   ζ = 0.071   fn = 90.03 MHz   última Lat estable 4
% r =  10   ζ = 0.112   fn = 56.94 MHz   última Lat estable 10
% r =  25   ζ = 0.177   fn = 36.01 MHz   última Lat estable 24
% r = 100   ζ = 0.354   fn = 18.01 MHz   última Lat estable 85
% r = 400   ζ = 0.707   fn = 9.00 MHz   última Lat estable 208
%   Lat   fn_opt [MHz]   a·Lat   sobrepico        J     J/Lat   σ con Δν = 1 MHz
%     5       173.56   48.19     66.84 %     21.98    4.396     5.32°
%    10        79.49   44.15     66.68 %     48.12    4.812     7.88°
%    20        38.13   42.35     66.59 %    100.43    5.022    11.38°
%    50        14.89   41.33     66.54 %    257.39    5.148    18.22°
%    85         8.70   41.06     66.52 %    440.51    5.183    23.83°
%   100         7.38   41.00     66.52 %    519.00    5.190    25.87°
%   200         3.68   40.84     66.51 %   1042.21    5.211    36.65°
%   500         1.47   40.74     66.50 %   2611.85    5.224    58.03°
% lazo de clase, Lat = 0: J = 98.76, σ = 11.28°

Tres detalles que muerden:

  1. margin(G) con G definido sobre tf('z', Ts) devuelve la frecuencia de cruce en rad/s, no en rad/muestra: hay que multiplicarla por Ts antes de dividir el margen. Sin eso el cociente da 5,3·10−9, que son los segundos y no las muestras.
  2. Para barrer latencias de cientos o miles de ciclos no hace falta armar feedback(G, z^-Lat): el polinomio característico (z−1)2zLat+(Kp+Ki)z−Kp con roots da los mismos polos y es directo.
  3. stepinfo con Lat = 85 devuelve el sobrepico en NaN y avisa que la simulación no llegó al régimen, aunque isstable diga que el lazo es estable: con el polo a 4·10−6 del círculo, el transitorio dura más que la ventana que elige solo. El 123,44 % sale de filter con cuatrocientas mil muestras.

Para tener a mano

  1. Sin latencia, el lazo de la clase es estable con cualquier ganancia. Con un ciclo el techo existe pero está en a<200 exacto, 3,6 GHz de frecuencia natural.
  2. Con Kp = 0,005 y Ki = Kp/100 el lazo aguanta 85 ciclos y con 86 se cae: 5,3 ns a 16 GHz, diecisiete veces menos que su propio asentamiento. Con 85 el sobrepico ya es 123 %.
  3. El margen de fase lo predice: 39,07° en 20,40 MHz, cada ciclo resta Ωc = 0,459°, y PM0/Ωc=85,11.
  4. Con la forma fija, el techo escala como 1/Lat desde unos veinte ciclos: fn,máx·τ≈0,095. La tasa de símbolo no aparece: el techo lo pone el retardo en segundos.
  5. Con P muestras en paralelo y c ciclos de pipeline, Lat = c·P. Con 64 en paralelo, el lazo de la clase admite un solo registro en la realimentación.
  6. Más amortiguamiento compra latencia: Ki=Kp/400 aguanta 208 ciclos, aunque con la mitad de ωn.
  7. Contra ruido de fase, el mejor ancho de banda es la mitad del techo y el error mínimo crece como Δντ: con 1 MHz de ancho de línea y cien símbolos de retardo, 25,87° eficaces.
← Anterior Siguiente → Inicio