Bitácora · DCSS · Concepto

Ancho de banda, adquisición y tracking

Unidad 7 · PLL · el ancho de −3 dB y el equivalente de ruido, la varianza de la fase, el enganche en frecuencia y en fase, el rango de captura y la receta de las constantes

Una vez elegido el filtro PI, al lazo le queda una sola decisión de fondo: cuánto ancho de banda darle. Todo lo que hace el PLL depende de ese número. Con más ancho de banda engancha antes y desde más lejos, porque la filmina da un tiempo de enganche en frecuencia que cae como 1/Bn3. Pero deja pasar más ruido a la fase estimada, porque la varianza del error crece como Bn. El ancho que importa para el ruido no es el de −3 dB sino el equivalente de ruido Bn, y con él se arman también Kp y Ki.

01 · El ancho de −3 dB

Con el filtro PI, L(s)=Kp+Ki/s, el PLL linealizado es de segundo orden (el filtro de lazo):

F(s)=2ζωns+ωn2s2+2ζωns+ωn2 ζ=Kp2KVKPDKi,ωn=KVKPDKi

Es un pasabajos de fase: copia lo que θ hace despacio y deja pasar como error lo que hace rápido. Su primer ancho de banda es el de siempre, donde la ganancia de potencia cae a la mitad.

Paso 1: el módulo al cuadrado. Con s=jω, el numerador es ωn2+j2ζωnω y el denominador (ωn2−ω2)+j2ζωnω:

|F(jω)|2=ωn4+4ζ2ωn2ω2(ωn2−ω2)2+4ζ2ωn2ω2

Paso 2: igualarlo a 1/2. Pasando el denominador multiplicando, con x=ω2/ωn2 y dividiendo todo por ωn4, queda 2+8ζ2x=(1−x)2+4ζ2x, o sea una cuadrática en x:

x2−2(1+2ζ2)x−1=0

Paso 3: la raíz positiva. El producto de las raíces es −1, así que una sola es positiva, y es la que sirve porque x es un cuadrado:

ω3dB=ωn1+2ζ2+(1+2ζ2)2+1

Es la fórmula de la filmina. Con las constantes de phase_system.m, Kp=0,005, Ki=Kp/100 y KPDKV=1 por muestra, sale ζ=0,3536 y ωn=0,00707 rad por muestra, o sea fn=18,01 MHz a fs=16 GHz. La fórmula da f3dB=30,40 MHz y bandwidth(F), sobre el lazo discreto del script, 30,34 MHz.

02 · El ancho de banda equivalente de ruido, paso a paso

Para el ruido, el ancho de −3 dB no dice cuánto pasa: el ruido blanco pasa por todas las frecuencias, y lo que llega a la salida depende del área entera bajo |F|2, pico y faldas incluidos. El ancho de banda equivalente de ruido resume esa área en un número: es el ancho del pasabajos rectangular ideal que deja pasar la misma potencia de ruido blanco que el PLL. Es el mismo concepto de la Unidad 3, con una diferencia de normalización: el rectángulo de la filmina tiene la altura de la ganancia en continua, |F(0)|2=1, no la del pico, y va de −Bn a Bn. Como |F|2 es par, igualar las áreas es

Bn=∫0∞|F(j2πf)|2df

Con un pico, la normalización importa. El lazo de la clase tiene |F|2 de hasta 3,14 en su pico; normalizando por el pico, el mismo lazo tendría un ancho equivalente 3,14 veces más chico y la misma potencia de ruido.

Paso 1: separar el numerador. El módulo al cuadrado de la sección anterior tiene un denominador D(ω)=(ωn2−ω2)2+4ζ2ωn2ω2 y un numerador con dos términos, así que la integral en ω se parte en dos:

∫0∞|F|2dω=ωn4∫0∞dωD⏟I0+4ζ2ωn2∫0∞ω2dωD⏟I2

Paso 2: las dos integrales de un segundo orden. I0 es el área bajo el módulo al cuadrado de 1/(s2+2ζωns+ωn2) e I2 la de s/(s2+2ζωns+ωn2). Por residuos, cerrando en el semiplano superior, dan

I0=π4ζωn3,I2=π4ζωn

