Bitácora · DCSS · Concepto

El criterio MSE y el ecualizador de Wiener

Unidad 6 · Ecualizadores adaptativos · el MSE como forma cuadrática, Wiener-Hopf, ortogonalidad y MMSE contra ZF

Con ruido no alcanza con anular la ISI. El zero forcing la anula, y para hacerlo amplifica el ruido. El criterio MSE mide las dos cosas con un solo número, la potencia del error que llega al slicer, y elige los taps que lo hacen mínimo. Ese número es una forma cuadrática en los taps: tiene un único mínimo, y el mínimo sale de resolver un sistema lineal, las ecuaciones de Wiener-Hopf. En la cadena canal → AGC → ecualizador → slicer, el criterio dice adónde tiene que llegar el ecualizador. Cómo llega, paso a paso, es cosa del descenso por gradiente y del LMS.

01 · La definición

El ecualizador es un FIR transversal de N coeficientes. La filmina los junta en un vector, y en otro junta las muestras que hay en la línea de retardos, futuras y pasadas:

c=[c−L,…,cL]T,rk=[Rk+L,…,Rk,…,Rk−L]T

con N=2L+1. Adentro de rk está el canal: Rk son los símbolos Ak pasados por el canal discreto equivalente H(z), más el ruido Zk. Todo se supone estacionario en sentido amplio. La salida del ecualizador, que es lo que entra al slicer, es

Yk=cTrk

Si el slicer no se equivoca —durante el entrenamiento, o suponiendo que decide bien—, su salida A^k es el símbolo transmitido Ak, y el error de la señal es

Ek=Ak−Yk

El criterio MSE elige c para que la potencia de ese error sea mínima:

MSE=E[|Ek|2]

Mide junto lo que el ZF mira por separado. En Ek hay ISI residual —lo que el ecualizador no terminó de cancelar de los símbolos vecinos— y hay ruido filtrado por c, y el MSE suma las dos potencias. La filmina del MMSE lineal lo dice así: desde el punto de vista de la probabilidad de error puede convenir dejar algo de ISI a la entrada del detector, si eso baja el ruido. En esa filmina el error va con el signo cambiado, ek=xk−ak. Al cuadrado da lo mismo.

02 · El MSE es cuadrático en los taps

Cómo se obtiene: se desarrolla el módulo al cuadrado y se toma la esperanza.

Paso 1: desarrollar el cuadrado. Con |x|2=xx∗ y (cTrk)∗=cHrk∗:

|Ek|2=|Ak|2−AkcHrk∗−Ak∗cTrk+cHrk∗rkTc

Los dos términos del medio son conjugados uno del otro, y un número más su conjugado es dos veces su parte real:

|Ek|2=|Ak|2−2ℜ(cHAkrk∗)+cHrk∗rkTc

Paso 2: tomar la esperanza. c no es aleatorio: es lo que se elige. Sale afuera de la esperanza, y lo que queda adentro son dos estadísticas de las señales:

E[|Ek|2]=E[|Ak|2]−2ℜ(cHE[Akrk∗])+cHE[rk∗rkT]c

Paso 3: ponerles nombre.

Φ=E[rk∗rkT],α=E[Akrk∗]

Φ es la matriz de autocorrelación de las muestras de entrada: su elemento (i,j) dice cuánto se parecen, en promedio, las muestras que están en los taps i y j. Como Rk es estacionario, eso depende sólo de la distancia entre los taps: Φ es Toeplitz, con φm=E[Rk+mRk∗] a lo largo de cada diagonal, y es hermítica. α es la correlación cruzada entre el símbolo que se quiere recuperar y cada muestra de la línea: dice dónde está Ak dentro de la ventana. Con los nombres puestos queda la forma de la filmina:

E[|Ek|2]=E[|Ak|2]−2ℜ(cHα)+cHΦc

Un término que no depende de c, uno lineal y uno cuadrático: una forma cuadrática en los taps. La filmina escribe c′ donde acá dice cH: es la misma traspuesta conjugada, con la comilla de MATLAB. Con símbolos reales, como en PAM-2, los asteriscos no hacen nada y la parte real tampoco.

03 · Un tazón con un solo fondo

Que sea cuadrática no alcanza: una cuadrática también puede ser una silla de montar, o una canaleta sin fondo. Lo que la vuelve un tazón es que Φ sea definida positiva, y lo es por construcción:

