Bitácora · DCSS · Unidad 7

Ocho veces más rápido, sólo mientras el error da vueltas

Unidad 7 · PLL · el compromiso entre adquisición y tracking, medido

El ancho de banda de ruido Bn es el número con el que se diseña un PLL: cuanto más ancho, más rápido sigue el lazo a una entrada que se mueve, y más ruido de la entrada deja pasar a la fase que estima. Cuando el oscilador del receptor arranca corrido en frecuencia, el lazo primero tiene que alcanzar esa frecuencia y recién después quedarse quieto en fase: eso es engancharse (ancho de banda, adquisición y tracking).

La filmina cierra el PLL con dos fórmulas que, puestas una al lado de la otra, parecen un regalo. El tiempo de enganche en frecuencia va como 1/Bn3 y la varianza del error de fase como Bn: duplicar el ancho de banda engancha ocho veces más rápido y paga sólo el doble de ruido. Simulado con el PI de la clase, un salto de 16 MHz y un barrido de Bn de dos órdenes de magnitud, el ocho está: duplicar Bn da 8,0 veces, y la fórmula acierta el tiempo dentro del 4 %. Pero sólo mientras el error de fase da vueltas enteras antes de quedarse quieto, y ahí da cientos o miles. A partir de Bn≈1,08Δf no da ninguna, la fórmula predice un tiempo para algo que no ocurre, y duplicar el ancho de banda compra entre 2,3 y 3,1 veces. La varianza, en cambio, se duplica en los dos lados. El cambio desparejo existe, pero sólo en la zona donde el lazo tarda.

01 · Las dos fórmulas

La filmina parte la adquisición en dos etapas: primero el enganche en frecuencia, donde el NCO se arrima a la frecuencia de la entrada, y después el enganche en fase, que es el transitorio lineal de siempre. Los tiempos se suman:

TLOCK≈TFL+TPL,TFL≈4(Δf)2Bn3,TPL≈1,3Bn

Y una vez enganchado, con un tono de potencia Pin y ruido blanco de densidad N0/2, la fase estimada tiembla con varianza

σθe2=N0BnPin

Con Bn en hertz, el ancho de banda equivalente de ruido del lazo. Qué es, cómo sale de ζ y ωn y cómo se eligen las constantes a partir de él está en el concepto del ancho de banda; el PI, el ζ y el transitorio, en el del filtro de lazo. Acá importa sólo una cuenta: los dos exponentes. Al duplicar Bn, TFL se divide por 23=8 y la varianza se multiplica por 2. Si las dos fórmulas valieran en todo el rango, achicar el ancho de banda sería carísimo y agrandarlo casi gratis. La pregunta es si valen.

02 · El lazo que se simula

El de la clase, con dos cambios que hacen falta para ver lo que las fórmulas describen. El filtro es el PI, con KPDKV=1 por muestra y las constantes de la receta de la filmina para cada Bn:

ωn=2Bnζ+1/(4ζ),Kp=2ζωn,Ki=ωn2

con ζ=1/2, que es el ζ para el que vale el 4 de la fórmula (sección 04). La muestra es la del script, fs = 16 GHz, y la entrada tiene un salto de frecuencia de Δf=16 MHz, o sea 10−3 ciclos por muestra.

El primer cambio es el detector. El modelo equivalente de fase usa uno lineal, KPD·e, y con un detector lineal el lazo nunca tiene que «enganchar en frecuencia»: responde a un salto de frecuencia con un transitorio que dura lo mismo para cualquier Δf. La etapa que mide TFL sólo existe con la curva S de verdad, así que el detector es el de producto, Im{re−jθ^}=senθe más ruido.

El segundo es el NCO. En phase_system.m es z/(z-1), sin retardo: la fase de la muestra n depende del error de la misma muestra, que a su vez depende de esa fase. Con un detector lineal eso se resuelve despejando; con un seno no se despeja, así que la simulación le pone al NCO una muestra de retardo. Con los Bn de acá eso no mueve nada: el ancho de banda integrado, ∑h2/2 sobre la respuesta al impulso del lazo cerrado, coincide con el que pide la receta dentro del 1,8 % hasta Bn=10−2 ciclos por muestra, y recién se despega a 10−1, donde la aproximación continua de la receta ya no corre.

03 · Qué quiere decir «enganchado»