Paso 3: sumar. ωn4I0=πωn/(4ζ) y 4ζ2ωn2I2=πζωn, así que ∫0∞|F|2dω=πωn(ζ+1/4ζ).

Paso 4: pasar a hertz. La definición integra en f, y dω=2πdf. Dividir por 2π da la fórmula de la filmina:

Bn=ωn2(ζ+14ζ)

El paso 4 es el que se olvida. ωn entra en radianes por segundo y Bn sale en hertz: el 2π ya está adentro. En el lazo discreto, con ωn en radianes por muestra, sale en ciclos por muestra, que es BnTs. Para la clase, BnTs=3,75·10−3, o sea Bn=60,00 MHz. La integral numérica con integral da el mismo 3,750000·10−3 que la cerrada. Y en el lazo discreto del script, donde el ancho se mide por Parseval como la mitad de la energía de la respuesta al impulso, BnTs=12∑nf[n]2, da 59,55 MHz: un 0,74 % menos, por ser discreto.

Contra el de −3 dB, en las mismas unidades. Los dos son proporcionales a ωn, así que su cociente depende sólo de ζ, y sale de las dos formas cerradas:

ζBn / ωnf3dB / ωnBn / f3dB
0,250,6250,2582,42
0,3540,5300,2691,97
0,50,5000,2891,73
0,7070,5300,3281,62
10,6250,3951,58
21,0630,6761,57

Bn es siempre más ancho que el de −3 dB, y la diferencia crece cuando baja ζ, porque el pico suma área. Es el gráfico de la filmina con fn=100 kHz, normalizado. Para un ωn dado, Bn tiene su mínimo donde se anula la derivada de ζ+1/4ζ, que es 1−1/4ζ2: en ζ=0,5, con Bn=ωn/2. Y la expresión no cambia si se reemplaza ζ por 1/4ζ: el 0,354 de la clase y el 0,707 de los libros son ese par, y con el mismo ωn dejan pasar exactamente el mismo ruido.

03 · La receta de las constantes

El diseño arranca al revés: se eligen Bn y ζ, y de ahí salen las constantes del filtro.

Paso 1: igualar denominadores. El PI cerrado da s2+KVKPDKps+KVKPDKi abajo; comparado con la forma de segundo orden, KpKVKPD=2ζωn y KiKVKPD=ωn2.

Paso 2: despejar ωn de Bn. ωn=2Bn/(ζ+1/4ζ).

Paso 3: reemplazar.

KpKVKPD=4ζBnζ+14ζ,KiKVKPD=4Bn2(ζ+14ζ)2

La filmina escribe 2ζBn en el numerador de la primera, pero la cuenta da 4: 2ζ·2Bn/(…). La segunda está bien. Con el 2, Kp sale a la mitad, y como Ki no cambia, el lazo queda con la mitad del ζ pedido.

Aplicada a la clase, con BnTs=3,75·10−3 y ζ=0,3536, la receta devuelve las constantes del script: Kp=0,0050 y Ki=5,00·10−5. Con el 2 de la filmina, Kp=0,0025: un lazo con ζ=0,177 y 90,0 MHz de ancho de ruido en lugar de 60. Hay un solo ζ en el que el error no cambia Bn: el 0,707, porque su mitad es su espejo 1/4ζ. Y la receta de la filmina con ζ=0,707 da justo Kp=0,005 y Ki=5·10−5.

La receta es continua y el lazo de la clase es discreto. Mientras BnTs sea chico, el ancho que se pide es el que se obtiene. Medido como 12∑nf[n]2 sobre el lazo de phase_system.m armado con la receta y ζ=0,707:

BnTs pedidoa 16 GHzBnTs medidomedido / pedido
0,00116 MHz0,001000,9987
0,0037560 MHz0,003730,9950
0,01160 MHz0,009870,9868
0,03480 MHz0,028840,9613
0,11,6 GHz0,088010,8801

El discreto siempre queda un poco por debajo, y la diferencia crece con el ancho: por debajo del 1 % hasta BnTs≈0,01, y del 12 % con 0,1. Para anchos así hace falta la receta discreta, que es otro tema (el PLL en tiempo discreto).

04 · Tracking: la varianza de la fase