cHΦc=E[|cTrk|2]≥0

Es la potencia de la salida del ecualizador, que no puede ser negativa. Con ruido blanco a la entrada es, además, estrictamente positiva para todo c≠0: el ruido le suma σZ2 a la diagonal de Φ, así que cHΦc≥σZ2cHc>0.

Completar el cuadrado. Es el camino A de la filmina: se suma y se resta αHΦ−1α, y el MSE se reordena en

E[|Ek|2]=E[|Ak|2]−αHΦ−1α+(c−Φ−1α)HΦ(c−Φ−1α)

Para verificarlo alcanza con desarrollar el último término: da cHΦc−cHα−αHc+αHΦ−1α, porque ΦH=Φ, y el último sumando se cancela con el que se restó. Ahora se lee todo. Los dos primeros términos no dependen de c. El tercero es mayor o igual que cero porque Φ es definida positiva, y vale cero sólo en c=Φ−1α. Ahí está el mínimo, y es uno solo.

Las curvas de nivel son elipses centradas en ese punto, con los ejes sobre los autovectores de Φ. En la dirección del autovalor λi, subir el MSE en Δ exige alejarse Δ/λi: donde el autovalor es grande el tazón es empinado, donde es chico es casi plano. En el ejemplo de más abajo, a 10 dB, los autovalores son 10,10 y 0,626, y las elipses son 4,0 veces más largas que anchas. Qué le hace esa forma a un algoritmo que baja por el tazón está en el descenso por gradiente.

04 · Las ecuaciones de Wiener-Hopf

El camino B de la filmina llega al mismo punto sin completar cuadrados: en el fondo del tazón el gradiente es cero.

∇cE[|Ek|2]=2Φc−2α=0

Son N ecuaciones lineales con N incógnitas, las ecuaciones de Wiener-Hopf. La filmina las llama solución MMSE:

Φcopt=α⇒copt=Φ−1α

El MSE que queda en el fondo sale de la forma completada, donde el término cuadrático se anula:

ξmin=E[|Ak|2]−αHΦ−1α=E[|Ak|2]−αHcopt

copt es el mejor ecualizador lineal de N taps que existe para esa estadística, y ξmin es un piso: ningún algoritmo adaptativo baja de ahí. El LMS llega cerca de copt sin conocer Φ ni α, y lo que le sobra se mide como un exceso por encima de ξmin. Para que haya solución Φ tiene que tener inversa, y la filmina avisa cuándo no la tiene: si el canal tiene un cero en frecuencia, las filas dejan de ser independientes. Con ruido blanco no llega a pasar, por el σZ2 de la diagonal, pero cerca de un cero Φ está mal condicionada y copt tiene taps grandes.

05 · El principio de ortogonalidad

La misma ecuación, leída de otra manera. La correlación entre el error y las muestras de la línea, para un c cualquiera, es

E[Ekrk∗]=E[Akrk∗]−E[rk∗rkT]c=α−Φc

y en copt vale cero: el error del ecualizador óptimo no se parece a ninguna de las muestras que el ecualizador tiene a mano. Es el principio de ortogonalidad, y vale en los dos sentidos: si el error está descorrelacionado con todas las entradas, c es el óptimo, porque α−Φc=0 son las ecuaciones de Wiener-Hopf. La razón se ve sin cuentas: si al error le quedara algo parecido a Rk−m, se lo podría restar moviendo el tap que multiplica a Rk−m, y el error bajaría.

Salvo el factor −2, esa correlación es el gradiente del MSE. Por eso la filmina la presenta como la primera idea de cómo adaptar: medir cuánto se parece el error a cada entrada y mover los taps hasta que no se parezca a ninguna. Es lo que hace el LMS.

En el ejemplo de la sección siguiente, a 10 dB y sobre medio millón de muestras, la correlación medida en copt da [+0,0004,+0,0003], que es lo que fluctúa un promedio de ese largo. En el ZF da [−0,0996,+0,0903], y la forma cerrada es σZ2[−1,ρ]=[−0,1,+0,09]. Al error del ZF todavía le queda algo de las entradas: no es el óptimo.

06 · Un ejemplo que se hace a mano

