Bitácora · DCSS · Concepto

El detector de fase

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 2π, así que su salida se repite en cada vuelta; cerca de cero se parece a una recta de pendiente KPD, 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.

01 · La definición

La filmina escribe las dos entradas del detector como dos cosenos de la misma frecuencia, la entrada del lazo y la salida del VCO:

y(t)=Aycos(ωvt+θ(t)),v(t)=Avcos(ωvt+φ(t))

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:

ε(t)=W(θ(t)−φ(t))=W(e(t)),e(t)=θ(t)−φ(t)

La frecuencia ωv no aparece: es común a las dos ondas y se cancela en la resta. Lo que importa es e, el error de fase. La función W depende de cómo esté construido el detector; al gráfico de W contra e 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:

ε(t)=KPDe(t),[KPD]=V/rad

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 KPDe. Una lámina anterior escribe esa misma pendiente como kp; 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.

02 · La curva S: periódica y no lineal

Es periódica. Correr la fase del VCO una vuelta entera no cambia la onda: cos(ωvt+φ+2π)=cos(ωvt+φ). El detector recibe exactamente las mismas dos señales con e y con e+2π, así que no puede entregar dos cosas distintas:

W(e+2π)=W(e)

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 e=θ−φ; uno negativo lo agranda. El error se mueve siempre en contra del signo de W(e), y se detiene donde W=0. Pero no todo cero sirve:

03 · La linealización y la ganancia KPD

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, e≈0.

Paso 1: Taylor alrededor de cero. Si W es derivable en el origen,

W(e)=W(0)+W′(0)e+O(e2)

Paso 2: el detector da cero con error cero. W(0)=0; si no, el lazo no se quedaría quieto en e=0.

Paso 3: tirar el resto. Con e chico, e2 es despreciable frente a e, y queda la recta tangente:

W(e)≈KPDe,KPD=W′(0)

KPD 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 KPDKVL(s). Del resto de la curva S no queda nada.

Cuándo deja de valer. Para una curva senoidal, sene=e−e3/6+…, así que la recta se pasa por un error relativo 1−sene/e≈e2/6. Despejado con fzero: llega al 1 % en e=0,2453 rad (14,06°) y al 10 % en e=0,7867 rad (45,07°). En π/2 la pendiente verdadera es cero y la recta todavía promete KPD; 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.

04 · Los tres detectores

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:

y~(t)=Ayej(ωvt+θ),v~(t)=Avej(ωvt+φ)

Por parte imaginaria. Paso 1: el producto conjugado. Conjugar cambia el signo del ángulo, y multiplicar exponenciales suma los exponentes. El giro común ωvt está en los dos ángulos con el mismo signo y se cancela entero:

y~v~*=AyAvej(θ−φ)=AyAveje

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

W(e)=Im{y~v~*}=AyAvsene,KPD=AyAv

La pendiente sale de derivar: AyAvcos0. En hardware son dos productos y una resta, yQvI−yIvQ. 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:

W(e)=arg{y~v~*}=ellevado a (−π,π],KPD=1

Es el diente de sierra de la filmina, construido. El ángulo de AyAveje 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 90°, −Avsen(ωvt+φ). Paso 1: la identidad. Restando sen(a−b) de sen(a+b) se cancelan los términos en senacosb:

cosasenb=12[sen(a+b)−sen(a−b)]

Paso 2: aplicarla con a=ωvt+θ y b=ωvt+φ. En la resta ωvt se cancela; en la suma, se duplica:

y(t)·[−Avsen(ωvt+φ)]=AyAv2sen(θ−φ)⏟lento−AyAv2sen(2ωvt+θ+φ)⏟en 2ωv

Paso 3: quedarse con lo lento. El primer término cambia al ritmo de e; 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:

W(e)=AyAv2sene,KPD=AyAv2