Un tiempo de enganche es el instante a partir del cual algo deja de pasar, y antes de medir hay que decidir qué. Con un salto de frecuencia el error θe=θ−θ^ crece al principio sin parar: la entrada gira más rápido que el NCO, y cada vez que le saca 2π de ventaja el detector, que no distingue θe de θe+2π, vuelve a empezar. El error da vueltas enteras. Cuando el integrador del PI aprendió la frecuencia, deja de darlas y se asienta cerca de un múltiplo de 2π. Las dos métricas son:

  1. TFL, la última vuelta: el último instante en que el error está a más de π del múltiplo de 2π en el que termina. Antes de eso el error todavía puede irse a la vuelta siguiente; después, no.
  2. TLOCK, el enganche en fase: el último instante en que está a más de un umbral fijo, 1, 0,3 o 0,1 rad, de ese múltiplo.

Las dos tienen un umbral, y la guía pide barrerlo antes de creerle al número. Con Bn=0,1Δf y sin ruido, la última vuelta medida con π/2, π y 3π/2 da 4.136.525, 4.121.852 y 4.116.150 muestras, y el enganche a 1, 0,3 y 0,1 rad da 4.141.456, 4.146.091 y 4.160.006. Seis umbrales, seis números dentro del 1,1 %. Mientras el error da vueltas la métrica no depende del umbral, porque casi todo el tiempo se va en la etapa de las vueltas y el transitorio final es una propina.

El ruido es otra historia. Con un ruido que deja a la fase en régimen un desvío de 0,05 rad, el enganche a 0,1 rad está a dos desvíos y el ruido lo cruza para siempre: medido sobre registros de 0,75, 1,5 y 3 millones de muestras da 737.275, 1.495.181 y 2.998.432. El «tiempo de enganche» es el largo del registro. La última vuelta, sobre los mismos tres registros, da 480.718 las tres veces. Lo que sí hace el ruido es volver al tiempo una tirada: con ocho semillas la última vuelta va de 471.454 a 556.892 muestras, alrededor de las 506.874 que da sin ruido. Por eso la tabla que sigue se mide sin ruido, que es el caso que describe la fórmula, y por la última vuelta.

04 · Con vueltas, el tres se cumple

El barrido va de Bn=0,05Δf a 12,8Δf, duplicando, sin ruido. Los tiempos en muestras (a 16 GHz, 16.000 muestras son un microsegundo):

Bn/ΔfvueltasTFL medido4Δf²/Bn³TLOCK a 0,1 radduplicar: TFLduplicar: TLOCK
0,0522.16933.218.70232.000.00033.296.9848,068,00
0,12.7574.121.8524.000.0004.160.0068,137,99
0,2338506.874500.000520.3518,768,07
0,43957.87262.50064.48115,457,48
0,833.7457.8128.615—6,88
1,6009771.252—2,26
3,200122554—2,44
6,40015227—3,07
12,800274——

Las tres primeras filas son la tesis de la filmina, y mejor de lo que uno esperaría de una fórmula con «≈». En dos décadas y media de tiempo el cociente entre lo medido y 4(Δf)2/Bn3 va de 1,01 a 1,04, y duplicar el ancho de banda divide el tiempo por 8,0, con cualquiera de las dos métricas. El precio está en la segunda columna: con Bn=0,1Δf el error da 2.757 vueltas antes de quedarse, y la última vuelta llega a los 258 µs. Con dieciséis veces más ancho de banda el mismo salto se engancha en 78 ns, tres mil trescientas veces antes.

El 4, en cambio, no es una constante del PLL: es el de ζ=1/2. La forma de la que sale la fórmula es TFL≈(2πΔf)2/(2ζωn3), que pasada a Bn da 4,16 con ζ=0,707 y 8,33 con el ζ=0,354 de la clase; la simulación mide 4,1 y 8,3. Por qué el lazo de la clase tarda el doble con el mismo ruido está en la nota de su ζ. Para el exponente no cambia nada: es 3 en los dos.

05 · Sin vueltas, el tres desaparece

Las vueltas se acaban de a una: 3 con Bn=0,80Δf, 2 desde 0,84, 1 desde 0,94 y ninguna desde 1,08. De ahí para arriba el lazo es lineal en todo su recorrido: el error crece, llega a un máximo menor que π y vuelve. No hay enganche en frecuencia. La fórmula sigue dando un número —977 muestras con 1,6Δf— para una etapa que no ocurre.