Un canal con un solo polo, H(z)=1/(1−ρz−1): cada símbolo deja una cola geométrica, hn=ρn, y la ISI no termina nunca. Con ρ=0,9, PAM-2 de ±1 (así E[|Ak|2]=1), ruido blanco de potencia σZ2, y un ecualizador de dos taps. Con N=2 no hay tap central, así que la línea es causal: rk=[Rk,Rk−1]T. La SNR es la potencia de los símbolos sobre la del ruido, 1/σZ2.

Dos taps invierten este canal exacto. El ZF es 1−ρz−1, que pone un cero justo sobre el polo del canal —la cuenta de polos y ceros—, así que cZF=[1,−ρ]T es un punto del plano y no una aproximación truncada. No deja ISI: todo su error es ruido, que pasa por 1−ρz−1 y sale multiplicado por 1+ρ2=1,81.

La autocorrelación de Rk sale de sumar la serie geométrica, φm=ρ|m|/(1−ρ2)+σZ2δm, y α se lee del canal: Rk contiene a Ak con peso h0=1, y Rk−1 sólo tiene símbolos anteriores, independientes de Ak:

Φ=[φ0φ1φ1φ0]=[5,263+σZ24,7374,7375,263+σZ2],α=[10]

El sistema de 2 × 2 se resuelve a mano:

copt=1φ02−φ12[φ0−φ1],ξmin=1−φ0φ02−φ12

Sin ruido, φ02−φ12 vale 1/(1−ρ2)=φ0, y copt da [1,−ρ]T: el óptimo es el ZF, con ξmin=0. A 10 dB, con σZ2=0,1, copt vale [0,8478,−0,7488]T y ξmin=0,1522 (−8,18 dB), contra σZ2(1+ρ2)=0,1810 (−7,42 dB) del ZF. Simulado, sobre medio millón de muestras, el MSE medido da 0,1517 y 0,1805.

Simulación El tazón del MSE y su fondo — las curvas de nivel del MSE en el plano de los dos taps, en dB, para el canal de un polo. El punto azul es el mínimo de Wiener; el cuadrado, el ZF; el anillo es un c que movés vos: arrastralo, o tabulá hasta el plano y usá las flechas. Arranca a 30 dB.
copt — ξmin — MSE del ZF — Wiener: cursor + ISI + ruido — BER Wiener — BER ZF —
c — MSE en c — BER en c — E[Ek rk] = α − Φc — ξmin − (cursor + ISI + ruido) —

A 30 dB los dos puntos se tapan. Al bajar la SNR el mínimo se despega del ZF y viaja hacia el origen por la curva punteada: Wiener achica los dos taps. El tazón entero sube, porque su fondo ξmin sube con el ruido, y se ensancha. Y hay una cosa que el dibujo no muestra y las lecturas sí: si multiplicás c por un número, con los botones o arrastrándolo sobre una recta que pase por el origen, el MSE cambia y la BER no se mueve. Esa es la sección 08.

07 · MMSE contra ZF, según la SNR

Para ver qué negocia Wiener hay que partir su error. El pulso total, canal por ecualizador, es p=h∗c; con este canal vale p0=c0 y pn=ρn−1(ρc0+c1) para n≥1. Con símbolos independientes y ruido independiente de los símbolos, el MSE se parte en tres potencias:

E[|Ek|2]=(1−p0)2⏟cursor+∑n≥1pn2⏟ISI+σZ2(c02+c12)⏟ruido

El cursor que no llega a 1, los vecinos que no se cancelaron y el ruido que pasó por los taps. El ZF tiene las dos primeras en cero por construcción, y todo su MSE es ruido, σZ2(1+ρ2). Las tres de Wiener, calculadas en MATLAB:

SNRc₀c₁cursorISIruidoξminMSE del ZF
30 dB0,9982−0,89820,00000,00000,00180,00180,0018
20 dB0,9822−0,88230,00030,00000,01740,01780,0181
10 dB0,8478−0,74880,02320,00110,12800,15220,1810
5 dB0,6419−0,54500,12820,00560,22420,35810,5724
0 dB0,3730−0,28210,39310,01510,21880,62701,8100