Enganchado, el lazo sigue a la entrada, pero la entrada trae ruido y una parte de ese ruido llega a la fase estimada. La filmina mide la calidad del seguimiento con la varianza del error, σθe2=E{|θ−θ^|2}, y la da para un tono de potencia Pin en ruido blanco de densidad N0/2.

Paso 1: el ruido como fase. El tono es Acos(ωvt+θ), con Pin=A2/2. El ruido alrededor de la portadora se separa en una componente en fase con el tono y otra en cuadratura, ns, cada una con densidad N0. La que está en fase sólo le cambia el largo; la que está en cuadratura lo hace girar, y con ruido chico lo gira ns/A radianes. Para el lazo, entonces, el ruido es una fase extra de densidad N0/A2=N0/(2Pin), sumada a θ.

Paso 2: lo filtra F. Esa fase extra entra al lazo por el mismo lugar que θ, así que llega a θ^ multiplicada por |F|2, y su potencia es la densidad por el área, que por la sección 02 vale 2Bn:

σθe2=N02Pin∫−∞∞|F(j2πf)|2df=N0BnPin

Con θ constante el error es sólo ese ruido filtrado, cambiado de signo, y la fórmula vale para el error. Es el motivo para preferir Bn a f3dB: la varianza de la fase sale en una línea, y depende de la forma del lazo sólo a través de Bn. Más potencia de señal la baja; más ruido o más ancho de banda la suben, y la suben en proporción.

En banda base y en muestras, con un tono de potencia 1 y ruido complejo de varianza σw2 por muestra, N0=σw2Ts y la fórmula queda σθe2=BnTs·σw2. Simulado con el lazo de la clase, el detector de producto y dos millones de muestras:

SNR por muestraσw²varianza medidaN0Bn/Pinmedida / fórmuladesvío
10 dB0,13,727·10⁻⁴3,750·10⁻⁴0,9941,11°
20 dB0,013,630·10⁻⁵3,750·10⁻⁵0,9680,35°
30 dB0,0013,670·10⁻⁶3,750·10⁻⁶0,9790,11°

La varianza medida es la de la fórmula dentro de un 3,2 %, en tres décadas de ruido. Dos cosas la separan. El lazo discreto deja pasar un 0,74 % menos que el Bn continuo. Y la propia medición se mueve, porque el error está correlacionado a lo largo de cientos de muestras: el mismo lazo con 10 dB, simulado con ocho semillas de 800 000 muestras, da entre 0,943 y 1,032 veces la fórmula. Con 10 dB por muestra el lazo de la clase deja la fase con 1,11° de desvío. Una muestra sola tiene una varianza de fase de σw2/2, y el lazo la divide por 1/(2BnTs)=133: promedia el ruido de más de cien muestras.

05 · Adquisición: primero la frecuencia, después la fase

Todo lo anterior supone el lazo enganchado. Cuando se prende, el oscilador está corrido Δf de la entrada, el error de fase crece sin parar y el detector recorre su curva S entera, una vuelta tras otra. Ahí el modelo lineal no vale. La filmina parte la adquisición en dos etapas.

Enganche en frecuencia. El VCO se ajusta hasta igualar la frecuencia de la entrada. Mientras el error da vueltas, el detector promedia casi cero, pero no cero: el error gira más despacio en la mitad de la curva que lo acerca, y el integrador del PI acumula ese desbalance vuelta tras vuelta. Por eso es lento, y por eso necesita el integrador. La filmina lo estima con

TFL≈4(Δf)2Bn3

Enganche en fase. Cuando la frecuencia ya coincide queda un error de fase fijo, que para el lazo es un escalón: lo corrige en la escala de tiempo del lazo lineal, TPL≈1,3/Bn, y el total es TLOCK≈TFL+TPL. Las unidades tienen que ser coherentes: con Δf y Bn en hertz los tiempos salen en segundos; con los dos en ciclos por muestra, en muestras.

Las dos fórmulas son aproximaciones sin derivación en la filmina, así que se cruzan con simulación. El lazo es el de phase_system.m en el tiempo, sin retardo, con un detector no lineal, y la entrada salta Δf=200 MHz, que con Bn=60 MHz pide TFL≈ 11 852 muestras, 741 ns. TFL medido es la última vuelta del error; el enganche, la última vez que el error pasa de 0,1 rad. Con el mismo Bn y dos ζ:

