Unidad 6 · Ecualizadores adaptativos · ecualización ciega, criterio de módulo constante, fase y pasaje a DD
El LMS corrige los taps con el error entre la salida y el símbolo que se mandó, y eso supone que el receptor sabe qué símbolo se mandó. Al arrancar no lo sabe: no hay secuencia de entrenamiento y el ojo está cerrado, así que el slicer se equivoca casi siempre. El CMA cambia la pregunta. En vez de «¿qué símbolo era?», pregunta «¿la salida está a la distancia correcta del origen?», y eso se contesta sin conocer un solo símbolo. En la cadena canal → AGC → ecualizador → slicer ocupa el lugar del LMS y cambia una sola cosa: el error que vuelve a los taps.
El ecualizador adaptativo necesita una referencia contra la cual medir su error. La filmina de modos de entrenamiento da tres. La secuencia de entrenamiento manda símbolos que el receptor conoce, y cuesta capacidad y coordinación. El modo dirigido por decisiones (DD) usa la salida del slicer, , como si fuera el símbolo verdadero, y funciona mientras el slicer acierte. Las dos están en entrenamiento y modo dirigido por decisiones. La tercera es la ecualización ciega: adaptar usando sólo una propiedad estadística de la constelación, sin ver ningún símbolo. Godard la llamó self-recovering equalization: el receptor se recupera solo.
La DD sola no arranca con una QAM densa. Con la cadena del script de clase —64-QAM, dB, ecualizador de 63 taps a T/2— y la DD encendida desde el primer símbolo, la SER del último tercio queda en 94,0 %. La salida apenas crece: arranca a 0,079 veces el tamaño de la constelación y termina a 0,19. La filmina lo deja como pregunta —«investigar qué ocurre con modulaciones de mayor orden»—, y ésa es la respuesta medida.
La idea de la filmina es «pensar en la magnitud del símbolo». Si la salida del ecualizador tuviera ISI, cada muestra sería el símbolo más pedazos de los vecinos, y su módulo se desparramaría. Un costo que mida ese desparramo alrededor de un radio fijo mide la ISI sin mirar los datos. La filmina da dos:
con los radios de referencia
Son los casos y de la dispersión de orden del paper de Godard (el extra 6.1), . De Godard dice que da un algoritmo «notablemente simple de implementar». En ninguno de los dos aparece ni la fase de : sólo la salida y una constante que se calcula una vez con la estadística de la constelación.
La constante es un cociente de momentos, y para las constelaciones cuadradas tiene forma cerrada. Con los niveles de qammod:
| constelación | E|A|² | E|A|⁴ | ρ₂ | √ρ₂ | radios distintos |
|---|---|---|---|---|---|
| QPSK | 2 | 4 | 2 | 1,414 | 1 |
| 16-QAM | 10 | 132 | 13,2 | 3,633 | 3 |
| 64-QAM | 42 | 2436 | 58 | 7,616 | 9 |
Con QPSK todos los símbolos están sobre el mismo círculo y, con ecualización perfecta, en cada símbolo: el costo vale cero. Con 64-QAM los símbolos viven en nueve anillos, de a , y el costo no se anula ni con la salida perfecta. Por qué igual sirve es la sección 05.
El ecualizador es un transversal (el FIR transversal): con los taps en el vector y las muestras de la línea de retardo en ,
sin conjugar. Es el W.'*buffer del script, que avisa en un comentario: «' transpone y conjuga, usar .'».
Paso 1: el costo instantáneo. Igual que en el LMS, la esperanza no se conoce y se reemplaza por el valor de este símbolo: .
Paso 2: derivar el módulo al cuadrado. , con . Tomando y como variables independientes, que es lo que se hace con taps complejos, no depende de y depende linealmente:
Paso 3: la regla de la cadena. La derivada de respecto de es , así que
Paso 4: bajar por el gradiente. Con la misma convención que la filmina usa para el LMS, , el 2 se cancela y el signo se mete adentro del paréntesis:
Es la ecuación (28) de Godard. La estructura es la del LMS de la filmina: el mismo buffer, el mismo multiplicador, el mismo paso . Cambia sólo cómo se arma , y por eso el diagrama «CMA + DD» de la filmina tiene los dos errores calculados a la vez y un selector SEL que elige cuál entra al LMS. Con sale .
El error tiene una lectura directa. Si , apunta en la dirección de y la agranda; si , apunta al revés y la achica. Nunca empuja de costado: el CMA mueve cada muestra hacia el anillo o desde el anillo, en la dirección radial, y nada más.
De dónde sale ρ₂. Supongamos la ISI ya eliminada y la salida escalada, . Para que eso sea un punto de equilibrio, la corrección media en la dirección del símbolo tiene que ser cero:
Pedir da , que es la ecuación (25) de Godard. O sea: no decide la forma de la solución, decide su escala. Con cualquier otra constante el ecualizador converge igual, sólo que a una salida más grande o más chica.
El error del script es otro. La filmina lo marca como «usado en el script»:
No es ni ni : mezcla el módulo sin elevar de uno con la constante del otro. La misma cuenta de equilibrio da , que para 64-QAM, con , vale 1,0253: la salida queda un 2,5 % más grande que la constelación. El script, además, estima con los primeros mil símbolos transmitidos y obtiene 7,7193 en lugar de , así que la predicción pasa a 1,0393. Medido al final del CMA: 1,0317. Con el error de Godard de la ecuación de arriba, en la misma cadena, 1,0042, contra 1 predicho. En los dos casos el ruido corre la escala menos de un 1 %. Para el script no importa, porque después la DD la lleva a 0,9875 igual.
El costo depende sólo de . Si se giran todos los taps un mismo ángulo, , la salida gira y ningún módulo cambia: es el mismo. El mínimo no es un punto sino un círculo entero de soluciones, una por ángulo, y el algoritmo no tiene ninguna razón para preferir una.
Con un error de fase de portadora pasa algo más fuerte. Si la señal recibida llega girada, , los taps que salen del CMA son los mismos, no parecidos. Por inducción: si en el paso los taps son iguales, la salida es , el módulo es el mismo, el error es , y la corrección vale
que es la de antes. Los taps evolucionan idénticos y la salida sale girada exactamente . Medido en la cadena de clase, con la misma semilla y cuatro errores de fase:
| φ, error de fase | giro al final del CMA | escala |g| | MSE sin el giro | SER |
|---|---|---|---|---|
| 0° | −0,41° | 1,0317 | −19,09 dB | 9,5 % |
| 10° | 9,59° | 1,0317 | −19,09 dB | 50,5 % |
| 30° | 29,59° | 1,0317 | −19,09 dB | 94,2 % |
| 90° | 89,59° | 1,0317 | −19,09 dB | 99,9 % |
Últimos 20 000 símbolos antes del pasaje a DD. El giro, la escala y el MSE salen de ajustar una ganancia compleja entre la salida y los símbolos transmitidos, alineados por correlación; el MSE es el que queda después de sacar , normalizado a . Tres columnas iguales en las cuatro filas: el CMA hizo el mismo trabajo. Sólo la SER cambia, porque el slicer sí mira la fase. El −0,41° de la primera fila es lo que la fase derivó durante la adaptación: nada la frena ni la empuja a cero.
La consecuencia es la que la filmina resume en el título del paper de Godard: equalization and carrier tracking, dos problemas. El CMA ecualiza y deja la constelación girada un ángulo arbitrario, y otro bloque, después del ecualizador, tiene que enderezarla. En el esquema de Godard (su figura 4) ese bloque es un lazo de fase dirigido por decisiones a la salida del ecualizador.
Con una QAM el módulo no es constante, y el error no se anula ni con la salida perfecta. Un símbolo en tiene , y con recibe una patada de ; uno en recibe . En promedio se cancelan, pero las patadas siguen: con el ecualizador ya convergido el CMA mueve los taps en cada símbolo. Por eso, en la cadena de clase, dejar el CMA hasta el final termina con un MSE de −19,07 dB y una SER de 8,9 %, y pasar a DD termina en −20,03 dB y 5,1 % (150 000 símbolos con exacta, medido sobre el último tercio).
Lo que hace que igual converja es la curtosis de la fuente, que el extra 6.2 (Johnson et al.) define como
Mide cuánto varía el módulo: vale 1 si todos los símbolos están en el mismo círculo y 2 para una gaussiana compleja. Desarrollando el cuadrado, : a potencia de salida fija, minimizar es minimizar el cuarto momento, o sea la curtosis de la salida. Y la ISI sube la curtosis, porque la salida con ISI es una suma de símbolos independientes, y una suma se parece más a una gaussiana que cada sumando. El CMA empuja la curtosis de la salida hacia abajo, y el punto más bajo que puede alcanzar es el de la fuente sola: la salida sin ISI.
| momento | escala |g| | MSE sin el giro | curtosis de la salida |
|---|---|---|---|
| sin adaptar | 0,079 | −4,78 dB | 1,634 |
| k = 5 000 | 0,60 | −5,0 dB | 1,653 |
| k = 10 000 | 0,91 | −8,5 dB | 1,514 |
| k = 20 000 | 1,02 | −16,7 dB | 1,412 |
| k = 50 000 | 1,03 | −18,9 dB | 1,393 |
| fin, en DD | 0,99 | −20,1 dB | 1,394 |
Cadena de clase, ventanas de mil símbolos que terminan en el símbolo ; «sin adaptar» son los símbolos 1 000 a 20 000 con los taps iniciales, y «fin» el último tercio. La fuente sola da ; con el ruido que queda a −20 dB la cuenta cerrada da 1,393, que es donde se clava la medición.
Eso explica la condición que pone Godard, su ecuación (35): , que es exactamente . La fuente tiene que ser sub-gaussiana. Si fuera gaussiana, la salida con ISI sería otra gaussiana con la misma curtosis, y el costo no tendría cómo distinguirla de la buena. La tabla 2 de Johnson et al. ubica las QAM uniformes: 1,32 para 16-QAM, 1,381 para 64-QAM, 1,399 para 1024-QAM, contra 2 de la gaussiana. Cuanto más cerca de 2, más plana la superficie de costo y más lenta la convergencia; las constelaciones con shaping, que dan más probabilidad a los puntos internos, se acercan a 2 y ahí el CMA deja de servir. Cómo se arma la constelación está en la modulación QAM.
no es convexo. Godard (sección V) encuentra una familia entera de puntos estacionarios: respuestas globales con muestras no nulas, todas del mismo módulo. La de una sola muestra es la ecualización perfecta, y es el mínimo absoluto siempre que . Johnson et al. muestran superficies con varios mínimos: uno por cada retardo y cada fase cuando todo es ideal, todos de la misma profundidad, y de profundidades distintas cuando el ecualizador es más corto que el canal. A diferencia del MSE entrenado, que es un paraboloide con un solo fondo, acá el punto de partida decide adónde se llega.
El origen es el peor lugar para empezar. Con la salida es cero y el gradiente también; y a lo largo de cualquier dirección, escalando los taps por , el costo es , que baja al alejarse de . El origen es un máximo. Por eso Godard inicializa todos los taps en cero salvo uno, el de referencia, con un valor mínimo —su ecuación (38)—, y en sus simulaciones con necesitó ese tap mayor que 1,3 en un canal y mayor que 2 en el otro. Johnson et al. lo llaman single spike y lo alinean con el centro de masa de la respuesta del canal.
El script arranca así: 63 taps en cero y el del medio, W(32), en 2,0. Con el AGC dejando la entrada a 0,3 de valor eficaz, la salida sin adaptar mide 0,079 veces la constelación, muy adentro del anillo de radio , y lo primero que hace el CMA es agrandarla. La condición (38) pide, en esas unidades, , y el script arranca en 0,006: converge igual. Godard lo avisa, la condición es suficiente, no necesaria.
El CMA arranca con el ojo cerrado pero deja dos cosas sin hacer: el ruido propio de la sección 05 y el giro de la sección 04. La DD hace bien justo esas dos, pero no arranca. La receta del script las encadena: el primer tercio de la simulación con el error CMA y paso , el resto con el error DD, , y paso . El último tercio se usa para medir la SER.
| símbolo k | modo | escala |g| | MSE sin el giro | SER |
|---|---|---|---|---|
| 1 000 | CMA | 0,11 | −4,3 dB | 97,0 % |
| 10 000 | CMA | 0,91 | −8,5 dB | 78,5 % |
| 20 000 | CMA | 1,02 | −16,7 dB | 22,5 % |
| 30 000 | CMA | 1,02 | −18,9 dB | 10,1 % |
| 166 000 | CMA | 1,03 | −19,2 dB | 8,4 % |
| 180 000 | DD | 0,99 | −20,0 dB | 4,1 % |
| 450 000 | DD | 0,99 | −20,0 dB | 5,5 % |
Ventanas de mil símbolos, así que cada SER lleva un par de puntos de ruido. El CMA abre el ojo en unos 30 000 símbolos y después se queda quieto; el pasaje a DD, en el símbolo 166 666, baja el MSE un decibel y la escala a 0,99. Sobre el último tercio entero la SER final es 4,96 %.
La DD también endereza el giro, pero sólo si es chico. Con el mismo CMA y distintos errores de fase de portadora, lo que queda al final:
| φ | giro al pasar a DD | giro al final | SER final |
|---|---|---|---|
| 0° a 12° | −0,41° a 11,59° | 0,00° | 4,96 % |
| 14° a 24° | 13,59° a 23,59° | 12,3° | 77 % |
| 30° | 29,59° | 23,8° | 91,9 % |
| 40° | 39,59° | 37,7° | 95,9 % |
| 60° | 59,59° | 65,6° | 98,7 % |
| 80° a 100° | 79,59° a 99,59° | 90,00° | 99,92 % |
Cadena de clase, 500 000 símbolos, barrido de 0° a 40° cada 2° más 60°, 80°, 90° y 100°; la SER es la del último tercio. Hasta unos 12° la DD lleva el giro a cero y la SER queda en la del caso sin error de fase. Más allá, la DD se engancha en un equilibrio falso —12,3° para todo el tramo de 14° a 24°— y la SER se dispara. La última fila es la trampa: a 90° la constelación girada es la misma constelación, la DD converge perfecto —escala 0,9875 y MSE −20,06 dB, idénticos al caso sin giro— y todas las decisiones están mal. Una QAM cuadrada no tiene manera de saber dónde está el cero de fase módulo 90°. Godard lo resuelve con codificación diferencial en el transmisor; con símbolos conocidos también se resuelve, y eso es de entrenamiento y DD. El script de clase no tiene error de fase, así que nada de esto aparece si no se lo agrega.
Sin adaptar, la salida es una mancha chica en el centro: el ojo está cerrado y además la escala está lejos. Al avanzar, primero la mancha crece hasta el anillo —el CMA arregla la escala antes que la forma—, después la curtosis baja y aparecen las 64 nubes, y aparecen giradas . La curva de abajo lo muestra con dos trazos: el MSE sin el giro baja con el ojo, y el MSE con el giro se frena cerca de −9 dB, porque un giro de 20° es por sí solo un error de de la potencia, −9,2 dB, por más abierto que esté el ojo. Al cruzar el símbolo 50 000 entra la DD. Con ° se engancha a unos 12° y la SER queda arriba del 75 %; bajando por debajo de unos 12° la endereza. Con 90° todo se ve perfecto y la SER llega casi al 100 %.
El simulador corre la misma cadena que el script, con tres diferencias: 150 000 símbolos en lugar de 500 000, exacta en lugar de estimada, y su propio generador de números al azar. Corrida en MATLAB con esos mismos parámetros, termina el CMA con escala 1,0115, MSE −18,91 dB y SER 9,8 %, y la DD con 0,9877, −20,03 dB y 5,1 %; el simulador da 1,015, −19,23 dB, 7,9 % y 0,988, −20,06 dB, 5,0 %. La DD endereza hasta un giro de 11,45° y se engancha desde 12,45° en MATLAB; en el simulador ya falla con 12,03°. El límite está ahí, en unos 12°.
El script basic_transceiver_CMA_equalizer.m de la clase corre tal cual, con los slicer*.m en la misma carpeta. Con rng(1) antes de llamarlo da SER = 0.04956 y ber_aprox = 0.0083, con RCMA = 7.7193. Lo que sigue es la misma cadena sin los gráficos, con un error de fase de portadora agregado y con las mediciones de esta nota. Lo que figura como comentario es la salida real de correrlo en R2026a.
%% El CMA del script de clase, medido: MSE y ángulo al final del CMA y de la DD rng(1) L = 0.5e6; M = 64; N = 2; [I, Q] = meshgrid(-7:2:7); A = I(:) + 1j*Q(:); % la 64-QAM de qammod rho2 = mean(abs(A).^4) / mean(abs(A).^2); kappa = mean(abs(A).^4) / mean(abs(A).^2)^2; fprintf('rho2 = %.4f R_CMA = sqrt(rho2) = %.4f kappa = %.4f\n', rho2, sqrt(rho2), kappa) % rho2 = 58.0000 R_CMA = sqrt(rho2) = 7.6158 kappa = 1.3810 for phi = [0 10 30 90] % error de fase de portadora, en grados [x, yk, ak, K] = transceptor(L, phi); a = medir(yk, ak, x, K-20000, K-1); % los últimos 20 000 símbolos del CMA b = medir(yk, ak, x, fix(2*L/3), length(yk)-100); % el último tercio, en DD fprintf('phi = %2d | fin CMA: ang %6.2f |g| %.4f MSE %6.2f dB SER %.3f | fin DD: ang %6.2f |g| %.4f MSE %6.2f dB SER %.4f\n', ... phi, a.ang, a.gan, a.mse, a.ser, b.ang, b.gan, b.mse, b.ser) end % phi = 0 | fin CMA: ang -0.41 |g| 1.0317 MSE -19.09 dB SER 0.095 | fin DD: ang -0.00 |g| 0.9875 MSE -20.06 dB SER 0.0496 % phi = 10 | fin CMA: ang 9.59 |g| 1.0317 MSE -19.09 dB SER 0.505 | fin DD: ang -0.00 |g| 0.9875 MSE -20.06 dB SER 0.0496 % phi = 30 | fin CMA: ang 29.59 |g| 1.0317 MSE -19.09 dB SER 0.942 | fin DD: ang 23.82 |g| 0.7379 MSE -17.38 dB SER 0.9193 % phi = 90 | fin CMA: ang 89.59 |g| 1.0317 MSE -19.09 dB SER 0.999 | fin DD: ang 90.00 |g| 0.9875 MSE -20.06 dB SER 0.9992 function [x, yk, ak, K] = transceptor(L, phi) % basic_transceiver_CMA_equalizer.m sin los gráficos, más un giro de portadora rng(1) BR = 128e9; N = 2; Nch = 8; EbNo = 13; M = 64; k = log2(M); x = qammod(randi([0 M-1], L, 1), M); RCMA = sqrt(mean(abs(x(1:1000)).^4)/mean(abs(x(1:1000)).^2)); hrc = rcosdesign(0.1, 10, Nch, "sqrt"); hrc = hrc./sum(hrc); ych = filter(hrc, 1, upsample(x, Nch)); SNR = 10^((EbNo - 10*log10(Nch) + 10*log10(k))/10); sigma = sqrt(var(ych)/SNR/2); rx1 = (ych + sigma*(randn(size(ych)) + 1j*randn(size(ych)))) * exp(1j*phi*pi/180); rx = filter(fir1(5, 0.9/Nch), 1, rx1); rxch = rx(5:Nch/N:end); i_equalizer = rxch(2:end) * 0.3/std(rxch); % AGC Lrx = length(i_equalizer); NTAPS = 63; W = zeros(NTAPS,1); W((NTAPS+1)/2) = 2.0; buffer = zeros(NTAPS,1); yk = zeros(fix(Lrx/N),1); ak = yk; for m = 1:Lrx buffer(2:end) = buffer(1:end-1); buffer(1) = i_equalizer(m); yfilt = W.'*buffer; if mod(m,N) == 0 yk(m/N) = yfilt; ak(m/N) = slicer(yfilt, M); if m < fix(Lrx/3) % CMA el primer tercio Ek = -yfilt*(abs(yfilt) - RCMA); step = 2^-11; else % DD después Ek = ak(m/N) - yfilt; step = 2^-9; end W = W*(1 - step*1e-4) + step*Ek*conj(buffer); end end K = fix(fix(Lrx/3)/N); % símbolo del cambio a DD end function r = medir(yk, ak, x, i0, i1) % Alinea con el retardo de máxima correlación y ajusta una ganancia compleja g Y = yk(i0:i1); c = zeros(81,1); for d = 0:80, c(d+1) = abs(sum(Y .* conj(x((i0:i1)-d)))); end [~, d] = max(c); d = d - 1; A = x((i0:i1)-d); g = sum(Y.*conj(A)) / sum(abs(A).^2); r.ang = angle(g)*180/pi; % el giro que quedó r.gan = abs(g); % la escala que quedó r.mse = 10*log10(mean(abs(Y/g - A).^2) / mean(abs(A).^2)); % MSE sin el giro ni la escala r.ser = mean(ak(i0:i1) ~= A); end
Cinco detalles que muerden:
+ step*Ek*conj(buffer). Copiar la fórmula de la filmina en la actualización del script sube por la superficie en vez de bajar.RCMA se estima con los símbolos transmitidos. La línea que la calcula promedia sobre x(1:1000), y el receptor no tiene x. Es por comodidad, porque es una constante de la constelación: para 64-QAM. El comentario del script dice que para 16-QAM vale 3,64; la cuenta exacta es .ch = [1]: el canal no tiene ISI. Lo que el ecualizador saca es la ISI del pulso raíz de coseno realzado sin su filtro adaptado, más la del antialias: el FSE aprende el filtro adaptado. Sin adaptar, esa ISI deja un MSE de −4,78 dB, y el ojo de una 64-QAM está cerrado.coeffs ocupa medio giga. El script guarda los 63 taps complejos en cada uno de los 499 999 símbolos: bytes, 504 MB. Para mirar la evolución de los taps alcanza con guardar uno de cada cien.