Unidad 7 · PLL · la curva S, la ganancia KPD, los detectores por producto, por parte imaginaria y por argumento, y la ambigüedad de 2π
El lazo no ve fases: ve dos ondas, la que entra y la que genera su oscilador. El detector de fase es el bloque que mira las dos y devuelve una tensión que dice cuánto están corridas y para qué lado. Nunca la devuelve como una recta. La fase sólo está definida módulo , así que su salida se repite en cada vuelta; cerca de cero se parece a una recta de pendiente , y ese número es lo único del detector que usa el modelo lineal del lazo. Lejos de cero cada detector se aparta a su manera, y dos de los tres meten la amplitud de la señal adentro de esa pendiente.
La filmina escribe las dos entradas del detector como dos cosenos de la misma frecuencia, la entrada del lazo y la salida del VCO:
El detector es, en palabras de la filmina, «el elemento que debe producir la tensión que va a controlar al VCO en función de la diferencia de fase» de sus dos entradas. Su salida es una función de esa diferencia y de nada más:
La frecuencia no aparece: es común a las dos ondas y se cancela en la resta. Lo que importa es , el error de fase. La función depende de cómo esté construido el detector; al gráfico de contra se le dice curva S, por la forma que tiene en los detectores reales. Lo que la filmina pide del detector ideal es que sea lineal:
Volts de salida por radián de error. En el diagrama de la filmina es un restador seguido de una ganancia: entra , se le resta y sale . Una lámina anterior escribe esa misma pendiente como ; no hay que confundirla con el Kp del script phase_system.m, que es la rama proporcional del filtro de lazo. En el script la ganancia del detector no aparece: está normalizada a 1 y metida adentro de Kp y Ki.
Es periódica. Correr la fase del VCO una vuelta entera no cambia la onda: . El detector recibe exactamente las mismas dos señales con y con , así que no puede entregar dos cosas distintas:
No es una limitación de un circuito en particular: ningún detector puede evitarla. Por eso hasta el detector ideal de la filmina, el que es «lineal (idealmente)», es una recta sólo entre y : afuera se repite, y la curva entera es un diente de sierra que salta de a . Una función periódica que no es constante no puede ser una recta.
No es lineal. Los detectores reales ni siquiera llegan al diente de sierra. Sube, se aplana y vuelve a bajar: la «S» de la filmina, que con los dos detectores senoidales de la sección 04 es literalmente un seno. Duplicar el error no duplica la salida, y por eso la filmina dice que la relación de entrada y salida del detector «es claramente no lineal».
Dónde se queda quieto el lazo. El VCO integra su control: avanza cuando el control es positivo y retrocede cuando es negativo. Con la fase de entrada quieta, y un filtro de ganancia positiva, un positivo hace crecer y achica ; uno negativo lo agranda. El error se mueve siempre en contra del signo de , y se detiene donde . Pero no todo cero sirve:
La filmina resuelve la no linealidad como se resuelve siempre en control: elige un punto de operación y linealiza alrededor. El punto es el enganche, .
Paso 1: Taylor alrededor de cero. Si es derivable en el origen,
Paso 2: el detector da cero con error cero. ; si no, el lazo no se quedaría quieto en .
Paso 3: tirar el resto. Con chico, es despreciable frente a , y queda la recta tangente:
es la pendiente de la curva S en el origen. Es lo que la filmina llama «esta relación linealizada nos permite usar las herramientas de Laplace»: en el modelo equivalente de fase el detector pasa a ser un restador y una ganancia, y el lazo entero sólo ve el producto . Del resto de la curva S no queda nada.
Cuándo deja de valer. Para una curva senoidal, , así que la recta se pasa por un error relativo . Despejado con fzero: llega al 1 % en rad (14,06°) y al 10 % en rad (45,07°). En la pendiente verdadera es cero y la recta todavía promete ; pasado ese punto la pendiente es negativa. El modelo lineal describe el lazo enganchado, que es lo que la filmina se propone mirar —«con el lazo enganchado (in-lock) […] utilizando únicamente un análisis linealizado»—, no la adquisición desde un error grande.
El libro de Rice construye tres. Dos necesitan la señal compleja, la que sale del conversor hacia abajo con sus dos ramas I y Q; el tercero trabaja con un tono real. Para los complejos, las dos entradas son las envolventes de las de la filmina:
Por parte imaginaria. Paso 1: el producto conjugado. Conjugar cambia el signo del ángulo, y multiplicar exponenciales suma los exponentes. El giro común está en los dos ángulos con el mismo signo y se cancela entero:
Queda una flecha quieta cuyo ángulo es el error. Paso 2: quedarse con cuánto sube. Por Euler, la parte imaginaria de esa flecha es
La pendiente sale de derivar: . En hardware son dos productos y una resta, . La curva S es un seno: cero en con pendiente negativa, el equilibrio inestable de la sección 02.
Por argumento. Sobre el mismo producto conjugado, en vez de la parte imaginaria se toma el ángulo, con una arcotangente de cuatro cuadrantes:
Es el diente de sierra de la filmina, construido. El ángulo de no depende de las amplitudes, así que la pendiente tampoco: vale 1 rad por rad en todo el intervalo, no sólo cerca de cero. En no hay equilibrio inestable: la curva no cruza el cero, salta, y justo ahí entrega la corrección más grande que puede. El precio es la arcotangente, que en hardware cuesta mucho más que una multiplicación.
Por producto. Con un tono real no hay flecha de la que tomar un ángulo. Lo que se hace es multiplicar la entrada por la salida del VCO corrida , . Paso 1: la identidad. Restando de se cancelan los términos en :
Paso 2: aplicarla con y . En la resta se cancela; en la suma, se duplica:
Paso 3: quedarse con lo lento. El primer término cambia al ritmo de ; el segundo oscila al doble de la frecuencia de la portadora y su promedio sobre un período es cero. La curva S es el promedio:
La misma forma que el de parte imaginaria, a la mitad de altura. La componente en no es un detalle: tiene amplitud , tanto como el máximo de la parte útil. Con rad y amplitudes 1, medida con la FFT del producto, la parte útil vale 0,1478 y la componente en , 0,5000: la salida instantánea del detector es sobre todo esa oscilación, y en muchos instantes tiene el signo contrario al del error. Un tono complejo no la tiene porque el producto conjugado cancela el giro entero; un coseno real es la suma de dos flechas que giran en sentidos opuestos, y una de ellas suma su giro con el del VCO. Es lo que dice la filmina: «solamente un detector de fase ideal podrá entregar una tensión continua pura para el control del VCO». Al resto lo saca el filtro de lazo, que es un pasabajos, y lo que se le escapa ensucia la fase del VCO: la filmina lo anota en el filtro, «la pureza espectral de la tensión de control determina en gran medida las componentes espectrales de la señal de salida del PLL». Cuánto deja pasar es asunto del filtro de lazo.
Por qué el VCO va corrido 90°. Multiplicando por tal cual, la misma cuenta con deja una parte lenta : máxima con las fases alineadas y cero a . Medida con da 0,4777, que es . Con esa curva el cruce de pendiente positiva está en , y el lazo engancha con el VCO en cuadratura.
| detector | entrada | curva S | KPD | en 2ωv | en ±π |
|---|---|---|---|---|---|
| producto | real | (AyAv/2) sen e | AyAv/2 | amplitud AyAv/2 | inestable |
| parte imaginaria | compleja | AyAv sen e | AyAv | nada | inestable |
| argumento | compleja | e, en (−π, π] | 1 | nada | salto |
En dos de los tres detectores la amplitud de la entrada está adentro de . El lazo no sabe cuál es el error verdadero: sólo ve el número que sale del detector. Con la entrada al doble ve el doble de error y corrige el doble de fuerte. Y no es sólo «más rápido»: con el PI de la filmina,
Si la amplitud llega veces la de diseño, se multiplica por y el amortiguamiento y la frecuencia natural escalan juntos, con . Con el lazo de phase_system.m (Kp = 0.005, Ki = Kp/100, la ganancia del detector y del NCO normalizada a 1, GHz), multiplicando el lazo por y midiendo el escalón con stepinfo:
| amplitud | c | ζ | fn | sobrepico |
|---|---|---|---|---|
| −6 dB | 0,5 | 0,2500 | 12,73 MHz | 50,28 % |
| la de diseño | 1 | 0,3536 | 18,01 MHz | 39,72 % |
| +6 dB | 2 | 0,5000 | 25,46 MHz | 29,49 % |
Seis decibeles de señal de menos, y el lazo pasa de 39,72 % a 50,28 % de sobrepico y pierde casi un tercio de su frecuencia natural. Por eso hace falta controlar el nivel antes del PLL: es otra vez el trabajo del control automático de ganancia, que en la Unidad 6 fijaba la escala del slicer y el paso del LMS, y acá fija la ganancia del lazo. La otra salida es normalizar la entrada dividiendo por su módulo, o usar el detector por argumento.
El de argumento no ve la amplitud, pero sí el ruido. Con ruido, cada muestra trae su fase corrida, y las que cruzan vuelven por el otro lado del diente de sierra: el promedio se tira hacia cero. Lejos del origen el efecto es enorme: con 10 dB de relación señal a ruido y el error en 175°, el promedio medido es 0,80 en lugar de 3,05. El diente de sierra pierde sus puntas. Para un error chico y positivo, el promedio es , con la fase que el ruido le agrega a una muestra, y derivando en cero la pendiente es . Con la densidad de la fase de un tono más ruido gaussiano complejo, y la relación entre la potencia del tono y la del ruido:
Vale 0 sin señal y tiende a 1 cuando sobra. Medida sobre un millón de muestras por punto:
| relación señal a ruido | pendiente medida | cerrada |
|---|---|---|
| 0 dB | 0,907 | 0,911 |
| 3 dB | 0,974 | 0,979 |
| 6 dB | 0,998 | 0,998 |
| 10 dB | 1,001 | 1,000 |
| 20 dB | 1,000 | 1,000 |
La pendiente es la de un ajuste cúbico sobre 41 errores entre −0,2 y 0,2 rad; con un millón de muestras por punto, la medida y la cerrada se separan como mucho en 0,004. A partir de unos 6 dB el efecto es invisible: en el régimen en que trabaja un lazo enganchado, el de argumento tiene sin importar la amplitud, que es justamente lo que los otros dos no tienen. Los dos senoidales, en cambio, no se tuercen con el ruido: el ruido entra sumando y su promedio es cero, así que su curva S medida es la cerrada, con cualquier relación señal a ruido (sección 07).
En los tres detectores dan cero y no se distinguen: la diferencia entre ellos no se ve donde el lazo vive. Moviendo el error aparecen de a una. Hasta unos 14° las tres curvas son su propia recta; a 45° el seno ya quedó un 10,0 % por debajo de su tangente; en 90° el producto y la parte imaginaria dejan de crecer, y de ahí a 180° corrigen cada vez menos mientras el de argumento sigue subiendo. En 180° los dos senoidales dan cero, con la pendiente al revés, y el de argumento salta de a . Abajo, la parte útil del de producto es la raya, y la onda alrededor tiene siempre la misma amplitud, haya error o no. La amplitud de entrada estira las dos curvas senoidales y su pendiente, y no toca el diente de sierra.
Como , cada múltiplo de es un cero estable, y el lazo engancha en el que le quede más cerca. La filmina lo marca al pie del diente de sierra: «ambigüedad de fase». Para reproducir una sinusoide da igual, porque y dan la misma onda. Importa cuando algo cuenta las vueltas, y cuando el error cruza durante un transitorio y el lazo cae en el cero de al lado: termina enganchado igual, con la fase una vuelta corrida.
Con QAM la ambigüedad se achica a : una constelación cuadrada es igual a sí misma girada 90°, así que un detector que mira los símbolos ve una curva S de período y no puede distinguir en qué cuadrante quedó. La filmina de introducción sólo lo deja planteado como pregunta, «¿rotaciones de fase múltiplos de π/2?», junto a la constelación girada de la modulación QAM.
Las tres curvas S medidas sobre un tono con ruido, la ganancia estimada contra la cerrada, y lo que la amplitud le hace al lazo de phase_system.m. Los detectores van en tiempo discreto, con el tono en rad por muestra: la cuenta de la sección 04 es la misma con cambiado por . La curva S es, por definición, el promedio de la salida con el error fijo. Lo que figura como comentario es la salida real de correrlo en R2026a.
%% 1. Las tres curvas S, medidas sobre un tono con ruido W0 = 2*pi/10; % frecuencia del tono, rad/muestra N = 1000; % 200 períodos enteros del término en 2*W0 SNR = 10; % dB: potencia del tono sobre la del ruido Ay = 1; rng(1) e = (-35:35)*pi/36; % de -175° a 175°, sin pisar ±pi S = zeros(numel(e), 3); for k = 1:numel(e) S(k,:) = detectar(e(k), Ay, SNR, N, W0); end cerrada = [Ay/2*sin(e); Ay*sin(e); e].'; figure; plot(e, S, '.', e, cerrada, '-'); grid on xlabel('e [rad]'); ylabel('\epsilon'); legend('producto', 'Im', 'arg') centro = abs(e) <= 2*pi/3; fprintf('max |medida - cerrada|, |e| <= 120°: %.4f %.4f %.4f\n', ... max(abs(S(centro,:) - cerrada(centro,:)))) sr = sqrt(Ay^2/2/10^(SNR/10)); sc = sqrt(Ay^2/10^(SNR/10)/2); fprintf('desvío esperado del promedio: %.4f %.4f\n', ... sr/sqrt(2*N), sc/sqrt(N)) fprintf('argumento en e = ±175°: %+.4f %+.4f (sin ruido: %+.4f)\n', ... S(1,3), S(end,3), e(end)) % max |medida - cerrada|, |e| <= 120°: 0.0090 0.0171 0.0200 % desvío esperado del promedio: 0.0050 0.0071 % argumento en e = ±175°: -0.8169 +0.7986 (sin ruido: +3.0543) %% 2. K_PD medida contra la cerrada, para tres amplitudes ep = linspace(-0.2, 0.2, 41); N2 = 1e6; for Ay = [0.5 1 2] G = zeros(numel(ep), 3); for k = 1:numel(ep) G(k,:) = detectar(ep(k), Ay, SNR, N2, W0); end K = zeros(1, 3); for d = 1:3 p = polyfit(ep, G(:,d), 3); % K_PD es el coeficiente de e K(d) = p(3); end fprintf('Ay = %.1f K_PD medida: %.4f %.4f %.4f cerrada: %.4f %.4f %.4f\n', ... Ay, K, Ay/2, Ay, 1) end % Ay = 0.5 K_PD medida: 0.2495 0.5003 1.0006 cerrada: 0.2500 0.5000 1.0000 % Ay = 1.0 K_PD medida: 0.5002 1.0000 1.0002 cerrada: 0.5000 1.0000 1.0000 % Ay = 2.0 K_PD medida: 1.0024 2.0005 1.0005 cerrada: 1.0000 2.0000 1.0000 %% 3. El de argumento no ve la amplitud, pero sí el ruido Ay = 1; for snr = [0 3 6 10 20] G = zeros(numel(ep), 1); for k = 1:numel(ep) g = detectar(ep(k), Ay, snr, N2, W0); G(k) = g(3); end p = polyfit(ep, G, 3); rho = 10^(snr/10); fprintf('SNR = %2d dB pendiente medida %.4f cerrada %.4f\n', ... snr, p(3), 1 - exp(-rho) + sqrt(pi*rho)*erfc(sqrt(rho))) end % SNR = 0 dB pendiente medida 0.9072 cerrada 0.9109 % SNR = 3 dB pendiente medida 0.9743 cerrada 0.9786 % SNR = 6 dB pendiente medida 0.9976 cerrada 0.9982 % SNR = 10 dB pendiente medida 1.0011 cerrada 1.0000 % SNR = 20 dB pendiente medida 0.9999 cerrada 1.0000 %% 4. Hasta dónde vale la recta, y la componente en 2*W0 x1 = fzero(@(x) sin(x)./x - 0.99, [0.01 1.5]); x10 = fzero(@(x) sin(x)./x - 0.90, [0.01 1.5]); fprintf('sen(e)/e = 0,99 en e = %.4f rad (%.2f°)\n', x1, x1*180/pi) fprintf('sen(e)/e = 0,90 en e = %.4f rad (%.2f°)\n', x10, x10*180/pi) % sen(e)/e = 0,99 en e = 0.2453 rad (14.06°) % sen(e)/e = 0,90 en e = 0.7867 rad (45.07°) n = (0:N-1).'; pr = cos(W0*n + 0.3) .* (-sin(W0*n)); % producto sin ruido, e = 0,3 X = fft(pr)/N; fprintf('parte útil: %.4f componente en 2*W0: %.4f\n', ... real(X(1)), 2*abs(X(N/5 + 1))) % parte útil: 0.1478 componente en 2*W0: 0.5000 pc = cos(W0*n + 0.3) .* cos(W0*n); % con el coseno, sin correr fprintf('con el coseno sin correr: %.4f (cos(0,3)/2 = %.4f)\n', ... mean(pc), cos(0.3)/2) % con el coseno sin correr: 0.4777 (cos(0,3)/2 = 0.4777) %% 5. Qué le hace la amplitud al lazo de la clase z = tf('z', 1); Kp = 0.005; Ki = Kp/100; G = (Kp + Ki*z/(z-1)) * z/(z-1); for c = [0.5 1 2] % K_PD real sobre la de diseño F = feedback(c*G, 1); si = stepinfo(F); fprintf('c = %.1f zeta = %.4f f_n = %.2f MHz sobrepico %.2f %%\n', ... c, Kp/2*sqrt(c/Ki), sqrt(c*Ki)*16e9/(2*pi)/1e6, si.Overshoot) end % c = 0.5 zeta = 0.2500 f_n = 12.73 MHz sobrepico 50.28 % % c = 1.0 zeta = 0.3536 f_n = 18.01 MHz sobrepico 39.72 % % c = 2.0 zeta = 0.5000 f_n = 25.46 MHz sobrepico 29.49 % %% Los tres detectores sobre el mismo error de fase, promediados en N muestras function g = detectar(e, Ay, snr, N, W0) n = (0:N-1).'; sr = sqrt(Ay^2/2/10^(snr/10)); % ruido real, tono real sc = sqrt(Ay^2/10^(snr/10)/2); % por componente, tono complejo y = Ay*cos(W0*n + e) + sr*randn(N, 1); yc = Ay*exp(1j*(W0*n + e)) + sc*(randn(N, 1) + 1j*randn(N, 1)); vs = -sin(W0*n); % el NCO corrido 90°, Av = 1 vc = exp(1j*W0*n); zz = yc .* conj(vc); g = [mean(y .* vs), mean(imag(zz)), mean(angle(zz))]; end
Con 10 dB, el peor apartamiento entre la curva S medida y la cerrada, sobre los 49 errores entre −120° y 120°, es 0,0090 en el de producto y 0,0171 en el de parte imaginaria, contra un desvío por punto de 0,0050 y 0,0071: 1,8 y 2,4 desvíos, lo esperable para el peor de 49 puntos. El ruido no tuerce esas dos curvas, sólo las salpica. Las medidas caen sobre , y 1 con un error máximo de 0,24 %, y el bloque 5 reproduce el 39,72 % de sobrepico del lazo de clase.
Tres detalles que muerden si no se los conoce:
N tiene que ser múltiplo de 5. Con otro largo queda un resto de hasta , que con N = 1003 es 8·10⁻⁴: chico, pero no cero. En el lazo no hay promedio exacto: hay un pasabajos, y lo que deja pasar llega al VCO.angle devuelve . En exacto, el redondeo decide de qué lado del salto cae cada muestra: por eso la grilla para en ±175°. Y con ruido, el promedio de angle cerca de no es el error sino algo tirado hacia cero, que es exactamente lo de la sección 05.cos(W0*n) en lugar de -sin(W0*n) el bloque 4 da , que no se anula en cero. Y el Kp del bloque 5 es el del filtro, no la del detector: la del detector es el c.