ζdetectorvueltasTFL medidomedido / fórmulaenganche a 0,1 rad
0,354producto19623 028 · 1,44 µs1,9424 738 · 1,55 µs
0,354argumento272 907 · 182 ns0,2454 324 · 270 ns
0,707producto9611 268 · 704 ns0,95112 287 · 768 ns
0,707argumento101 033 · 64,6 ns0,0871 995 · 125 ns

Con el detector de producto, que tiene una curva S senoidal, y ζ=0,707, la fórmula acierta: 11 268 muestras contra 11 852, un 5 % menos, y el enganche total, 12 287 contra 12 199. Pero el 4 no es una constante del PLL. La forma clásica de la que sale, que la filmina no muestra, es TFL≈(2πΔf)2/(2ζωn3). Con ωn=2Bn/(ζ+1/4ζ) el coeficiente da 4,16 para ζ=0,707 y 8,33 para el 0,354 de la clase: con el mismo Bn los dos tienen el mismo ωn, y el tiempo va como 1/ζ. La simulación da 1,94 veces la fórmula. Con el mismo ancho de ruido, el lazo de la clase tarda el doble en engancharse en frecuencia.

El detector también cuenta. Con el diente de sierra, el detector ideal que dibuja la filmina, el mismo salto engancha 4,1 veces antes con 0,354 y 11,5 veces antes con 0,707: el 4 es de un detector senoidal. Y por debajo de cierto salto no hay enganche en frecuencia que medir. Buscado por bisección, el mayor salto que el lazo de la clase alcanza sin dar ninguna vuelta es de 45,4 MHz con el producto y de 89,3 MHz con el diente de sierra. Ahí TFL es cero, aunque la fórmula dé un número.

El 1,3 de TPL también es de un ζ. En el escalón de fase lineal, 1,3/Bn cae casi justo en el mínimo del error de un lazo con ζ=1, −13,5 % del escalón, y de ahí en adelante ese error sólo decae. Con otro ζ el mismo instante deja otro resto: −4,5 % con ζ=2, −20,3 % con 0,707, −29,4 % con 0,5 y −39,7 % con el 0,354 de la clase, que recién queda por debajo del 13,5 % en 2,15/Bn.

El rango de captura. La filmina da hasta dónde el lazo puede engancharse solo:

(Δf)pull-in≈(2π2ζ)Bn

Para la clase da 2π2·0,354·60 MHz = 188 MHz. Con el detector de producto la simulación no encuentra ese borde: engancha un salto de 1,6 GHz después de 106 267 vueltas y 99 µs, y uno de 6,4 GHz después de 10,75 millones de vueltas y 2,3 ms. Con un integrador que no pierde, el empuje de cada vuelta es chico pero no cero, y se acumula sin límite: lo que crece con el salto es el precio, como (Δf)2. El único techo que aparece es el del muestreo: a 7,84 GHz, cerca de fs/2, no enganchó en 109 millones de muestras. Con el diente de sierra sí hay un borde, y es abrupto: con 0,354 engancha 592 MHz en 33 446 muestras, y a menos de 0,1 MHz de ahí ya no engancha en dos millones. Con 0,707 el borde está en 699 MHz. Son 3,1 y 1,9 veces lo que da la fórmula, 188 y 377 MHz. El rango de captura de la filmina es un orden de magnitud, no una frontera.

El compromiso. Juntas, las dos mitades de la filmina dicen lo mismo desde lados opuestos. Más Bn acorta TFL como 1/Bn3, TPL como 1/Bn y agranda el rango de captura en proporción; y agranda σθe2 en proporción. Se elige Bn con dos datos: cuánto puede estar corrido el oscilador y cuánta varianza de fase tolera la constelación.