Lo que queda es el transitorio de un lazo lineal con ζ fijo ante un salto de frecuencia, y ese tiene forma cerrada en lo que importa: el error es (Δω/ωn)g(ωnt), con g la misma curva para todo Bn. Duplicar el ancho de banda comprime la curva a la mitad en el tiempo y la achica a la mitad en altura. Con un umbral relativo a su propio pico, el tiempo se divide por 2 exacto; con un umbral fijo en radianes, un poco más, porque además la curva arranca más cerca del umbral. La tabla da 2,26, 2,44 y 3,07. El exponente del lado de arriba es 1, con una corrección logarítmica, y no 3.

En el medio, en el borde, el cociente se dispara: de 0,4Δf a 0,8Δf la última vuelta se adelanta 15,5 veces, porque pasar de 39 vueltas a 3 es más que el ocho. Esa fila depende de la métrica —con el enganche a 0,1 rad da 7,48— y no hay que leerle la cifra: lo que dice es que la transición entre los dos regímenes no es suave, se cae de golpe cuando las vueltas llegan a cero.

Del otro lado tampoco hay un borde. El rango de captura de la filmina, (2π2ζ)Bn, da 6,28Bn con este ζ, y la primera fila de la tabla está tres veces más allá, con Δf=20Bn: engancha igual, después de 22.169 vueltas. Con un integrador que no pierde, el rango no tiene techo; tiene precio, y el precio es el cubo.

06 · La varianza se duplica en los dos lados

La otra mitad del compromiso se mide con el lazo ya enganchado, Δf=0, y ruido complejo de varianza σw2=1 por muestra. Con potencia unitaria eso hace N0Bn/Pin igual a Bn en ciclos por muestra. Cuatro semillas por punto:

Bn [ciclos/muestra]σ² medida [rad²]medida / N0Bn/PinBn integrado / receta
10⁻⁴9,92·10⁻⁵0,9921,0002
3·10⁻⁴3,00·10⁻⁴1,000—
10⁻³1,02·10⁻³1,0181,0018
3·10⁻³3,05·10⁻³1,015—
10⁻²1,02·10⁻²1,0251,0181
3·10⁻²3,24·10⁻²1,082—
10⁻¹4,24da vueltas1,2176

De 10−4 a 10−2 —dos décadas, que cubren la tabla de tiempos entera— la varianza medida es N0Bn/Pin dentro del 2,5 %, que es lo que el lazo discreto se aparta de la receta más el ruido de la propia medición. Exponente 1, sin régimen que lo rompa: a la varianza no le importa si antes hubo vueltas. A 3·10−2 se despega un 8 %: una parte es el ancho de banda real del lazo discreto, que ya a 10−2 es un 1,8 % mayor que el de la receta, y el resto es el seno del detector. A 10−1 la fórmula pide 0,1 rad², el lazo discreto deja pasar un 22 % más, y con eso el ruido ya empuja al error a la vuelta siguiente: el promedio de las cuatro corridas sale 4,24 rad², que no es una varianza de nada.

El dos también tiene un borde, pero lejos. Con Bn=10−3 y subiendo el ruido, la varianza se aparta de la fórmula entre un 3,5 y un 7,5 % donde ésta pide 0,06 rad², y entre un 7 y un 11 % donde pide 0,1, porque el seno del detector deja de parecerse a una recta (cuatro semillas por punto). Donde pide 0,15, una de las cuatro corridas ya dio una vuelta por ruido; donde pide 0,2, las cuatro. Ahí la varianza deja de significar algo. Es un borde de la relación señal a ruido, no del ancho de banda: el que separa el ocho del dos está en la tabla de tiempos.

Mirarlo

El widget arranca con Bn=1,6Δf, que es un ancho de banda razonable para un salto conocido: engancha en 78 ns, sin dar una vuelta, y la lectura de «duplicar» dice que la fórmula no está pasando. Bajá el ancho de banda de a un paso y mirá el contador de vueltas y esa lectura juntos. Arriba está lo que el integrador del PI aprendió de la frecuencia, en un eje de tiempo logarítmico para que los dos extremos entren; abajo, la fase en régimen con ruido, en una escala fija.

