Bitácora · DCSS · Concepto

La ISI y el pulse shaping

Unidad 4 · Transmisión en banda base y banda pasante · el criterio de Nyquist, el sinc, el coseno realzado, su raíz y el diagrama de ojo

Cada símbolo sale del transmisor como una copia del pulso g(t), y el pulso dura más que un símbolo. Cuando el receptor mira el símbolo k, las colas de los demás todavía están ahí: eso es la interferencia intersimbólica. El pulse shaping es elegir g para que esas colas pasen por cero justo cuando se las mira, gastando el menor ancho de banda posible y sin quedar a merced de un reloj que nunca es perfecto.

01 · La definición

La señal PAM es una fila de pulsos, uno cada T, cada uno escalado por su símbolo:

s(t)=∑m=−∞∞amg(t−mT)

Se muestrea en el instante del símbolo k y se separa el término de m=k del resto, como en la filmina:

s(kT)=akg(0)⏟deseado+∑m≠kamg(kT−mT)⏟ISI

La ISI es el segundo término: lo que aportan, en el instante del símbolo k, las colas de los pulsos de todos los otros. Con canal b(t), filtro de recepción f(t) y ruido, la cuenta es la misma con el pulso total en lugar de g:

y(kT)=akp(0)+∑m≠kamp((k−m)T)+n′(kT),p=g∗b∗f

Dos cosas la separan del ruido. Es determinística: depende de qué símbolos se mandaron, no del azar. Y es proporcional a la señal: si se duplica la amplitud se duplican los am, y la ISI con ellos. Subir la potencia no la achica. Su tamaño se mide con el peor patrón de vecinos, el que hace que cada término reste todo lo que puede:

D=∑m≠0|p(mT)||p(0)|

En PAM-2, con am=±1, la muestra que debía valer p(0) puede bajar hasta p(0)(1−D) sin una gota de ruido. Con D≥1 cruza el umbral sola. Con más niveles el mismo D pesa M−1 veces más, y por eso la misma ISI que a QPSK le cuesta un decibel a 64-QAM le cierra el ojo: está medido en la nota de la penalidad de ISI.

02 · El criterio de Nyquist, en el tiempo

¿Qué tiene que cumplir g para que s(kT)=ak para cualquier secuencia de símbolos? La respuesta de la filmina:

g(kT)=δk={1k=00k≠0

Paso 1: es necesario. Si tiene que valer para toda secuencia, vale para la que tiene a0=1 y todos los demás en cero. Con esa, s(kT)=g(kT), y lo pedido, s(kT)=ak, es 1 en k=0 y 0 en el resto: es δk.

Paso 2: es suficiente. Si g(kT)=δk, el término deseado vale ak y cada término de la ISI tiene g((k−m)T) con k−m≠0, que es cero.

Un pulso así se llama pulso de Nyquist. No hace falta que se apague después de T: alcanza con que pase por cero en los instantes en que se lee a los demás. Entre esos instantes puede hacer lo que quiera. El rectángulo de un símbolo cumple sin cruzar el cero nunca, porque ya terminó; el sinc cumple cruzándolo una vez por símbolo, para siempre.

03 · El mismo criterio, en frecuencia

El canal y los filtros se describen en frecuencia, y el ancho de banda es lo que se paga. La traducción es ésta:

g(kT)=δk⟺1T∑m=−∞∞G(f−mT)=1

Paso 1: la antitransformada, evaluada en los instantes de símbolo.

g(kT)=∫−∞∞G(f)ej2πfkTdf

Paso 2: partir el eje en tramos de ancho 1/T. El tramo m va de (m−12)/T a (m+12)/T, y cambiando f→f−m/T todos se traen al del origen:

g(kT)=∑m∫−1/2T1/2TG(f−mT)ej2π(f−m/T)kTdf

Paso 3: la exponencial no ve el corrimiento. e−j2πmk=1 para m y k enteros, así que sale de la suma y la suma entra a la integral:

g(kT)=∫−1/2T1/2T[∑mG(f−mT)]ej2πfkTdf

Paso 4: la ida. Si el corchete vale T en todo el tramo, queda T∫−1/2T1/2Tej2πfkTdf. Para k=0 es T·1/T=1; para k≠0 la exponencial da k vueltas enteras en el tramo y su integral es cero. Es δk.

Paso 5: la vuelta. El corchete es periódico en f con período 1/T, y el paso 3 dice que Tg(kT) son exactamente sus coeficientes de Fourier. Una función periódica queda determinada por sus coeficientes: si son Tδk, hay uno solo y el corchete es la constante T. Dividiendo por T sale el criterio.

Al corchete dividido por T se le dice espectro plegado: es el espectro de la secuencia g(kT), el pulso muestreado a la tasa de símbolo, y es lo que dibuja E_folded_spectrum.m diezmando el pulso total por N. Plano si y sólo si no hay ISI. Es el aliasing de la Unidad 2 usado a favor: lo que antes había que evitar, acá tiene que sumar justo. Dos trampas de ese cálculo —plegar módulos en vez del espectro complejo, y olvidarse de que el plegado depende del instante de muestreo— están medidas en la nota del reloj corrido.

04 · El ancho de banda mínimo, y el sinc

Las réplicas están separadas 1/T y cada una mide 2W. Si W<1/(2T), entre dos réplicas vecinas queda un hueco donde la suma vale cero, y el criterio no se puede cumplir con ningún pulso. Ése es el piso: para mandar 1/T símbolos por segundo sin ISI hacen falta al menos 1/(2T) hertz, o dicho al revés, 1/T=2W como máximo.

Con W=1/(2T) justo, las réplicas se tocan borde con borde sin solaparse, así que cada una tiene que ser plana por su cuenta: un rectángulo de altura T. Hay un único pulso de Nyquist con el ancho de banda mínimo, y es su antitransformada:

g(t)=sen(πt/T)πt/T⟷G(f)=Tpara |f|<12T

En el papel es perfecto. No se usa por dos razones, y la segunda es la que importa. La primera: dura infinito para los dos lados, así que hay que truncarlo, y truncar una pared vertical en frecuencia trae el rizado de Gibbs. La segunda es el reloj. Si el receptor muestrea en kT+τ, con ε=τ/T, el vecino que está a m símbolos ya no cae en un cero:

g((m+ε)T)g(εT)=(−1)msen(πε)/(π(m+ε))sen(πε)/(πε)=(−1)mεm+ε

Y el peor caso, sumando los K vecinos más cercanos de cada lado, tiene forma cerrada:

D(ε)=∑0<|m|≤KKε|m+ε|≈2εlnK

Es la serie armónica, y no converge. Con el reloj corrido un décimo de símbolo, medido en MATLAB: 0,5882 con 10 vecinos por lado, 1,0399 con 100, 1,4995 con 1000 y 1,9599 con 10 000. Cada década suma, en el límite, 2εln10=0,4605; las diferencias medidas son 0,4517, 0,4596 y 0,4604. En PAM-2 el ojo se cierra cuando D llega a 1, y eso pasa al contar 82 vecinos de cada lado; con el reloj corrido la mitad, τ=0,05T, hacen falta 12 330. Ningún error de reloj es lo bastante chico: con suficientes símbolos atrás, el sinc junta la basura de todos. Es el Problema 5-5 del Barry–Lee: la apertura horizontal del ojo del sinc es cero.

05 · El coseno realzado

La salida es gastar un poco más que el mínimo. Con ancho de banda por encima de 1/(2T) las réplicas se solapan, y alcanza con que lo que le falta a una en el flanco se lo ponga la vecina. La familia que usa la cátedra, con rolloff 0≤α≤1:

g(t)=(sen(πt/T)πt/T)⏟sinc(cos(απt/T)1−(2αt/T)2)⏟ventana,W=1+α2T G(f)={T|f|≤1−α2TTcos2[πT2α(|f|−1−α2T)]1−α2T<|f|≤1+α2T0|f|>1+α2T

Paso 1: los ceros son los del sinc. El primer factor se anula en todo kT con k≠0. El segundo vale 1 en el origen y es finito en todos lados: su denominador se anula en t=±T/(2α), pero ahí se anula también el coseno, el límite del factor es π/4 y el pulso vale π4sinc(1/2α). Así que g(kT)=δk para cualquier α. Es de Nyquist por el tiempo.

Paso 2: lo mismo, por la frecuencia. Con α≤1 sólo se tocan dos réplicas vecinas, y basta mirar el flanco. Se escribe f=12T−x con 0≤x≤α2T; la réplica corrida está en 12T+x. Metidas en el tramo del medio, los argumentos del coseno salen π4∓y con y=πTx/(2α), y

cos2(π4−y)+cos2(π4+y)=sen2(π4+y)+cos2(π4+y)=1

porque los ángulos son complementarios. La suma de las dos réplicas es T en todo el flanco: el flanco es simétrico respecto de 1/(2T), y lo que baja uno lo sube el otro. De ahí el nombre: describe el espectro, un medio coseno «levantado» sobre el eje, no el pulso.

Paso 3: las colas. El sinc decae como 1/t. La ventana, para t grande, decae como 1/t2. El producto queda acotado por

|g(t)|≤1π|t/T||1−(2αt/T)2|∼T34πα2|t|3

A diez símbolos del centro la envolvente del sinc vale 1/(10π)=0,032; con α=0,5, noventa y nueve veces menos, 3,2·10−4. Con colas 1/t3 la suma del peor caso va como ∑1/m3, que converge: el reloj corrido sigue costando, pero cuesta una cantidad finita, que ya no depende de cuántos símbolos hayan pasado. El precio está en la otra columna: W crece de 1/(2T) a 1/T al ir de α=0 a α=1: un exceso de α·100 % sobre el mínimo. A los 32 GBd de los scripts, α=0,5 ocupa 24 GHz de cada lado en vez de 16.

De dónde sale la forma en el tiempo a partir de ese espectro, por qué cumple Nyquist con cualquier rolloff y qué pasa cuando el canal no es plano está en la nota del coseno realzado.

06 · Qué compra el rolloff

El rolloff no cambia nada con el reloj en su lugar: todos los cosenos realzados dan ISI cero en τ=0. Lo que compra es tolerancia al error de muestreo. Medido en MATLAB sobre la fórmula continua, con 1000 vecinos de cada lado, el peor caso D para tres corrimientos y el ancho del ojo de PAM-2 —el intervalo de instantes en el que D<1—:

αW · TD, τ = 0,05 TD, τ = 0,1 TD, τ = 0,25 Tancho del ojo
0 (sinc)0,50,74881,49953,78250,1335 T
0,10,550,25860,51921,33250,3803 T
0,250,6250,16720,33660,87980,5605 T
0,50,750,09870,20040,54860,7842 T
0,750,8750,06030,12440,36670,9138 T
110,03900,08060,25001 T

En rojo, donde el ojo ya está cerrado. La fila del sinc va en gris porque no es un número: con 1000 vecinos da esto, con más da más, y el ancho del ojo sigue bajando —0,337 T con 10 vecinos, 0,192 T con 100, 0,134 T con 1000, 0,102 T con 10 000— hacia cero. Las demás filas sí son propiedades del pulso: con α=0,5 el ancho del ojo da 0,7855 T con 10 vecinos y 0,7842 T con 100 y con 1000. La última fila tiene forma cerrada: con α=1 el pulso tiene ceros además en ±3T/2,±5T/2,… y vale 1/2 en ±T/2, así que a medio símbolo el vecino iguala al propio y el ojo se cierra justo ahí: ancho T.

Dos lecturas. La primera: el rolloff se paga lineal en banda y rinde mucho al principio. De 0 a 0,25 el ancho del ojo pasa de tender a cero a más de medio símbolo, con un 25 % más de banda. La segunda: con α=0,1 un cuarto de símbolo de error ya cierra el ojo de PAM-2, y con α=0,25 no. Los sistemas reales andan entre 0,1 y 0,5; los scripts de la cátedra usan 0,5. En τ=T/4 y α=0,5 el símbolo propio baja a 0,8872 y el vecino más grande queda a −10,58 dB de él, los mismos números que da el coseno realzado con el reloj corrido una muestra.

07 · La raíz, repartida entre transmisor y receptor

Con filtro de recepción, lo que tiene que ser de Nyquist es el pulso total, no el del transmisor. En la notación de la filmina:

p(t)=g(t)∗b(t)∗f(t),∑mP(f−mT)=T

El receptor quiere, además, la mayor relación señal a ruido en el instante de decisión, y eso lo da el filtro adaptado, f(t)=g(−t) para un pulso real. Con canal ideal, b=δ, el producto en frecuencia es un módulo al cuadrado:

P(f)=G(f)G∗(f)=|G(f)|2⟹G(f)=GRC(f)

Si el total tiene que ser un coseno realzado, al transmisor no le queda otra que mandar su raíz, y el receptor pone la otra mitad. En el tiempo, la raíz de coseno realzado que arma root_raised_cosine.m:

gRRC(t)=sen(π(1−α)t/T)+4α(t/T)cos(π(1+α)t/T)π(t/T)(1−(4αt/T)2),gRRC(0)=1+α(4π−1)

El que cumple Nyquist es el producto, no cada factor. La raíz sola deja un 9,335 % de interferencia en el vecino a α=0,5, y no es un resto de truncar: por qué, y por qué el ojo a la salida del transmisor sale cerrado a propósito, está en la nota del pulso que llega. El par, con los 101 taps de la cátedra, baja a 2,3·10−4, que es lo que cuesta cortar las colas. Y en cuanto el canal deja de ser un impulso el filtro adaptado se adapta a g∗b, el producto pasa a ser |G|2|B|2, y nada obliga a eso a ser de Nyquist: es la nota del filtro adaptado.

08 · El diagrama de ojo

Se corta la señal a la salida del filtro de recepción en tramos de dos símbolos, sincronizados con el reloj de símbolo, y se dibujan todos encima. Es lo que muestra un osciloscopio disparado con ese reloj. Cada traza es un patrón distinto de vecinos; si el pulso es de Nyquist, en el instante de muestreo todas pasan por los niveles exactos y el ojo queda abierto. La filmina lee tres cosas: la apertura vertical (a), inmunidad al ruido; la horizontal (b), inmunidad al error de fase del reloj; y la pendiente de las trazas (c), sensibilidad al jitter.

Las tres salen de una cuenta. Paso 1: muestreando corrido τ, la muestra es

y(kT+τ)=akp(τ)+∑j≠0ak−jp(τ+jT)

Paso 2: en PAM-2, con ak=+1, la traza más baja es la de los vecinos que restan todo lo que pueden, ak−j=−signop(τ+jT). Paso 3: con ak=−1 es la misma cuenta con el signo cambiado. La distancia entre las dos es la apertura vertical:

apertura(τ)=2(p(τ)−∑j≠0|p(τ+jT)|)=2p(τ)(1−D(τ))

(a) es esta cuenta en τ=0; (b) es el ancho del intervalo de τ donde es positiva, la última columna de la tabla; (c) es su pendiente. Un detalle que el dibujo esconde: las trazas de un ojo simulado salen de datos al azar, y el peor patrón de 2K vecinos aparece con probabilidad 2−2K. Con colas cortas no importa, porque los vecinos lejanos no pesan. Con el sinc es justo al revés: el ojo dibujado parece abierto y el de peor caso no existe.

Simulación El rolloff contra el reloj — arriba, el ojo de PAM-2 con un coseno realzado, 100 trazas de datos al azar; la línea azul es el instante en que muestrea el receptor. Abajo, la apertura vertical de peor caso en función de ese instante, contando 1000 vecinos por lado: en rojo, donde el ojo está cerrado. Arranca con el reloj en su lugar, donde ningún rolloff deja ISI.
ancho de banda W — g(τ) — vecino más grande — peor caso D, ±10 vecinos — peor caso D, ±1000 vecinos — apertura vertical — ancho del ojo —

Con el reloj en su lugar no hay nada que ver: el ojo está abierto entero para cualquier rolloff, y la curva de abajo toca 2 en el centro. Al correr el instante, el ojo empieza a pagar, y cuánto paga lo decide α. Lo que conviene probar es bajar el rolloff a 0 con el reloj corrido y comparar las dos lecturas de peor caso: con cualquier α>0 contar 10 vecinos o 1000 da casi lo mismo, y con el sinc no. La curva de abajo se angosta hasta una espina, mientras las trazas de arriba, que salen de datos al azar, siguen pareciendo un ojo.

09 · El análisis en MATLAB

La cátedra arma los pulsos con sus funciones, raised_cosine.m y root_raised_cosine.m. MATLAB trae rcosdesign, que hace lo mismo con otra convención, y conviene saber pasar de una a otra. El análisis completo, con los parámetros de B_basic_tx.m; lo que figura como comentario es la salida real de correrlo en R2026a, con los scripts de la clase en el path.

%% 1. El coseno realzado con rcosdesign: alfa = 0.5, 25 símbolos, N = 4
BR = 32e9;  N = 4;  fs = N*BR;             % los parámetros de B_basic_tx.m
alfa = 0.5;  span = 25;                    % span en SÍMBOLOS, no en taps
g = rcosdesign(alfa, span, N, 'normal');   % span*N + 1 = 101 taps
c = (numel(g) + 1)/2;                      % el centro, t = 0
fprintf('%d taps, energia %.4f, pico %.4f\n', numel(g), sum(g.^2), g(c))
% 101 taps, energia 1.0000, pico 0.5345

%% 2. Los ceros en los múltiplos de T: cada N muestras desde el centro
k = [-12:-1, 1:12];
fprintf('max |g(kT)| / g(0) = %.1e\n', max(abs(g(c + N*k))) / g(c))
% max |g(kT)| / g(0) = 0.0e+00

%% 3. Contra la función de la cátedra (normaliza a suma 1, no a energía 1)
h = raised_cosine(BR/2, fs, alfa, 101, 0);
fprintf('max |g/g(0) - h/h(0)| = %.1e\n', max(abs(g/g(c) - h/h(c))))
% max |g/g(0) - h/h(0)| = 3.0e-05

%% 4. ISI con el instante corrido: N = 20 para poder correr de a T/20
N20 = 20;  g20 = rcosdesign(alfa, 40, N20, 'normal');  c20 = (numel(g20) + 1)/2;
for d = [0 1 2 5]                          % corrimiento de d muestras: tau = d*T/20
    m = c20 + d;                           % la muestra que lee el símbolo
    i = mod(m-1, N20)+1 : N20 : numel(g20); % todas las del mismo peine...
    v = g20(i(i ~= m));                    % ...menos la propia, por índice
    fprintf('tau = %.2f T: g = %.4f, mayor vecino %6.2f dB, peor caso %.4f\n', ...
        d/N20, g20(m)/g20(c20), 20*log10(max(abs(v))/g20(m)), sum(abs(v))/g20(m))
end
% tau = 0.00 T: g = 1.0000, mayor vecino   -Inf dB, peor caso 0.0000
% tau = 0.05 T: g = 0.9953, mayor vecino -27.46 dB, peor caso 0.0986
% tau = 0.10 T: g = 0.9813, mayor vecino -20.75 dB, peor caso 0.2003
% tau = 0.25 T: g = 0.8872, mayor vecino -10.58 dB, peor caso 0.5482

%% 5. El sinc (alfa = 0): más largo, peor
for sp = [40 400]
    s = rcosdesign(0, sp, N20, 'normal');  cs = (numel(s) + 1)/2;  m = cs + 2;   % tau = 0.1 T
    i = mod(m-1, N20)+1 : N20 : numel(s);  v = s(i(i ~= m));
    fprintf('sinc, span %3d: peor caso con tau = 0.1 T: %.4f\n', sp, sum(abs(v))/s(m))
end
% sinc, span  40: peor caso con tau = 0.1 T: 0.7170
% sinc, span 400: peor caso con tau = 0.1 T: 1.1775

%% 6. La raíz repartida: RRC en el Tx y RRC en el Rx
r = rcosdesign(alfa, span, N, 'sqrt');
fprintf('sin cuarto argumento da la raiz: %d\n', isequal(rcosdesign(alfa, span, N), r))
p = conv(r, r);  cp = (numel(p) + 1)/2;
fprintf('RRC sola:  ISI %.3f %%\n', 100*max(abs(r(c + N*k)))/r(c))
fprintf('RRC * RRC: ISI %.1e\n', max(abs(p(cp + N*[-25:-1, 1:25])))/p(cp))
% sin cuarto argumento da la raiz: 1
% RRC sola:  ISI 9.335 %
% RRC * RRC: ISI 2.3e-04

%% 7. El ojo, como en B_basic_tx.m
rng(1);  a = 2*randi([0 1], 2000, 1) - 1;  % PAM-2
y = upfirdn(a, g, N);                      % sobremuestrea y filtra de una vez
retardo = span*N/2;                        % 50 muestras: el pico del símbolo 1
eyediagram(y(retardo + 1 + N*100 + (0:4000)), 2*N, 2, N)

Los bloques 4 y 5 son las dos columnas de la sección 06 medidas con el filtro que se implementa: con α=0,5, 40 símbolos de filtro ya dan el peor caso de la fórmula continua con 1000 vecinos a una unidad de la cuarta cifra (0,2003 contra 0,2004). Con el sinc, alargar el filtro de 40 a 400 símbolos sube la ISI de 0,717 a 1,178: un filtro más largo es una aproximación mejor a un pulso peor. Lo que muerde:

Para tener a mano

  1. s(kT)=akg(0)+∑m≠kamg(kT−mT): el segundo término es la ISI. Es determinística y proporcional a la señal; más potencia no la baja.
  2. Criterio de Nyquist: g(kT)=δk si y sólo si 1T∑mG(f−m/T)=1. Sale de partir la antitransformada en tramos de 1/T. Con receptor, se le pide al pulso total p=g∗b∗f.
  3. Ancho de banda mínimo 1/(2T), con un único pulso: el sinc. Sus colas caen como 1/t y con el reloj corrido ε el peor caso es ∑mε/|m+ε|, que diverge: su ojo tiene ancho cero.
  4. Coseno realzado: sinc por una ventana que no toca los ceros; W=(1+α)/(2T); colas 1/t3. Cumple en frecuencia porque el flanco es simétrico respecto de 1/(2T).
  5. El rolloff compra tolerancia al reloj: ancho del ojo de PAM-2 de 0,56 T con α=0,25, 0,78 T con 0,5 y T con 1. Con 0,5 y el reloj un décimo de símbolo corrido, el peor caso es 0,20.
  6. La raíz en el transmisor y su adaptado en el receptor dan un coseno realzado total: ISI cero y máxima SNR a la vez. Cumple el producto, no cada mitad.
  7. Apertura vertical del ojo de PAM-2: 2(p(τ)−∑j≠0|p(τ+jT)|). La horizontal es donde eso es positivo.
  8. rcosdesign(beta, span, sps, forma): span en símbolos, span*sps par, energía 1, y la forma por omisión es 'sqrt'.
← Anterior Siguiente → Inicio
Relacionados La modulación PAM El coseno realzado El reloj corrido La raíz sola El filtro adaptado y el canal