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 . Pero deja pasar más ruido a la fase estimada, porque la varianza del error crece como . El ancho que importa para el ruido no es el de −3 dB sino el equivalente de ruido , y con él se arman también y .
Con el filtro PI, , el PLL linealizado es de segundo orden (el filtro de lazo):
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 , el numerador es y el denominador :
Paso 2: igualarlo a 1/2. Pasando el denominador multiplicando, con y dividiendo todo por , queda , o sea una cuadrática en :
Paso 3: la raíz positiva. El producto de las raíces es , así que una sola es positiva, y es la que sirve porque es un cuadrado:
Es la fórmula de la filmina. Con las constantes de phase_system.m, , y por muestra, sale y rad por muestra, o sea MHz a GHz. La fórmula da MHz y bandwidth(F), sobre el lazo discreto del script, 30,34 MHz.
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 , 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, , no la del pico, y va de a . Como es par, igualar las áreas es
Con un pico, la normalización importa. El lazo de la clase tiene 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 y un numerador con dos términos, así que la integral en se parte en dos:
Paso 2: las dos integrales de un segundo orden. es el área bajo el módulo al cuadrado de e la de . Por residuos, cerrando en el semiplano superior, dan
Paso 3: sumar. y , así que .
Paso 4: pasar a hertz. La definición integra en , y . Dividir por da la fórmula de la filmina:
El paso 4 es el que se olvida. entra en radianes por segundo y sale en hertz: el ya está adentro. En el lazo discreto, con en radianes por muestra, sale en ciclos por muestra, que es . Para la clase, , o sea MHz. La integral numérica con integral da el mismo 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, , 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 , así que su cociente depende sólo de , y sale de las dos formas cerradas:
| ζ | Bn / ωn | f3dB / ωn | Bn / f3dB |
|---|---|---|---|
| 0,25 | 0,625 | 0,258 | 2,42 |
| 0,354 | 0,530 | 0,269 | 1,97 |
| 0,5 | 0,500 | 0,289 | 1,73 |
| 0,707 | 0,530 | 0,328 | 1,62 |
| 1 | 0,625 | 0,395 | 1,58 |
| 2 | 1,063 | 0,676 | 1,57 |
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 kHz, normalizado. Para un dado, tiene su mínimo donde se anula la derivada de , que es : en , con . Y la expresión no cambia si se reemplaza por : el 0,354 de la clase y el 0,707 de los libros son ese par, y con el mismo dejan pasar exactamente el mismo ruido.
El diseño arranca al revés: se eligen y , y de ahí salen las constantes del filtro.
Paso 1: igualar denominadores. El PI cerrado da abajo; comparado con la forma de segundo orden, y .
Paso 2: despejar de . .
Paso 3: reemplazar.
La filmina escribe en el numerador de la primera, pero la cuenta da 4: . La segunda está bien. Con el 2, sale a la mitad, y como no cambia, el lazo queda con la mitad del pedido.
Aplicada a la clase, con y , la receta devuelve las constantes del script: y . Con el 2 de la filmina, : un lazo con y 90,0 MHz de ancho de ruido en lugar de 60. Hay un solo en el que el error no cambia : el 0,707, porque su mitad es su espejo . Y la receta de la filmina con da justo y .
La receta es continua y el lazo de la clase es discreto. Mientras sea chico, el ancho que se pide es el que se obtiene. Medido como sobre el lazo de phase_system.m armado con la receta y :
| BnTs pedido | a 16 GHz | BnTs medido | medido / pedido |
|---|---|---|---|
| 0,001 | 16 MHz | 0,00100 | 0,9987 |
| 0,00375 | 60 MHz | 0,00373 | 0,9950 |
| 0,01 | 160 MHz | 0,00987 | 0,9868 |
| 0,03 | 480 MHz | 0,02884 | 0,9613 |
| 0,1 | 1,6 GHz | 0,08801 | 0,8801 |
El discreto siempre queda un poco por debajo, y la diferencia crece con el ancho: por debajo del 1 % hasta , y del 12 % con 0,1. Para anchos así hace falta la receta discreta, que es otro tema (el PLL en tiempo discreto).
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, , y la da para un tono de potencia en ruido blanco de densidad .
Paso 1: el ruido como fase. El tono es , con . El ruido alrededor de la portadora se separa en una componente en fase con el tono y otra en cuadratura, , cada una con densidad . 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 radianes. Para el lazo, entonces, el ruido es una fase extra de densidad , sumada a .
Paso 2: lo filtra . Esa fase extra entra al lazo por el mismo lugar que , así que llega a multiplicada por , y su potencia es la densidad por el área, que por la sección 02 vale :
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 a : la varianza de la fase sale en una línea, y depende de la forma del lazo sólo a través de . 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 por muestra, y la fórmula queda . Simulado con el lazo de la clase, el detector de producto y dos millones de muestras:
| SNR por muestra | σw² | varianza medida | N0Bn/Pin | medida / fórmula | desvío |
|---|---|---|---|---|---|
| 10 dB | 0,1 | 3,727·10⁻⁴ | 3,750·10⁻⁴ | 0,994 | 1,11° |
| 20 dB | 0,01 | 3,630·10⁻⁵ | 3,750·10⁻⁵ | 0,968 | 0,35° |
| 30 dB | 0,001 | 3,670·10⁻⁶ | 3,750·10⁻⁶ | 0,979 | 0,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 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 , y el lazo la divide por : promedia el ruido de más de cien muestras.
Todo lo anterior supone el lazo enganchado. Cuando se prende, el oscilador está corrido 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
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, , y el total es . Las unidades tienen que ser coherentes: con y 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 MHz, que con MHz pide 11 852 muestras, 741 ns. medido es la última vuelta del error; el enganche, la última vez que el error pasa de 0,1 rad. Con el mismo y dos :
| ζ | detector | vueltas | TFL medido | medido / fórmula | enganche a 0,1 rad |
|---|---|---|---|---|---|
| 0,354 | producto | 196 | 23 028 · 1,44 µs | 1,94 | 24 738 · 1,55 µs |
| 0,354 | argumento | 27 | 2 907 · 182 ns | 0,245 | 4 324 · 270 ns |
| 0,707 | producto | 96 | 11 268 · 704 ns | 0,951 | 12 287 · 768 ns |
| 0,707 | argumento | 10 | 1 033 · 64,6 ns | 0,087 | 1 995 · 125 ns |
Con el detector de producto, que tiene una curva S senoidal, y , 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 . Con el coeficiente da 4,16 para y 8,33 para el 0,354 de la clase: con el mismo los dos tienen el mismo , y el tiempo va como . 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í es cero, aunque la fórmula dé un número.
El 1,3 de también es de un . En el escalón de fase lineal, cae casi justo en el mínimo del error de un lazo con , −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 , −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 .
El rango de captura. La filmina da hasta dónde el lazo puede engancharse solo:
Para la clase da 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 . El único techo que aparece es el del muestreo: a 7,84 GHz, cerca de , 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 acorta como , como y agranda el rango de captura en proporción; y agranda en proporción. Se elige con dos datos: cuánto puede estar corrido el oscilador y cuánta varianza de fase tolera la constelación.
Arriba, mover cambia la forma de y no su área. Con 0,354 el pico llega a 3,14 y el −3 dB cae a la mitad de ; con 2 casi no hay pico, pero la falda se estira. Mover no cambia nada arriba, porque el eje está en unidades de , y cambia todo abajo. De 60 a 30 MHz, el salto de 200 MHz pasa de 196 vueltas a 1 623 y 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 . De 60 a 120 MHz quedan 21 vueltas y 146 ns. Desde 320 MHz el error ya no da ninguna vuelta: medido es cero y la fórmula sigue dando 4,9 ns. Con el mismo , pasar de 0,354 a 0,707 parte 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.
El lazo de la clase de punta a punta: sus dos anchos de banda, 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:
wn/2*(zeta + 1/(4*zeta)) es : se multiplica por fs, no por fs/(2*pi). Dividir por da 9,55 MHz, un lazo veces más angosto que el verdadero. El bloque 3 lo comprueba integrando en .L y NCO suman la muestra actual, así que la fase de salida depende del error de esa misma muestra. Para feedback no es problema; en el tiempo hay que despejar el error, y por eso la función resuelve : en una línea con el diente de sierra, con dos pasos de Newton con el seno.