Simulación El mismo lazo, otro ancho de banda — el lazo de phase_system.m armado con la receta, a 16 GHz. Arriba, |F|² contra f/Bn y el rectángulo de la misma área; la marca es el ancho de −3 dB. Al medio, la adquisición de un salto de 200 MHz sin ruido, en tiempo logarítmico: la línea azul es el enganche medido a 0,1 rad y la punteada lo que dicen TFL + TPL. Abajo, el error de fase ya enganchado, con 10 dB de SNR por muestra; las punteadas son ±σ de la fórmula. Arranca con el lazo de la clase.
Kp · Ki de la receta — ancho de −3 dB — Bn del lazo discreto — vueltas — TFL medido — 4(Δf)²/Bn³ — enganche medido — TFL + TPL — σ medido — √(N0Bn/Pin) —

Arriba, mover ζ cambia la forma de |F|2 y no su área. Con 0,354 el pico llega a 3,14 y el −3 dB cae a la mitad de Bn; con 2 casi no hay pico, pero la falda se estira. Mover Bn no cambia nada arriba, porque el eje está en unidades de Bn, y cambia todo abajo. De 60 a 30 MHz, el salto de 200 MHz pasa de 196 vueltas a 1 623 y TFL de 1,44 a 12,1 µs, 8,4 veces más; el desvío de la fórmula baja de 1,11° a 0,79°, un factor 2. De 60 a 120 MHz quedan 21 vueltas y 146 ns. Desde 320 MHz el error ya no da ninguna vuelta: TFL medido es cero y la fórmula sigue dando 4,9 ns. Con el mismo Bn, pasar de 0,354 a 0,707 parte TFL a la mitad sin tocar la varianza. Y con el diente de sierra el lazo de la clase engancha el mismo salto en 27 vueltas y 182 ns.

06 · El análisis en MATLAB

El lazo de la clase de punta a punta: sus dos anchos de banda, Bn por integración y por Parseval, la receta, una simulación de tracking con ruido y una de adquisición. Lo que figura como comentario es la salida real de correrlo en R2026a. La función del final es el lazo de phase_system.m en el tiempo.

%% 1. El lazo de la clase, como lo arma phase_system.m
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);
F = feedback(L*NCO, 1);

%% 2. El equivalente continuo: zeta, wn, Bn y el ancho de -3 dB
zeta = Kp/(2*sqrt(Ki));               % con K_PD*K_V = 1 por muestra
wn = sqrt(Ki);                        % rad/muestra
Bn = wn/2*(zeta + 1/(4*zeta));        % ciclos/muestra: es Bn*Ts
w3 = wn*sqrt(1 + 2*zeta^2 + sqrt((1 + 2*zeta^2)^2 + 1));
fprintf('zeta = %.4f   fn = %.2f MHz   Bn*Ts = %.3e   Bn = %.2f MHz\n', ...
        zeta, wn/(2*pi)*fs/1e6, Bn, Bn*fs/1e6)
fprintf('f3dB cerrada = %.2f MHz   bandwidth(F) = %.2f MHz\n', ...
        w3/(2*pi)*fs/1e6, bandwidth(F)/(2*pi)/1e6)
% zeta = 0.3536   fn = 18.01 MHz   Bn*Ts = 3.750e-03   Bn = 60.00 MHz
% f3dB cerrada = 30.40 MHz   bandwidth(F) = 30.34 MHz

%% 3. Bn por integración numérica de |F|^2, en ciclos por muestra
s = @(f) 2j*pi*f;
F2 = @(f) abs((2*zeta*wn*s(f) + wn^2)./(s(f).^2 + 2*zeta*wn*s(f) + wn^2)).^2;
Bn_int = integral(F2, 0, Inf, 'RelTol', 1e-12, 'AbsTol', 1e-15);
fprintf('integral = %.6e   cerrada = %.6e   diferencia = %.1e\n', Bn_int, Bn, abs(Bn_int - Bn))
% integral = 3.750000e-03   cerrada = 3.750000e-03   diferencia = 0.0e+00

%% 4. Bn del lazo discreto: Parseval, la mitad de la energía de f[n]
[b, a] = tfdata(F, 'v');
f = filter(b, a, [1 zeros(1, 2e5)]);
Bn_d = sum(f.^2)/(2*sum(f)^2);        % sum(f) = F(1) = 1
fprintf('discreto: Bn*Ts = %.4e   Bn = %.2f MHz\n', Bn_d, Bn_d*fs/1e6)
% discreto: Bn*Ts = 3.7221e-03   Bn = 59.55 MHz

