Bitácora · DCSS · Concepto

El transceptor con ecualizador adaptativo

Unidad 6 · Ecualizadores adaptativos · la cadena de punta a punta, qué señal hay en cada punto, dónde entra el ruido y cuánto cuesta

Un receptor que ecualiza adaptativamente es un filtro FIR delante del slicer, con un lazo que lo corrige símbolo a símbolo usando el error de la decisión. El filtro no sabe nada del canal: arranca con un solo tap distinto de cero y aprende. Todo lo demás de la cadena está para que ese lazo funcione. El AGC fija la escala del paso, el sobremuestreo por 2 hace que no importe en qué fase se muestrea, la referencia —símbolos de entrenamiento o las propias decisiones— le dice hacia dónde ir, y la BER se cuenta recién cuando los taps dejaron de moverse. Es la cadena de la guía del TP6 y de los scripts B_FSE_equalizer.m y basic_transceiver_DD_equalizer.m de la clase.

01 · La cadena

Con la notación de la filmina: ak son los símbolos, yn la entrada del ecualizador a dos muestras por símbolo, zn su salida, xk la salida diezmada a tasa de símbolo y a^k la decisión. El lazo azul es lo único que separa este receptor de uno fijo: el error sale del slicer a tasa de símbolo y vuelve a corregir los taps de C(z). El sumador punteado marca el otro lugar donde puede entrar el ruido, antes del canal, y la sección 05 cuenta por qué eso cambia todo.

02 · Los bloques, uno por uno

El ecualizador de esta cadena es lineal. Invertir el canal a secas es el zero forcing, y sacar la ISI con decisiones pasadas en lugar de filtrar es el DFE; el LMS no elige entre ellos: persigue el MSE, y la sección 04 muestra cómo se reconoce a dónde llegó.

Las mediciones de esta nota usan la cadena de arriba con 16-QAM, 31 taps, β=0,03, el tap central inicial en Es/target para que la salida arranque con la escala de la constelación, y entrenamiento. Con una QAM densa, arrancar en modo dirigido por decisiones no engancha: el script DD de la clase, tal como viene, con 64-QAM, termina con la SER en 0,94 (sección 08).

03 · Qué señal hay en cada punto

A la entrada del ecualizador, las muestras de los instantes de símbolo no son la constelación. Las ensucian dos cosas: la ISI del canal y la del propio pulso, porque llega la raíz del coseno realzado sin la otra mitad, y la raíz sola no es de Nyquist. Con el ecualizador sin entrenar —un solo tap, que deja pasar la muestra central escalada— eso es lo que ve el slicer. A la salida, después de converger, las nubes se separan. Medido en MATLAB con fc=0,4BR, Eb/N0=16 dB y ruido después del canal, congelando los taps después del entrenamiento y midiendo sobre los 20 000 símbolos siguientes:

símbolos de entrenamientoSERSNR en el slicer
0 (un solo tap)0,2699,88 dB
3000,10712,56 dB
10000,03414,46 dB
30000,01215,72 dB
10 0003,4·10⁻³16,78 dB

La SNR en el slicer es 10log10(Es/E|ak−xk|2), ISI y ruido juntos. Sin ecualizar, uno de cada cuatro símbolos sale mal: es el ojo cerrado. Con 10 000 símbolos de entrenamiento la SER baja a 3,4·10⁻³ (68 errores en 20 000) y la SNR queda a 0,45 dB de la del ecualizador de Wiener de 31 taps, que es 17,23 dB. Lo que falta hasta el techo de Es/N0=22,02 dB no es culpa del LMS: el óptimo tampoco lo alcanza. Es lo que cuesta este canal con el ruido sumado después, y la sección 05 dice por qué.

04 · La respuesta combinada, después de converger

Lo que ven los símbolos de punta a punta es el pulso total t=g∗b∗c: transmisor, canal y ecualizador en cascada, a T/2. Se mira de dos formas.

En el tiempo, muestreado cada T alrededor de su pico. Sin ISI es un único valor, el cursor, y ceros en los demás instantes. Se leen dos números: el cursor y la ISI residual, la energía de los otros instantes relativa a la del cursor.

En frecuencia, T(f)=G(f)B(f)C(f) entre −BR y BR, que es lo que dibuja la figura 100 de B_FSE_equalizer.m. Como el ecualizador es fraccionario, lo que tiene que ser plano no es T sino su espectro plegado, porque el diezmado suma las réplicas corridas en BR. Si el total es real, simétrico y no pasa de BR, el plegado evaluado en el borde da una cuenta exacta:

T(BR/2)+T(−BR/2)=T(0)+T(−BR)⏟0⇒T(BR/2)T(0)=12