Simulación El mismo salto, otro ancho de banda — arriba, la frecuencia del integrador sobre Δf contra el tiempo, sin ruido: la línea azul vertical es el enganche medido a 0,1 rad y la gris punteada lo que dicen las fórmulas. Abajo, mil muestras del error de fase en régimen, ya enganchado, con Pin/N0 = 92 dB·Hz; las punteadas grises son ±σ de la fórmula.
vueltas antes de enganchar — TFL medido — 4Δf²/Bn³ — TLOCK medido — TFL + TPL — duplicar Bn: más rápido — σ² medida — N0Bn/Pin —

Bajando desde 1,6, la lectura de «duplicar» pasa por 2,3, se dispara al cruzar Bn≈Δf, cuando aparece la primera vuelta, y se queda en ocho de 0,2Δf para abajo. La nube de abajo, en el mismo recorrido, se angosta a un ritmo parejo: la mitad de varianza por cada mitad de ancho de banda, en todo el deslizador. El ocho a dos de la filmina es verdad en la mitad izquierda, que es donde el lazo tarda cientos de microsegundos; en la mitad derecha, donde engancha en decenas de nanosegundos, el cambio es dos a dos.

07 · Lo que queda del compromiso

La lectura ingenua de los dos exponentes es «agrandá Bn: ganás velocidad mucho más rápido de lo que perdés precisión». Medido, eso vale mientras Bn sea chico frente a Δf, y ahí el lazo está en la peor zona posible: deslizando cientos de vueltas, con un tiempo que sube como el cubo de lo que se achique. Salir de esa zona es baratísimo, y por eso el ocho es un buen argumento para no diseñar ahí. Una vez afuera, cuando el ancho de banda ya alcanza para enganchar sin vueltas, cada factor dos de velocidad cuesta un factor dos de varianza, y el compromiso de la filmina es un compromiso de verdad.

El dato que decide en qué régimen se está no es Bn solo, es el cociente Δf/Bn. Con este ζ el borde está en Δf≈Bn: si el salto de frecuencia más grande que el sistema tiene que tragar es menor que el ancho de banda, la fórmula de TFL no describe nada y el tiempo de enganche es el del transitorio lineal, unas pocas veces 1/Bn.

08 · La simulación en MATLAB

El script completo, corrido en R2026a. Lo que figura como comentario es su salida. La función del final es el lazo: detector de producto, PI y NCO con una muestra de retardo, guardando el error en precisión simple para que el registro más largo, de 56 millones de muestras, entre en memoria.

%% 1. El lazo: el PI de la clase, con zeta y Bn como perillas
fs = 16e9;                   % la del script de la clase
df = 1e-3;                   % salto de frecuencia: 1e-3 ciclos/muestra = 16 MHz
zeta = 1/sqrt(2);
disenar = @(Bn, z) deal(2*z*(2*Bn/(z + 1/(4*z))), (2*Bn/(z + 1/(4*z)))^2);  % [Kp, Ki], K_PD*K_V = 1

%% 2. Bn de la fórmula contra Bn integrado (sum h^2 / 2), con el NCO de una muestra de retardo
z = tf('z', 1);
for Bn = [1e-4 1e-3 1e-2 1e-1]
  [Kp, Ki] = disenar(Bn, zeta);
  F = feedback((Kp + Ki*z/(z-1)) * 1/(z-1), 1);
  [b, a] = tfdata(F, 'v'); h = filter(b, a, [1 zeros(1, 2e6)]);
  fprintf('Bn %.0e: integrado %.4e (%+.2f %%)\n', Bn, sum(h.^2)/2, 100*(sum(h.^2)/2/Bn - 1));
end
% y el lazo de la clase, tal cual (Kp = 0,005, Ki = Kp/100, NCO z/(z-1))
Fc = feedback((0.005 + 5e-5*z/(z-1)) * z/(z-1), 1);
[b, a] = tfdata(Fc, 'v'); h = filter(b, a, [1 zeros(1, 2e6)]);
fprintf('clase: Bn formula %.4e, integrado %.4e ciclos/muestra = %.1f MHz\n', ...
  sqrt(5e-5)/2*(0.3536 + 1/(4*0.3536)), sum(h.^2)/2, sum(h.^2)/2*fs/1e6);