%% 5. La receta: de (Bn, zeta) a (Kp, Ki)
kp = 4*zeta*Bn/(zeta + 1/(4*zeta));
ki = 4*Bn^2/(zeta + 1/(4*zeta))^2;
fprintf('receta(Bn, %.4f): Kp = %.4f   Ki = %.2e\n', zeta, kp, ki)
% receta(Bn, 0.3536): Kp = 0.0050   Ki = 5.00e-05
kp2 = 2*zeta*Bn/(zeta + 1/(4*zeta));  % con el 2 de la filmina
z2 = kp2/(2*sqrt(ki));
fprintf('con 2*zeta*Bn: Kp = %.4f -> zeta = %.4f, Bn = %.1f MHz\n', ...
        kp2, z2, sqrt(ki)/2*(z2 + 1/(4*z2))*fs/1e6)
% con 2*zeta*Bn: Kp = 0.0025 -> zeta = 0.1768, Bn = 90.0 MHz

%% 6. Cuánto se separa el discreto de la receta continua (zeta = 0.7071)
for BT = [0.001 0.00375 0.01 0.03 0.1]
    ze = 1/sqrt(2);
    k1 = 4*ze*BT/(ze + 1/(4*ze)); k2 = 4*BT^2/(ze + 1/(4*ze))^2;
    Fd = feedback((k1 + k2*z/(z-1))*z/(z-1), 1);
    [bd, ad] = tfdata(Fd, 'v');
    fd = filter(bd, ad, [1 zeros(1, 4e5)]);
    fprintf('Bn*Ts pedido %.5f   medido %.5f   cociente %.4f\n', BT, sum(fd.^2)/2, sum(fd.^2)/2/BT)
end
% Bn*Ts pedido 0.00100   medido 0.00100   cociente 0.9987
% Bn*Ts pedido 0.00375   medido 0.00373   cociente 0.9950
% Bn*Ts pedido 0.01000   medido 0.00987   cociente 0.9868
% Bn*Ts pedido 0.03000   medido 0.02884   cociente 0.9613
% Bn*Ts pedido 0.10000   medido 0.08801   cociente 0.8801

%% 7. Tracking: un tono de potencia 1 en ruido blanco, detector de producto
rng(1)
for snr = [10 20 30]                  % dB por muestra
    sw2 = 10^(-snr/10);               % varianza del ruido complejo: N0*fs
    e = pll(Kp, Ki, 0, sw2, 2e6, 'producto');
    v = mean(e(5e4:end).^2);          % sin el transitorio
    fprintf('SNR %2d dB: var = %.3e   N0*Bn/Pin = %.3e   cociente %.3f\n', snr, v, Bn*sw2, v/(Bn*sw2))
end
% SNR 10 dB: var = 3.727e-04   N0*Bn/Pin = 3.750e-04   cociente 0.994
% SNR 20 dB: var = 3.630e-05   N0*Bn/Pin = 3.750e-05   cociente 0.968
% SNR 30 dB: var = 3.670e-06   N0*Bn/Pin = 3.750e-06   cociente 0.979

%% 8. Adquisición: un salto de 200 MHz, sin ruido
df = 200e6/fs;
for ze = [zeta 1/sqrt(2)]
    for det = ["producto" "argumento"]
        k1 = 4*ze*Bn/(ze + 1/(4*ze)); k2 = 4*Bn^2/(ze + 1/(4*ze))^2;
        e = pll(k1, k2, df, 0, 3e5, det);
        k = round(e(end)/(2*pi)); e = e - 2*pi*k;          % la vuelta en la que quedó
        TFL = max([0 find(abs(e) >= pi, 1, 'last')]);       % la última vuelta
        TL = max([0 find(abs(e) > 0.1, 1, 'last')]);        % enganchado a 0,1 rad
        fprintf('zeta %.3f %-9s: %3d vueltas  TFL = %5d (4*df^2/Bn^3 = %5.0f)  TLOCK = %5d (+ 1.3/Bn: %5.0f)\n', ...
                ze, det, abs(k), TFL, 4*df^2/Bn^3, TL, 4*df^2/Bn^3 + 1.3/Bn)
    end