A 30 dB son el mismo ecualizador: los taps difieren en la tercera cifra decimal, y el MSE, en 0,008 dB. A 0 dB son dos cosas distintas. El ZF amplifica el ruido hasta 1,81, más que la potencia de los símbolos: al slicer le llega más error que señal. Wiener no lo hace. Achica los dos taps, acepta un cursor de 0,373 en vez de 1, deja pasar 0,0151 de ISI, y a cambio el ruido le queda en 0,2188. Su MSE es 0,627, 4,6 dB menos que el del ZF; a 10 dB la diferencia es de 0,75 dB, y a 30 dB, de 0,008 dB. Con este canal lo que más cede no es ISI sino cursor: lo barato es achicar la señal entera, con el ruido adentro.

Es el dibujo de la filmina del MMSE lineal, donde el canal se llama M(z). Tres curvas del ecualizador en frecuencia: con SNR → ∞ tiende a 1/M(z), el ZF; con SNR → 0 deja de ecualizar; en el medio levanta lo que el canal atenuó, pero menos. Y la misma filmina avisa lo que el ZF no puede evitar: el ruido sale amplificado, y ya no es blanco.

08 · Mínimo MSE no es mínima BER

La filmina lo advierte: minimizar el error total no es lo mismo que minimizar la probabilidad de error, porque la ISI residual no tiene una distribución gaussiana. Es una aproximación razonable. El ejemplo muestra cuánto se separan las dos cosas. A 0 dB, con la BER calculada exacta —enumerando los vecinos que pesan— y medida sobre un millón de símbolos:

ecualizadorMSEMSE medidoBERBER medida
Wiener, copt0,62700,62770,22030,2206
ZF1,81001,81120,22870,2292
3 · copt2,11912,12120,22030,2206

Wiener y el ZF están a 4,6 dB en MSE y a 0,008 en BER. Y 3copt da vuelta el orden: tiene más MSE que el ZF y la misma BER que Wiener. Su MSE sale de la forma cuadrática, 1−2ac0+a2c0 para acopt, porque Φcopt=α. Son dos razones.

La escala. En PAM-2 el umbral está en cero, y multiplicar c por un número positivo no le cambia el signo a ninguna Yk: no cambia ninguna decisión. El MSE sí cambia, porque mide la distancia a Ak, no de qué lado del umbral cayó Yk.

La forma del error. Si el error fuera gaussiano, la BER se leería del MSE: Q(1/ξmin)=0,1033. La verdadera es el doble. Lo que falla es el cursor: la distancia al umbral no es 1 sino p0=0,373, y con esa distancia, Q(p0/ISI+ruido)=0,2202 ya pega. El MSE junta en un número el sesgo y la dispersión, y a la BER le importa la dispersión comparada con el cursor.

En este canal, igual, Wiener apunta bien. Como la BER de PAM-2 depende sólo de la dirección de c, se puede buscar la dirección de mínima BER con fminbnd: a 0 dB está a 4·10⁻⁴ rad de la de Wiener, y la BER difiere en la séptima cifra. Lo que el MSE mide mal no es hacia dónde apuntar, sino cuánto vale lo que se logró. Con 16-QAM, cuyos umbrales no están en cero, el cursor corto sí mueve decisiones.

09 · El análisis en MATLAB

El ejemplo entero: Φ y α analíticas y estimadas, Wiener-Hopf con la barra invertida, el ZF, la ortogonalidad, el barrido de SNR y la BER. Lo que figura como comentario es la salida real de correrlo en R2026a.

%% 1. El canal, los símbolos y el ruido
rho = 0.9;                          % canal H(z) = 1/(1 - rho z^-1): h_n = rho^n
SNRdB = 10;                         % E|A_k|^2 / sigma_Z^2, con PAM-2 de +-1
s2 = 10^(-SNRdB/10);                % potencia del ruido

%% 2. Phi y alpha, analíticas (dos taps causales: r_k = [R_k; R_{k-1}])
phi = @(m) rho.^abs(m) / (1 - rho^2);        % autocorrelación de la señal sin ruido
Phi = toeplitz([phi(0) phi(1)]) + s2*eye(2);
alpha = [1; 0];                              % E[A_k R_k] = h_0, E[A_k R_{k-1}] = 0
fprintf('Phi = [%.4f %.4f; %.4f %.4f], autovalores %.4f y %.4f\n', Phi, eig(Phi))
% Phi = [5.3632 4.7368; 4.7368 5.3632], autovalores 0.6263 y 10.1000