La misma forma que el de parte imaginaria, a la mitad de altura. La componente en 2ωv no es un detalle: tiene amplitud AyAv/2, tanto como el máximo de la parte útil. Con e=0,3 rad y amplitudes 1, medida con la FFT del producto, la parte útil vale 0,1478 y la componente en 2ωv, 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 v(t) tal cual, la misma cuenta con cosacosb deja una parte lenta AyAv2cose: máxima con las fases alineadas y cero a ±π/2. Medida con e=0,3 da 0,4777, que es cos(0,3)/2. Con esa curva el cruce de pendiente positiva está en −π/2, y el lazo engancha con el VCO en cuadratura.

detectorentradacurva SKPDen 2ωven ±π
productoreal(AyAv/2) sen eAyAv/2amplitud AyAv/2inestable
parte imaginariacomplejaAyAv sen eAyAvnadainestable
argumentocomplejae, en (−π, π]1nadasalto

05 · La ganancia depende de la amplitud

En dos de los tres detectores la amplitud de la entrada está adentro de KPD. 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,

ζ=Kp2KVKPDKi,ωn=KVKPDKi

Si la amplitud llega c veces la de diseño, KPD se multiplica por c y el amortiguamiento y la frecuencia natural escalan juntos, con c. Con el lazo de phase_system.m (Kp = 0.005, Ki = Kp/100, la ganancia del detector y del NCO normalizada a 1, fs=16 GHz), multiplicando el lazo por c y midiendo el escalón con stepinfo:

amplitudcζfnsobrepico
−6 dB0,50,250012,73 MHz50,28 %
la de diseño10,353618,01 MHz39,72 %
+6 dB20,500025,46 MHz29,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 e−2πP(Δ>π−e), con Δ la fase que el ruido le agrega a una muestra, y derivando en cero la pendiente es 1−2πpΔ(π). 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:

KPD=1−e−ρ+πρerfc(ρ)

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 ruidopendiente medidacerrada
0 dB0,9070,911
3 dB0,9740,979
6 dB0,9980,998
10 dB1,0011,000
20 dB1,0001,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 KPD=1 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).

Simulación Las tres curvas S — arriba, la salida de cada detector contra el error de fase, entre −2π y 2π; abajo, la salida instantánea del de producto, que es lo que entra al filtro de lazo. Arranca enganchado: movelo.
producto parte imaginaria argumento
producto — parte imaginaria — argumento — KPD de los tres — seno contra la recta — en 2ωv — el lazo —

En e=0 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.

06 · La ambigüedad de 2π

Como W(e+2π)=W(e), cada múltiplo de 2π 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 φ+2π 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 π/2: 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 π/2 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.

07 · El análisis en MATLAB

Las tres curvas S medidas sobre un tono con ruido, la ganancia KPD 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 Ω0=2π/10 rad por muestra: la cuenta de la sección 04 es la misma con ωvt cambiado por Ω0n. 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 KPD medidas caen sobre Ay/2, Ay 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:

Para tener a mano

  1. ε=W(θ−φ): el detector entrega una función del error de fase e y de nada más. Su gráfico es la curva S.
  2. La curva S es periódica de 2π en cualquier detector, porque la fase sólo existe módulo 2π. Hasta el ideal es un diente de sierra, no una recta.
  3. Engancha en los ceros con pendiente positiva; los de pendiente negativa (±π en los senoidales) son equilibrios inestables. Entre π/2 y π, más error da menos corrección.
  4. KPD=W′(0), en V/rad. Con un seno, la recta se pasa 1 % a 14,06° y 10 % a 45,07°.
  5. Producto: (AyAv/2)sene más una componente en 2ωv de amplitud AyAv/2 que filtra el lazo. Parte imaginaria: AyAvsene. Argumento: e en (−π,π], pendiente 1.
  6. Si la amplitud cambia en un factor c, ζ y ωn cambian en c. El AGC antes del PLL no es opcional.
  7. El lazo no distingue e de e+2π; con QAM cuadrada, tampoco de e+π/2.
← Anterior Siguiente → Inicio
Relacionados El PLL El VCO y el NCO El filtro de lazo y el PLL de segundo orden El control automático de ganancia La modulación QAM