end
% zeta 0.354 producto : 196 vueltas  TFL = 23028 (4*df^2/Bn^3 = 11852)  TLOCK = 24738 (+ 1.3/Bn: 12199)
% zeta 0.354 argumento:  27 vueltas  TFL =  2907 (4*df^2/Bn^3 = 11852)  TLOCK =  4324 (+ 1.3/Bn: 12199)
% zeta 0.707 producto :  96 vueltas  TFL = 11268 (4*df^2/Bn^3 = 11852)  TLOCK = 12287 (+ 1.3/Bn: 12199)
% zeta 0.707 argumento:  10 vueltas  TFL =  1033 (4*df^2/Bn^3 = 11852)  TLOCK =  1995 (+ 1.3/Bn: 12199)

function eu = pll(kp, ki, df, sw2, N, det)
    % El lazo de phase_system.m en el tiempo: L = Kp + Ki*z/(z-1) y
    % NCO = z/(z-1), sin retardo. Como el NCO ya suma la corrección de esta
    % muestra, el error sale de resolver e = W(d - K*e), con K = Kp + Ki.
    K = kp + ki; ph = 0; ac = 0; eu = zeros(1, N);
    w = sqrt(sw2/2)*(randn(1, N) + 1j*randn(1, N));
    for n = 1:N
        th = 2*pi*df*(n-1);
        r = exp(1j*th) + w(n);
        d = angle(r) - ph - ac;
        if det == "argumento"         % W = diente de sierra
            e = (mod(d + pi, 2*pi) - pi)/(1 + K);
        else                          % W = |r| sen(.), parte imaginaria
            A = abs(r); e = 0;
            for it = 1:2
                g = e - A*sin(d - K*e);
                e = e - g/(1 + A*K*cos(d - K*e));
            end
        end
        ac = ac + ki*e;
        ph = ph + kp*e + ac;
        eu(n) = th - ph;              % theta - phi, sin envolver
    end
end

Tres detalles que muerden:

Para tener a mano

  1. ω3dB=ωn1+2ζ2+(1+2ζ2)2+1, de igualar |F|2 a 1/2. Para la clase, 30,40 MHz.
  2. Bn=∫0∞|F(j2πf)|2df=ωn2(ζ+14ζ) en hertz con ωn en rad/s. Para la clase, BnTs=3,75·10−3 ciclos por muestra: 60 MHz, y 59,55 en el lazo discreto.
  3. Bn siempre es más ancho que el de −3 dB: 1,97 veces en la clase. Mínimo en ζ=0,5 para un ωn dado, e igual para ζ y 1/4ζ.
  4. Receta: KpKVKPD=4ζBn/(ζ+1/4ζ) —con 4, no con el 2 de la filmina— y KiKVKPD=4Bn2/(ζ+1/4ζ)2. Con 60 MHz y 0,354 devuelve 0,005 y 5·10−5.
  5. σθe2=N0Bn/Pin: la densidad de la fase de ruido por el área de |F|2. En muestras, BnTs·σw2. Con 10 dB por muestra, el lazo de la clase deja 1,11° de desvío.
  6. TFL≈4(Δf)2/Bn3 acierta con detector senoidal y ζ=0,707, dentro del 5 %. El 4 es de ese caso: con el 0,354 de la clase tarda 1,94 veces más, con diente de sierra entre 4 y 11 veces menos, y por debajo de 45 MHz el lazo de la clase engancha sin dar vueltas.
  7. TPL≈1,3/Bn es el de ζ=1; con el 0,354 de la clase el error todavía es el 40 % del escalón en ese instante.
  8. El rango de captura, (2π2ζ)Bn, da 188 MHz para la clase y no es un borde: con detector senoidal el lazo engancha 6,4 GHz, pagando 2,3 ms; con diente de sierra el borde existe, pero en 592 MHz.
← Anterior Siguiente → Inicio
Relacionados El PLL El detector de fase El filtro de lazo y el PLL de segundo orden El PLL en tiempo discreto El VCO y el NCO La mitad de ζ deja pasar el mismo ruido Ocho veces más rápido, sólo mientras el error da vueltas