O sea, −6,02 dB en ±BR/2: el total de un ecualizador que no deja ISI tiene forma de coseno realzado, no de rectángulo. Por eso el script dibuja las líneas en ±BR/2.

Cómo se reconoce el criterio. El LMS siempre minimiza lo mismo, el MSE. Lo que cambia con el ruido es si esa solución se distingue del zero forcing. Con poco ruido coinciden, y el total tiene las tres firmas del ZF: cursor 1, ISI residual nula y −6 dB en el borde. Con mucho ruido, el MMSE acepta algo de ISI para no levantar ruido donde el canal hundió la señal: el total se hunde por debajo de −6 dB en el borde y el cursor queda por debajo de 1. Ese sesgo tiene forma cerrada: para el MMSE el cursor vale 1−Jmín/σa2, así que cursor y SNR son el mismo dato. Medido con ruido después del canal y fc=0,4BR, el LMS después de 30 000 símbolos de entrenamiento (taps promediados sobre los últimos 2000) y la solución de Wiener calculada aparte, armando la matriz de autocorrelación:

Eb/N0cursor, LMS · WienerISI residual, LMS · Wiener|T| en BR/2, LMS · Wiener
30 dB0,989 · 0,999−36,5 · −51,4 dB−6,63 · −6,12 dB
16 dB0,971 · 0,981−28,8 · −32,4 dB−7,41 · −6,98 dB
8 dB0,890 · 0,902−18,2 · −19,6 dB−11,24 · −10,20 dB

A 30 dB el Wiener es un zero forcing con otro nombre: cursor 0,999 y el borde a 0,1 dB de −6,02. A 8 dB es un MMSE que se nota: cursor 0,902, borde cuatro decibeles más abajo. El cruce entre las columnas es una verificación de verdad, porque son dos caminos distintos —una adaptación ruidosa y un sistema lineal resuelto—: cursor y borde caen a poco más de un decibel como mucho. La ISI residual no: la del LMS queda siempre más alta, 3,6 dB a 16 dB y 15 dB a 30 dB, donde no baja de −36,5 dB. El temblor de los taps alrededor del óptimo y la fuga le ponen un piso que el Wiener no tiene. Y el sesgo cierra la cuenta: 1−0,902=0,098 es Jmín/σa2, y −10log100,098=10,09 dB es exactamente la SNR de Wiener a 8 dB.

05 · Dónde entra el ruido

El canal B puede actuar antes o después de que entre el ruido. La señal llega al ecualizador igual en los dos casos, con Sa|G|2|B|2. El ruido no: si entra después del canal llega blanco, N0; si entra antes, pasa por B y llega con N0|B|2. Lo que decide es el cociente frecuencia por frecuencia:

SNR(f)={Sa|G|2|B|2N0ruido después del canalSa|G|2N0ruido antes del canal

Con el ruido después, donde |B| es chico la señal bajó y el ruido no. Para sacar la ISI el ecualizador tiene que levantar esas frecuencias, y levanta el ruido con ellas: es la amplificación de ruido del zero forcing. El MMSE no levanta del todo y deja ISI —el hundimiento de la sección anterior—, pero igual paga. Con el ruido antes, B se cancela del cociente: el canal bajó señal y ruido juntos, e invertirlo devuelve los dos como estaban. Ecualizar sale gratis. El que cuesta es el filtro que actúa antes de que entre el ruido; el que filtra un ruido que ya entró se deshace sin pérdida, salvo donde tiene ceros exactos.

En el punto de la sección 03, con 10 000 símbolos de entrenamiento:

SNR en el slicer, LMSWiener, 31 tapsSER
ruido después del canal16,78 dB17,23 dB3,4·10⁻³
ruido antes del canal21,74 dB22,05 dB0 en 20 000
techo: Es/N022,02 dB

El mismo canal y el mismo Eb/N0 dejan casi 5 dB de diferencia según dónde se sume el ruido, y el Wiener dice que no es un defecto del algoritmo: con el ruido antes el óptimo llega al techo, con el ruido después se queda 4,8 dB abajo. Los 0,03 dB en que el Wiener pasa el techo son de la cuenta de Pt, que la simulación mide con var y el cálculo cerrado toma de la energía del pulso. Si la amplificación de ruido es el problema, la otra salida es sacar el ruido del lazo con un DFE.

Simulación El sistema completo — arriba, la constelación en los instantes de símbolo a la entrada del ecualizador (a través del tap inicial) y a la salida; al medio, el pulso total muestreado cada T alrededor del cursor, con las muestras a T/2 en gris; abajo, canal, ecualizador y total en frecuencia. 16-QAM, 31 taps, β = 0,03. Arranca sin entrenar: el ecualizador es un solo tap.
SER sin ecualizar — SER a la salida — SNR en el slicer — Wiener, 31 taps — techo Es/N0 — cursor — ISI residual — |T| en BR/2 —

Sin entrenar, la constelación de salida es la de entrada: dieciséis manchas que se tocan. Al subir los símbolos de entrenamiento se separan, el cursor sube hacia 1, la ISI residual baja, y abajo el total pasa de copiar la caída del canal a tener la forma de coseno realzado, con el borde cerca de −6 dB. Las lecturas no se mueven igual de rápido: la SNR llega cerca de su piso en unos miles de símbolos, y el borde de la banda es lo último que se acomoda. Después hay tres cosas para probar. Pasar el ruido antes del canal, y ver la SNR saltar al techo. Bajar Eb/N0 a 8 dB con el ruido después, y ver el total hundirse en el borde: el MMSE separándose del ZF. Y cerrar el canal a 0,3BR, y ver cuánto más cuesta todo lo anterior.

06 · La penalidad contra el ancho de banda

La penalidad de SNR es la distancia horizontal, a una BER fijada, entre la curva medida y la teórica de berawgn. Para 16-QAM, berawgn da BER 10−3 en 10,52 dB. Medida barriendo Eb/N0 de a 1 dB, con 10 000 símbolos de entrenamiento y después modo dirigido por decisiones, contando la BER sobre los 60 000 símbolos siguientes —240 000 bits, unos 240 errores cerca de 10−3— e interpolando en log10BER:

fc/BRruido después del canalruido antes del canal
0,600,69 dB0,26 dB
0,453,21 dB0,25 dB
0,358,32 dB0,54 dB
0,3013,61 dB2,37 dB

Con el ruido después, la penalidad crece rápido en cuanto el corte entra en la banda de la señal, que llega a 0,6BR: es la sección anterior, medida en BER. Con el ruido antes se queda casi quieta. Lo que tiene de piso es el desajuste del LMS: con NT=31, β=0,03 y φ0=0,09, la fórmula de entrada blanca M=NTβφ0/(2−NTβφ0)=0,044 da 0,19 dB de exceso de MSE.

Los 2,37 dB de la última fila no son física: el Wiener, con ese canal y el ruido antes, a Eb/N0=13 dB, da 19,07 dB contra un techo de 19,02. Es el LMS que no terminó. Las frecuencias donde el canal dejó poca señal son las direcciones de menor autovalor, las que el gradiente recorre más despacio, y además la fuga tira de esos taps hacia cero. Medido: con 10 000 símbolos de entrenamiento y fuga la SNR en el slicer queda en 15,65 dB; con 100 000 y sin fuga, en 18,81 dB. Y todas las cifras de la tabla son a BER 10−3: a otra BER la penalidad es otra, porque la penalidad de ISI no es un corrimiento.

07 · El paso y el número de taps

Con el AGC fijando φ0=target2, el paso tiene una escala natural, el paso óptimo del LMS, y una constante de tiempo esperable, las dos para entrada blanca:

βopt=1NTφ0,τ≈12βφ0

Con 31 taps y φ0=0,09, βopt=0,358. Barrido el paso con 30 000 símbolos de entrenamiento, ruido después, fc=0,4BR y 16 dB, con la SNR medida sobre los 20 000 símbolos siguientes y el tiempo hasta que la curva de aprendizaje, promediada de a 500 símbolos, entra a 1 dB de su piso:

ββ/βoptSNR finalllega a 1 dB del pisoτ de entrada blanca
0,010,02816,80 dB4450 símbolos556
0,030,08417,10 dB3300 símbolos185
0,10,27916,85 dB1500 símbolos56
0,30,83715,81 dB800 símbolos19

El compromiso es el de siempre: paso grande, llega antes y se queda más arriba. Con 0,84βopt pierde 1,4 dB contra el Wiener (17,23 dB) por desajuste. Con el paso más chico todavía no terminó en 30 000 símbolos. Y la constante de tiempo de la fórmula se queda corta por un factor de 8 a 40: la entrada del FSE no es blanca, está sobremuestreada y filtrada, y los modos lentos —el borde de la banda y lo que está fuera de ella— tardan mucho más que el promedio. El transitorio que hay que tirar antes de contar errores se mide mirando la curva, no con τ.

Para los taps, el paso se escaló con NT para mantener β/βopt fijo en 0,084 —si cambia NT tiene que cambiar el paso, dice la filmina—, y al lado va el Wiener del mismo largo:

NTβSNR, LMSSNR, Wiener
70,13314,68 dB14,83 dB
110,08516,01 dB16,12 dB
210,04416,88 dB16,99 dB
310,03017,10 dB17,23 dB
610,01516,99 dB17,29 dB

El Wiener deja de ganar pasados los 31 taps: de 31 a 61 suma 0,06 dB. Lo que hace falta es cubrir la respuesta que hay que deshacer, y transmisor más canal miden 31 muestras, 15,5 símbolos. Con 61 taps el LMS da menos que con 31, porque con el paso escalado converge más lento. Pocos taps es un piso que ningún paso arregla; muchos taps es más desajuste y más espera por nada.

08 · El análisis en MATLAB

B_FSE_equalizer.m, el script de la clase que la guía del TP6 toma como esqueleto, corrido entero y sin tocar, seguido de las líneas que miden lo que el script calcula y no imprime. Es QPSK a Eb/N0=15 dB, canal fir1(10, 0.4), ruido sumado después del canal, 101 taps y modo dirigido por decisiones desde el arranque. Lo que figura como comentario es la salida real de correrlo en R2026a.

rng(1);
B_FSE_equalizer                        % el script de la clase, entero y sin tocar
close all

%% Lo que el script calculó y no imprime
ak_hat = sign(real(out_eq_down)) + 1j*sign(imag(out_eq_down));   % slicer QPSK
d  = finddelay(x, ak_hat);                % retardo total, en símbolos
k0 = L/2;  k1 = L - 100;                  % sólo la segunda mitad: ya convergió
xk = out_eq_down(k0:k1);  ak = x(k0-d:k1-d);
errores_bit = sum(sign(real(xk)) ~= real(ak)) + sum(sign(imag(xk)) ~= imag(ak));
fprintf('retardo %d símbolos, errores de bit %d en %d bits\n', d, errores_bit, 2*numel(ak))
% retardo 40 símbolos, errores de bit 0 en 29802 bits
fprintf('SNR en el slicer %.2f dB (Es/N0 = %.2f dB)\n', 10*log10(2/mean(abs(xk - ak).^2)), EbNo + 10*log10(k))
% SNR en el slicer 13.04 dB (Es/N0 = 18.01 dB)

t  = conv(conv(g, b), W);                 % pulso total: Tx, canal, ecualizador
[~, c] = max(abs(t));  ts = t(mod(c-1,2)+1:2:end);  cs = (c + 1 - mod(c-1,2)) / 2;
isi = sum(abs(ts).^2) - abs(ts(cs))^2;
fprintf('cursor %.3f, ISI residual %.1f dB\n', abs(ts(cs)), 10*log10(isi/abs(ts(cs))^2))
% cursor 0.951, ISI residual -23.9 dB
T = @(f) abs(sum(t .* exp(-2j*pi*f/fs*(0:numel(t)-1))));
fprintf('|T| en BR/2: %.2f dB respecto de continua\n', 20*log10(T(BR/2)/T(0)))
% |T| en BR/2: -8.32 dB respecto de continua

Converge, y se lee con lo de arriba: cursor 0,951 y el borde a −8,32 dB, más abajo que los −6,02 del zero forcing. Es un MMSE con el ruido sumado después del canal, que pierde 5 dB contra Es/N0. Tarda 36 segundos, casi todos en redibujar la figura 100 cada 1000 muestras. Los detalles que muerden:

Para tener a mano

  1. La cadena: QAM, ↑2 y raíz de coseno realzado, canal, ruido por Eb/N0 con −10log10N+10log10k, AGC, FSE a T/2, ↓2, slicer, y el error volviendo al FSE una vez por símbolo.
  2. LMS con fuga: ck+1=(1−βℓ)ck+βEkrk*, con Ek contra ak al entrenar y contra a^k después.
  3. Sin ecualizar el ojo está cerrado aunque el canal fuera ideal: la raíz sola no es de Nyquist, y el FSE hace también de filtro adaptado.
  4. El total de un FSE que no deja ISI cae a −6,02 dB en ±BR/2. Cursor 1, ISI nula y −6 dB en el borde es un ZF; cursor menor que 1 y el borde más abajo es un MMSE que se separó.
  5. El LMS persigue el MSE siempre. Si parece ZF es porque el ruido es chico y las dos soluciones coinciden.
  6. Ruido después del filtro que limita la banda: el ecualizador amplifica ruido y la penalidad crece rápido al cerrar la banda. Ruido antes: B se cancela de SNR(f) y ecualizar es gratis, si el LMS tiene tiempo de llegar.
  7. βopt=1/(NTφ0) es la escala del paso; si cambia NT, cambia el paso. El τ de entrada blanca subestima el transitorio de un FSE: mirá la curva de aprendizaje.
  8. Los taps tienen que cubrir transmisor más canal. Más que eso no mejora el óptimo y empeora la convergencia.
  9. Cero errores en una corrida corta es falta de corrida, no una BER. La SNR en el slicer sí se mide.
← Anterior Siguiente → Inicio
Relacionados El ecualizador fraccionario El algoritmo LMS El criterio MSE y Wiener Entrenamiento y modo DD El AGC