%% 3. Wiener-Hopf, con la barra invertida
c_opt  = Phi \ alpha;
xi_min = 1 - alpha' * c_opt;
fprintf('c_opt = [%.4f %.4f], xi_min = %.4f (%.2f dB)\n', c_opt, xi_min, 10*log10(xi_min))
% c_opt = [0.8478 -0.7488], xi_min = 0.1522 (-8.18 dB)

%% 4. El ZF: con este canal, dos taps lo invierten exacto
c_zf = [1; -rho];
mse  = @(c) 1 - 2*alpha'*c + c'*Phi*c;       % la forma cuadrática
fprintf('MSE ZF = %.4f (%.2f dB)\n', mse(c_zf), 10*log10(mse(c_zf)))
% MSE ZF = 0.1810 (-7.42 dB)

%% 5. Phi y alpha estimadas con muestras
N = 1e6;  rng(1)
A = 2*randi([0 1], N, 1) - 1;
R = filter(1, [1 -rho], A) + sqrt(s2)*randn(N, 1);
k = (101:N)';                                % fuera el transitorio del canal
r = [R(k) R(k-1)];                           % cada fila es r_k.'
ent = 1:floor(numel(k)/2);  pru = ent(end)+1:numel(k);
Phi_est   = r(ent,:)' * r(ent,:) / numel(ent);
alpha_est = r(ent,:)' * A(k(ent)) / numel(ent);
c_est = Phi_est \ alpha_est;
fprintf('c_est = [%.4f %.4f]\n', c_est)
% c_est = [0.8472 -0.7483]

%% 6. El MSE medido, sobre muestras que no se usaron para estimar
Ek = @(c) A(k(pru)) - r(pru,:)*c;            % E_k = A_k - Y_k
fprintf('MSE medido: Wiener %.4f, estimado %.4f, ZF %.4f\n', ...
    mean(Ek(c_opt).^2), mean(Ek(c_est).^2), mean(Ek(c_zf).^2))
% MSE medido: Wiener 0.1517, estimado 0.1517, ZF 0.1805

%% 7. El principio de ortogonalidad: E[E_k r_k] = alpha - Phi*c
fprintf('E[E r] Wiener: [%+.4f %+.4f]   cerrado [%+.4f %+.4f]\n', mean(Ek(c_opt).*r(pru,:)), alpha - Phi*c_opt)
% E[E r] Wiener: [+0.0004 +0.0003]   cerrado [+0.0000 +0.0000]
fprintf('E[E r] ZF:     [%+.4f %+.4f]   cerrado [%+.4f %+.4f]\n', mean(Ek(c_zf).*r(pru,:)), alpha - Phi*c_zf)
% E[E r] ZF:     [-0.0996 +0.0903]   cerrado [-0.1000 +0.0900]
Ee = A(k(ent)) - r(ent,:)*c_est;             % el estimado, sobre sus propias muestras
fprintf('E[E r] estimado, mismas muestras: [%.1e %.1e]\n', mean(Ee.*r(ent,:)))
% E[E r] estimado, mismas muestras: [6.7e-15 -5.8e-15]