% Bn 1e-04: integrado 1.0002e-04 (+0.02 %)
% Bn 1e-03: integrado 1.0018e-03 (+0.18 %)
% Bn 1e-02: integrado 1.0181e-02 (+1.81 %)
% Bn 1e-01: integrado 1.2176e-01 (+21.76 %)
% clase: Bn formula 3.7498e-03, integrado 3.7221e-03 ciclos/muestra = 59.6 MHz

%% 3. Tiempo de enganche contra Bn, sin ruido
r = 0.05 * 2.^(0:8);                         % Bn/df de 0,05 a 12,8
umb = [pi/2 pi 3*pi/2 1 0.3 0.1];            % las tres primeras: vueltas; las otras: rad
T = zeros(numel(r), numel(umb)); vueltas = zeros(size(r));
for i = 1:numel(r)
  Bn = r(i)*df; N = ceil(1.5*4*df^2/Bn^3 + 400/Bn);
  [T(i,:), vueltas(i)] = pll_sim(Bn, zeta, df, N, 0, 1, umb);
end
fprintf('Bn/df  vueltas  T_FL(pi/2 pi 3pi/2)       T_LOCK(1 0.3 0.1 rad)      4df^2/Bn^3   1.3/Bn\n');
for i = 1:numel(r)
  fprintf('%5.2f %7d  %9d %9d %9d  %9d %9d %9d  %10.0f %7.0f\n', r(i), vueltas(i), T(i,:), ...
    4*df^2/(r(i)*df)^3, 1.3/(r(i)*df));
end
fprintf('duplicar Bn: veces mas rapido\n');
for i = 1:numel(r)-1
  fprintf('%5.2f -> %5.2f: T_FL(pi) %6.2f   T_LOCK(1) %6.2f  (0.3) %6.2f  (0.1) %6.2f\n', ...
    r(i), r(i+1), T(i,2)/T(i+1,2), T(i,4)/T(i+1,4), T(i,5)/T(i+1,5), T(i,6)/T(i+1,6));
end
% Bn/df  vueltas  T_FL(pi/2 pi 3pi/2)       T_LOCK(1 0.3 0.1 rad)      4df^2/Bn^3   1.3/Bn
%  0.05   22169   33250890  33218702  33207808   33258994  33267581  33296984    32000000   26000
%  0.10    2757    4136525   4121852   4116150    4141456   4146091   4160006     4000000   13000
%  0.20     338     508878    506874    501385     509380    518639    520352      500000    6500
%  0.40      39      58720     57872     55781      62032     63744     64481       62500    3250
%  0.80       3       5744      3745      3058       6251      6802      8615        7812    1625
%  1.60       0          0         0         0        565      1053      1252         977     812
%  3.20       0          0         0         0          0       383       554         122     406
%  6.40       0          0         0         0          0         0       227          15     203
% 12.80       0          0         0         0          0         0        74           2     102
% duplicar Bn: veces mas rapido
%  0.05 ->  0.10: T_FL(pi)   8.06   T_LOCK(1)   8.03  (0.3)   8.02  (0.1)   8.00
%  0.10 ->  0.20: T_FL(pi)   8.13   T_LOCK(1)   8.13  (0.3)   7.99  (0.1)   7.99
%  0.20 ->  0.40: T_FL(pi)   8.76   T_LOCK(1)   8.21  (0.3)   8.14  (0.1)   8.07
%  0.40 ->  0.80: T_FL(pi)  15.45   T_LOCK(1)   9.92  (0.3)   9.37  (0.1)   7.48
%  0.80 ->  1.60: T_FL(pi)    Inf   T_LOCK(1)  11.06  (0.3)   6.46  (0.1)   6.88
%  1.60 ->  3.20: T_FL(pi)    NaN   T_LOCK(1)    Inf  (0.3)   2.75  (0.1)   2.26
%  3.20 ->  6.40: T_FL(pi)    NaN   T_LOCK(1)    NaN  (0.3)    Inf  (0.1)   2.44
%  6.40 -> 12.80: T_FL(pi)    NaN   T_LOCK(1)    NaN  (0.3)    NaN  (0.1)   3.07