%% 8. El barrido de SNR: cursor, ISI, ruido y BER
fprintf('\n SNR   c0      c1      cursor  ISI     ruido   MSE     MSE_ZF  BER       BER_ZF\n')
for SNRdB = [30 20 10 5 0]
    s2  = 10^(-SNRdB/10);
    Phi = toeplitz([phi(0) phi(1)]) + s2*eye(2);
    c   = Phi \ alpha;
    p0  = c(1);                              % pulso total p = h*c: p_0 = c_0
    kp  = rho*c(1) + c(2);                   % p_n = rho^(n-1)*kp para n >= 1
    isi = kp^2 / (1 - rho^2);
    ruido = s2 * (c'*c);
    fprintf('%3d  %6.4f %7.4f  %6.4f  %6.4f  %6.4f  %6.4f  %6.4f  %8.2e  %8.2e\n', SNRdB, c, ...
        (1-p0)^2, isi, ruido, (1-p0)^2 + isi + ruido, s2*(1+rho^2), ...
        ber_pam2(p0, kp, ruido, rho), qf(1/sqrt(s2*(1+rho^2))))
end
%  SNR   c0      c1      cursor  ISI     ruido   MSE     MSE_ZF  BER       BER_ZF
%  30  0.9982 -0.8982  0.0000  0.0000  0.0018  0.0018  0.0018  1.77e-122  1.81e-122
%  20  0.9822 -0.8823  0.0003  0.0000  0.0174  0.0178  0.0181  5.19e-14  5.31e-14
%  10  0.8478 -0.7488  0.0232  0.0011  0.1280  0.1522  0.1810  9.13e-03  9.37e-03
%   5  0.6419 -0.5450  0.1282  0.0056  0.2242  0.3581  0.5724  9.03e-02  9.31e-02
%   0  0.3730 -0.2821  0.3931  0.0151  0.2188  0.6270  1.8100  2.20e-01  2.29e-01

%% 9. La BER medida, con 1e6 símbolos, a 0 dB
s2 = 1;  Phi = toeplitz([phi(0) phi(1)]) + s2*eye(2);  c_opt = Phi \ alpha;
R = filter(1, [1 -rho], A) + sqrt(s2)*randn(N, 1);  r = [R(k) R(k-1)];
fprintf('\nBER medida a 0 dB: Wiener %.4f, ZF %.4f, 3*c_opt %.4f\n', ...
    mean(sign(r*c_opt) ~= A(k)), mean(sign(r*c_zf) ~= A(k)), mean(sign(r*3*c_opt) ~= A(k)))
% BER medida a 0 dB: Wiener 0.2206, ZF 0.2292, 3*c_opt 0.2206
fprintf('MSE medido a 0 dB: Wiener %.4f, ZF %.4f, 3*c_opt %.4f\n', ...
    mean((A(k) - r*c_opt).^2), mean((A(k) - r*c_zf).^2), mean((A(k) - r*3*c_opt).^2))
% MSE medido a 0 dB: Wiener 0.6277, ZF 1.8112, 3*c_opt 2.1212
fprintf('Si el error fuera gaussiano: Q(1/sqrt(xi_min)) = %.4f\n', qf(1/sqrt(1 - alpha'*c_opt)))
% Si el error fuera gaussiano: Q(1/sqrt(xi_min)) = 0.1033

%% Funciones
function p = qf(x)
    p = 0.5*erfc(x/sqrt(2));
end

function p = ber_pam2(p0, kp, ruido, rho)
    % BER exacta de PAM-2 con ISI p_n = rho^(n-1)*kp: se enumeran los 18
    % primeros vecinos; la cola, de varianza despreciable, se suma al ruido.
    K = 18;
    s = 1 - 2*mod(floor((0:2^K-1)' ./ 2.^(0:K-1)), 2);       % todas las secuencias de +-1
    isi = s * (kp * rho.^(0:K-1)');
    cola = kp^2 * rho^(2*K) / (1 - rho^2);
    p = mean(qf((p0 + isi) / sqrt(ruido + cola)));
end

Los detalles que muerden:

Para tener a mano

  1. Ek=Ak−Yk, con Yk=cTrk. El criterio minimiza E[|Ek|2], que suma la potencia de la ISI residual y la del ruido.
  2. Es una forma cuadrática en los taps:E[|Ek|2]=E[|Ak|2]−2ℜ(cHα)+cHΦccon Φ=E[rk∗rkT] y α=E[Akrk∗].
  3. Φ es Toeplitz, hermítica y definida positiva: el MSE es un tazón con un solo fondo, de curvas de nivel elípticas con los ejes sobre los autovectores de Φ.
  4. Wiener-Hopf: Φcopt=α, y ξmin=E[|Ak|2]−αHcopt. En MATLAB, c_opt = Phi \ alpha.
  5. Ortogonalidad: E[Ekrk∗]=α−Φc, que se anula sólo en copt. Es el gradiente, salvo un −2.
  6. Con SNR alta Wiener es el ZF. Con SNR baja achica los taps, deja cursor corto y algo de ISI, y no amplifica el ruido: a 0 dB, 0,627 de MSE contra 1,810.
  7. Mínimo MSE no es mínima BER: la BER de PAM-2 no ve la escala de c, y el error no es gaussiano. A 0 dB, 4,6 dB de MSE son 0,2203 contra 0,2287 de BER.
← Anterior Siguiente → Inicio
Relacionados El ecualizador zero forcing El algoritmo MSEG El algoritmo LMS El FIR transversal