%% 4. El coeficiente 4 de la filmina es el de zeta = 0,707
for zz = [0.3536 1/sqrt(2) 1]
  c = zeros(1,3); k = 0;
  for rr = [0.05 0.1 0.2]
    Bn = rr*df; k = k + 1;
    Tz = pll_sim(Bn, zz, df, ceil(3*4*df^2/Bn^3), 0, 1, pi);
    c(k) = Tz * Bn^3 / df^2;
  end
  wn = @(Bn) 2*Bn/(zz + 1/(4*zz));
  fprintf('zeta %.4f: T_FL*Bn^3/df^2 = %.2f %.2f %.2f  (Gardner: %.2f)\n', zz, c, ...
    (2*pi)^2/(2*zz*(2/(zz + 1/(4*zz)))^3));
end
% zeta 0.3536: T_FL*Bn^3/df^2 = 8.31 8.27 8.14  (Gardner: 8.33)
% zeta 0.7071: T_FL*Bn^3/df^2 = 4.15 4.12 4.05  (Gardner: 4.16)
% zeta 1.0000: T_FL*Bn^3/df^2 = 4.80 4.77 4.61  (Gardner: 4.82)

%% 5. Dónde deja de dar vueltas
rb = 0.80:0.02:1.20; nv = zeros(size(rb));
for i = 1:numel(rb), [~, nv(i)] = pll_sim(rb(i)*df, zeta, df, 2e5, 0, 1, pi); end
fprintf('vueltas: '); fprintf('%.2f:%d ', [rb; nv]); fprintf('\n');
% vueltas: 0.80:3 0.82:3 0.84:2 0.86:2 0.88:2 0.90:2 0.92:2 0.94:1 0.96:1 0.98:1 1.00:1 1.02:1 1.04:1 1.06:1 1.08:0 1.10:0 1.12:0 1.14:0 1.16:0 1.18:0 1.20:0

%% 6. Varianza del error de fase en régimen (df = 0), sigma_w^2 = 1: N0*Bn/Pin = Bn
for Bn = [1e-4 3e-4 1e-3 3e-3 1e-2 3e-2 1e-1]
  N = round(max(2e6, 2000/Bn)); s2 = zeros(1,4);
  for sem = 1:4
    [~, ~, e] = pll_sim(Bn, zeta, 0, N, 1, sem, []);
    e = double(e(round(20/Bn):end)); s2(sem) = var(e);
  end
  fprintf('Bn %.0e: sigma2 %.4e +- %.1e  razon a N0Bn/Pin %.3f\n', Bn, mean(s2), std(s2), mean(s2)/Bn);
end
% Bn 1e-04: sigma2 9.9168e-05 +- 1.9e-06  razon a N0Bn/Pin 0.992
% Bn 3e-04: sigma2 2.9992e-04 +- 3.4e-06  razon a N0Bn/Pin 1.000
% Bn 1e-03: sigma2 1.0179e-03 +- 2.7e-05  razon a N0Bn/Pin 1.018
% Bn 3e-03: sigma2 3.0459e-03 +- 4.0e-05  razon a N0Bn/Pin 1.015
% Bn 1e-02: sigma2 1.0249e-02 +- 5.4e-05  razon a N0Bn/Pin 1.025
% Bn 3e-02: sigma2 3.2449e-02 +- 1.3e-04  razon a N0Bn/Pin 1.082
% Bn 1e-01: sigma2 4.2371e+00 +- 4.9e+00  razon a N0Bn/Pin 42.371

%% 7. Con más ruido, la varianza deja de ser lineal (Bn = 1e-3)
for sw2 = [10 30 60 100 150 200]
  s2 = zeros(1,4); nv = zeros(1,4);
  for sem = 1:4
    [~, nv(sem), e] = pll_sim(1e-3, zeta, 0, 4e6, sqrt(sw2), sem, []);
    s2(sem) = mean(double(e(5e4:end)).^2);
  end
  fprintf('sw2 %3d: lineal %.3f  medida %.4f %.4f %.4f %.4f  vueltas %d %d %d %d\n', sw2, sw2*1e-3, s2, nv);
end
% sw2  10: lineal 0.010  medida 0.0103 0.0100 0.0101 0.0100  vueltas 0 0 0 0
% sw2  30: lineal 0.030  medida 0.0315 0.0304 0.0306 0.0305  vueltas 0 0 0 0
% sw2  60: lineal 0.060  medida 0.0645 0.0621 0.0626 0.0624  vueltas 0 0 0 0
% sw2 100: lineal 0.100  medida 0.1113 0.1069 0.1079 0.1075  vueltas 0 0 0 0
% sw2 150: lineal 0.150  medida 25.9284 0.1684 0.1702 0.1698  vueltas 1 0 0 0
% sw2 200: lineal 0.200  medida 59.1274 10.9160 38.5893 99.0805  vueltas 2 1 1 -2

%% 8. La métrica con ruido: Bn = 0,2 df, sigma_w^2 = 12,5 (sigma de fase 0,05 rad)
Bn = 0.2*df; T0 = 4*df^2/Bn^3;
for Nf = [1.5 3 6]
  Tn = pll_sim(Bn, zeta, df, ceil(Nf*T0), sqrt(12.5), 3, [pi 1 0.3 0.1]);
  fprintf('registro %.1f*T: T_FL(pi) %d  T_LOCK(1) %d (0.3) %d (0.1) %d  de %d\n', Nf, Tn, ceil(Nf*T0));
end
Ts8 = zeros(1,8);
for sem = 1:8, Ts8(sem) = pll_sim(Bn, zeta, df, ceil(1.5*T0), sqrt(12.5), sem, pi); end
fprintf('T_FL con ruido, 8 semillas: '); fprintf('%d ', Ts8); fprintf('\n');
% registro 1.5*T: T_FL(pi) 480718  T_LOCK(1) 488959 (0.3) 492100 (0.1) 737275  de 750000
% registro 3.0*T: T_FL(pi) 480718  T_LOCK(1) 488959 (0.3) 492100 (0.1) 1495181  de 1500000
% registro 6.0*T: T_FL(pi) 480718  T_LOCK(1) 488959 (0.3) 492100 (0.1) 2998432  de 3000000
% T_FL con ruido, 8 semillas: 479653 556892 480718 518744 479577 490047 471454 547029

%% El PLL: detector sen (producto), PI, NCO con una muestra de retardo
function [Tu, k, err] = pll_sim(Bn, zeta, df, N, sigw, sem, umb)
  wn = 2*Bn/(zeta + 1/(4*zeta)); Kp = 2*zeta*wn; Ki = wn^2;
  rng(sem); err = zeros(N, 1, 'single');
  th = 0; I = 0;
  for n = 1:N
    eps_ = 2*pi*df*(n-1) - th; err(n) = eps_;
    e = sin(eps_);
    if sigw > 0, e = e + sigw/sqrt(2)*randn; end
    I = I + Ki*e; th = th + Kp*e + I;
  end
  k = round(double(err(end))/(2*pi));
  w = abs(double(err) - 2*pi*k);
  Tu = zeros(1, numel(umb));
  for j = 1:numel(umb)
    u = find(w > umb(j), 1, 'last'); if isempty(u), u = 0; end
    Tu(j) = u;
  end
end

Para tener a mano

  1. La filmina da TFL≈4(Δf)2/Bn3 y σ2=N0Bn/Pin: duplicar Bn promete ocho veces más rápido por el doble de varianza.
  2. El enganche en frecuencia sólo existe con un detector no lineal: con el modelo lineal no hay vueltas y no hay TFL.
  3. Se mide por la última vuelta. Un umbral fijo en radianes con ruido mide el largo del registro: con 0,05 rad de desvío, el enganche a 0,1 rad dio 0,74, 1,50 y 3,00 millones de muestras sobre registros de 0,75, 1,5 y 3 millones.
  4. Con Bn≤0,2Δf la fórmula acierta dentro del 4 % y duplicar da 8,0 veces. El error da 338 vueltas con 0,2 Δf y 2.757 con 0,1 Δf.
  5. El 4 es el de ζ=0,707. Con el ζ=0,354 de la clase el coeficiente es 8,3: el mismo exponente, el doble de tiempo.
  6. Desde Bn≈1,08Δf el error no da vueltas, TFL es cero y duplicar compra 2 veces con un umbral relativo y entre 2,3 y 3,1 con uno fijo en radianes.
  7. La varianza es N0Bn/Pin dentro del 2,5 % de 10−4 a 10−2 ciclos por muestra, con o sin vueltas previas. Se aparta por el seno del detector arriba de 0,06 rad², y cerca de 0,15 el ruido mismo hace dar vueltas.
  8. El ocho a dos es real donde el lazo es lento; donde es rápido, el compromiso es dos a dos.
← Anterior Inicio