Bitácora · DCSS · Concepto

La modulación PAM

Unidad 4 · Transmisión en banda base y banda pasante · el alfabeto, el mapper, la energía, el espectro y cómo se genera en MATLAB

La PAM manda la información en la altura de un pulso. El mapper agrupa los bits de a b y le asigna a cada grupo uno de M=2b niveles; el filtro de transmisión pone una copia del pulso por símbolo, escalada por ese nivel. Todo lo demás sale de ahí: cuántos bits por segundo, cuánta energía por símbolo, qué tan juntos quedan los niveles y cuánto espectro se ocupa.

01 · La definición

El bloque transmisor de la filmina 2 tiene dos piezas: el mapper, que convierte los bits bi en símbolos ak, y el filtro de transmisión, cuya respuesta al impulso es la forma de pulso g(t). Sale un símbolo cada T segundos, y la señal es la suma de sus pulsos:

s(t)=∑mamg(t−mT)

En PAM los símbolos son reales y salen de un alfabeto de M niveles equiespaciados y simétricos alrededor de cero. El de la filmina 3 es 𝒜={−3,−1,1,3}, y en general:

am∈𝒜={±1,±3,…,±(M−1)}

La filmina 2 y los scripts PSD_PAM2.m y PSD_PAM4.m usan el mismo alfabeto dividido por M−1, para que el pico sea 1 V: PAM-4 queda en ±1 y ±0,33. Es la misma constelación con otra escala. Lo único que la escala cambia es la energía, y la comparación honesta entre constelaciones se hace a energía fija (sección 04).

Con M niveles, cada símbolo lleva

b=log2Mbits,Rb=log2|𝒜|T=b·Rs

donde Rs=1/T es la tasa de símbolos, en baudios. Es la tabla de la filmina: a 1 Gbaudio, PAM-2, PAM-4, PAM-8 y PAM-16 dan 1, 2, 3 y 4 Gb/s. La fórmula supone que los símbolos son equiprobables e independientes y que el mapper no agrega redundancia. PAM-5, la del script PSD_PAM5.m y la de 1000BASE-T, no tiene una cantidad entera de bits: log25≈2,32.

02 · El mapper y el código Gray

El mapper es una tabla: toma b bits y devuelve un nivel. Con 2b niveles y bits equiprobables no gana ni pierde información. Lo que sí decide es qué palabra queda al lado de qué palabra sobre la recta, y eso importa en el receptor: con ruido gaussiano, casi todos los errores confunden un nivel con el de al lado. La tabla de la filmina para PAM-4, de abajo hacia arriba:

nivelnaturalGray
−11110
−0,331011
0,330101
10000

En el orden natural, confundir 0,33 con −0,33 rompe los dos bits: 01 contra 10. En Gray la misma confusión es 01 contra 11, y rompe uno solo. Ésa es toda la definición: dos niveles vecinos difieren en un bit. Para cualquier M se construye igual. Si p cuenta la posición desde el nivel más alto, con p=0,…,M−1, el nivel es M−1−2p y su etiqueta es

ep=p⊕⌊p/2⌋

el o exclusivo bit a bit de p con él mismo corrido un lugar a la derecha. Pasar de p a p+1 da vuelta los bits de abajo de p hasta el primer cero, y el corrimiento hace que todos esos cambios se cancelen de a pares salvo uno.

Sin Gray el costo del error al vecino no es fijo: depende del par. El peor es el del medio, entre 01…1 y 10…0, que difieren en los b bits. Promediado sobre los M−1 pares de vecinos, el orden natural cuesta

2M−b−2M−1bits por error al vecino

que da 1,333 con M=4, 1,571 con 8 y 1,733 con 16, y tiende a 2. Gray lo deja en 1 para todo M. No cambia cuántos símbolos se deciden mal: cambia cuántos bits cuesta cada uno. De ahí sale la regla BER≈SER/b, que es una aproximación y tarda en cumplirse cuando la constelación es grande.

03 · La energía media, paso a paso

Con los M niveles equiprobables, la energía media por símbolo es el promedio de los cuadrados. Como el alfabeto es simétrico, alcanza con sumar la mitad positiva y duplicarla:

Es=1M∑a∈𝒜a2=2M∑i=1M/2(2i−1)2

Paso 1: es una suma de cuadrados impares. Desarrollando el cuadrado quedan tres sumas conocidas, ∑i2=n(n+1)(2n+1)/6, ∑i=n(n+1)/2 y ∑1=n:

∑i=1n(2i−1)2=4∑i=1ni2−4∑i=1ni+n=n(4n2−1)3

Con n=2 da 1+9=10, y la fórmula da 2·15/3=10.

Paso 2: poner n=M/2. Entonces 4n2−1=M2−1, y la suma vale (M/2)(M2−1)/3.

Paso 3: multiplicar por 2/M. El M/2 se cancela:

Es=M2−13

Con los niveles a una distancia d cualquiera en vez de 2, todo se escala por (d/2)2:

Es=d2(M2−1)12

El alfabeto de la cátedra tiene d=2, así que la segunda forma da la primera. Para PAM-2, 4, 8 y 16 son 1, 5, 21 y 85. La segunda vale también para M impar: los niveles de PSD_PAM5.m van de −1 a 1 cada 0,5, y con d=0,5 y M=5 da 0,5. Y la escala de pico 1 V de la filmina 2, d=2/(M−1), deja PAM-4 en 5/9. Medida sobre 105 símbolos sorteados, la energía cae a menos de dos errores estándar de la fórmula (sección 07).

La forma cerrada dice lo que la tabla sugiere: la energía crece como M2. Los niveles nuevos no se meten en el medio: se cuelgan de las puntas, y en un promedio de cuadrados las puntas pesan más. Cuánto pesa eso sobre el espectro, y por qué no lo ensancha, es la nota de los niveles y el espectro.

04 · Cómo cambia con M: distancia contra energía

La distancia mínima es la menor separación entre dos niveles, y es la que decide cuánto ruido aguanta el enlace: el receptor se equivoca cuando el ruido empuja la muestra más allá de la mitad del camino al vecino. En el alfabeto de la cátedra vale dmin=2 para todo M, pero eso no es una comparación: PAM-16 la consigue gastando 85 veces la energía de PAM-2.

La comparación honesta es a energía fija por bit, Eb=Es/b, que es lo que cuesta mandar la misma información. La cifra que no depende de la escala es cuánta distancia al cuadrado se compra con cada unidad de energía por bit:

dmin2Eb=4b(M2−1)/3=12log2MM2−1
Mbits por símboloEsd²min/Ebenergía extra por bit
21140 dB
4251,63,98 dB
83210,57148,45 dB
164850,188213,27 dB

La última columna es cuánta más energía por bit necesita cada constelación para tener la misma distancia mínima que PAM-2: 10log10[(M2−1)/(3b)]. Todo es forma cerrada. Cada bit agregado cuesta 3,98, 4,47 y 4,82 dB, y el costo tiende a 6,02 dB: duplicar M multiplica M2−1 casi por cuatro, y el b del denominador crece de a uno.

Ése es el compromiso entre tasa, ancho de banda y robustez de la filmina 3. Hay dos maneras de subir Rb=b/T. Achicar T choca con el ancho de banda: el espectro escala con 1/T. Agrandar M choca con la potencia y el ruido: la tabla de arriba. Leído al revés, con la tasa de bits fija, PAM-M manda símbolos b veces más largos y ocupa b veces menos banda que PAM-2, a cambio de esos decibeles. Con el canal limitado en banda, la filmina tacha la primera opción y queda sólo la segunda.

Simulación Los mismos 24 bits, en M niveles — arriba, la constelación a la misma energía por bit, con la etiqueta de cada nivel y cuántos bits cambian entre vecinos; abajo, la señal con pulso rectangular y los bits que lleva cada símbolo. Arranca en PAM-2, donde un bit es un símbolo: cambiá M.
bits por símbolo — símbolos para 24 bits — ancho de banda ÷ el de PAM-2 — Es del alfabeto ±1, ±3, … — d²min/Eb — energía extra por bit — bits por error al vecino, peor · promedio —

Al pasar de PAM-2 a PAM-16 los 24 bits se reagrupan en 24, 12, 8 y 6 símbolos. Con la misma tasa de bits cada símbolo dura b veces más, y la señal cambia de nivel b veces menos seguido: ésa es la banda que se ahorra. Con la misma tasa de símbolos la señal termina antes: en el mismo tiempo cabrían b veces más bits. En los dos casos, a la misma energía por bit los niveles se aprietan, y la distancia mínima al cuadrado cae de 4 a 0,19. Sacando el Gray, el salto del medio de la constelación pasa a costar los b bits.

05 · El espectro y la eficiencia espectral

Si los símbolos tienen media nula y no están correlacionados, la densidad espectral de potencia de s(t) tiene forma cerrada. La cuenta sale de ver al transmisor como un filtro g excitado por el tren de impulsos ∑mamδ(t−mT): con símbolos blancos ese tren tiene PSD plana, σa2/T, y el filtro la multiplica por |G(f)|2:

S(f)=σa2T|G(f)|2,σa2=Es=M2−13

La constelación entra por un solo número, σa2, que multiplica a toda la curva. La forma del espectro, dónde cae y dónde termina, la pone el pulso. Por eso, a potencia fija, el espectro de PAM-2 y el de PAM-8 son el mismo: el espectro no mira cuántos niveles hay. Integrando S(f) sale la potencia, P=σa2Eg/T, con Eg la energía del pulso: la energía media de un símbolo, gastada una vez por período. Si los símbolos no tuvieran media nula aparecerían además deltas en los múltiplos de 1/T: potencia que no lleva información. Por eso el alfabeto es simétrico.

La eficiencia espectral es cuántos bits por segundo se mandan por cada hertz, ν=Rb/W. Con un pulso de coseno realzado de rolloff α, el espectro termina en W=(1+α)/(2T), y la filmina 3 escribe:

ν=RbW=log2|𝒜|/T(1+α)/(2T)=2log2|𝒜|1+α

El T se cancela: la eficiencia no depende de la tasa, sólo de los bits por símbolo y del exceso de banda. Se maximiza con α=0, el sinc, que no se puede realizar, y vale 2b. Con α=0,3 da 1,538, 3,077, 4,615 y 6,154 b/s/Hz para PAM-2, 4, 8 y 16: proporcional a b, sin descuento, porque W no mira los niveles. El número depende de qué se llame ancho de banda. Éste es el borde del espectro de un solo lado; con el ancho ocupado al 99 %, medido de los dos lados, los números son otros y la proporcionalidad es la misma.

06 · En tiempo discreto: sobremuestrear y filtrar

Una computadora no tiene t continuo. Lo imita con una grilla N veces más fina que la de los símbolos, fs=N/T: es el OVR = 8 de los scripts de la clase y el N = 4 de B_basic_tx.m. El tren de impulsos pasa a ser la secuencia de símbolos con N−1 ceros intercalados, que es lo que hace upsample:

x[n]={an/Nn múltiplo de N0en otro casoX(ejω)=A(ejωN)

Intercalar ceros comprime el espectro de los símbolos N veces: entre −π y π aparecen N copias, y todas tienen la misma altura que la original: las imágenes son la copia exacta. El filtro de transmisión, con el pulso muestreado cada T/N, se queda con una sola y rellena los ceros con la forma del pulso:

s[n]=∑kx[k]g[n−k]=∑mamg[n−mN]

Es la definición de la sección 01 muestreada en t=nT/N. Los ceros de x no suman nada en la convolución, así que cada símbolo pone exactamente una copia del pulso. Con el rectángulo ones(1, OVR) de PSD_PAM4.m sale la señal escalonada de la filmina; con la raíz de coseno realzado de B_basic_tx.m, una curva suave que ocupa menos banda. Cómo se elige ese pulso para que los símbolos vecinos no se pisen es el pulse shaping; acá el pulso sólo se usa.

Dos detalles de la implementación. filter es causal, así que el pulso sale atrasado (Ntaps−1)/2 muestras, y el script de la cátedra las descarta. Y la amplitud depende de cómo esté normalizado el pulso: las funciones de la cátedra lo normalizan a suma 1, y por eso el script multiplica por N al sobremuestrear; rcosdesign lo normaliza a energía 1, y su suma da cerca de N.

07 · El análisis en MATLAB

El transmisor completo con PAM-4, en la forma de B_basic_tx.m: bits, mapper, upsample y filtro. Lo que figura como comentario es la salida real de correrlo en R2026a.

%% 1. Parámetros
M = 4;  b = log2(M);        % niveles y bits por símbolo
L = 1e5;                    % símbolos
N = 4;                      % muestras por símbolo
rolloff = 0.3;  span = 10;  % raíz de coseno realzado de 10 símbolos
rng(1)

%% 2. Los bits, de a b por símbolo
bits = randi([0 1], L*b, 1);
k = bit2int(bits, b);                   % cada grupo de b bits, como entero (MSB primero)

%% 3. El mapper a mano: la tabla Gray de la filmina, 00 arriba
p = (0:M-1).';                          % posición contando desde el nivel más alto
etiqueta = bitxor(p, bitshift(p, -1));  % Gray: e = p xor (p >> 1)
nivel = zeros(M, 1);
nivel(etiqueta + 1) = (M-1) - 2*p;      % +3, +1, -1, -3
a = nivel(k + 1);
disp([nivel(etiqueta+1), etiqueta])
%      3     0
%      1     1
%     -1     3
%     -3     2

%% 4. El mismo mapper con pammod
ap = pammod(k, M, 0, 'gray');
fprintf('pammod == a: %d   pammod == -a: %d\n', isequal(ap, a), isequal(ap, -a))
% pammod == a: 0   pammod == -a: 1

%% 5. Energía media y distancia mínima
fprintf('Es medida = %.4f   (M^2-1)/3 = %.4f\n', mean(a.^2), (M^2-1)/3)
fprintf('dmin = %g\n', min(diff(unique(a))))
% Es medida = 4.9862   (M^2-1)/3 = 5.0000
% dmin = 2

%% 6. Gray: los vecinos difieren en un bit
[~, orden] = sort(nivel);
vecinos = bitxor(orden(1:end-1) - 1, orden(2:end) - 1);
disp(sum(dec2bin(vecinos, b) == '1', 2).')
% 1     1     1

%% 7. Sobremuestrear y filtrar con el pulso
g = rcosdesign(rolloff, span, N, 'sqrt');   % span*N + 1 = 41 coeficientes
x = upsample(a, N);                         % N-1 ceros entre símbolos
s = filter(g, 1, x);                        % s(t) = sum a_m g(t - mT), muestreada
fprintf('taps = %d   sum(g.^2) = %.4f   sum(g) = %.4f   retardo = %d muestras\n', ...
        numel(g), sum(g.^2), sum(g), (numel(g)-1)/2)
% taps = 41   sum(g.^2) = 1.0000   sum(g) = 1.9907   retardo = 20 muestras

%% 8. La potencia: Es * energía del pulso / N
fprintf('potencia medida / fórmula = %.4f\n', mean(s.^2) / ((M^2-1)/3 * sum(g.^2) / N))
% potencia medida / fórmula = 0.9973

%% 9. La PSD contra sigma_a^2 |G(f)|^2 / T  (T = 1, fs = N)
[S, f] = pwelch(s, hann(1024), 512, 1024, N, 'centered');
G = freqz(g, 1, 2*pi*f/N);                  % f es un vector: no hay escalar que muerda
Steo = (M^2-1)/3 * abs(G).^2 / N^2;
banda = abs(f) < (1 - rolloff)/2;
fprintf('PSD medida / fórmula en la banda plana = %.4f\n', mean(S(banda) ./ Steo(banda)))
% PSD medida / fórmula en la banda plana = 0.9959
figure
plot(f, 10*log10(S), f, 10*log10(Steo), '--'); grid on
xlabel('f \cdot T'); ylabel('PSD [dB]'); legend('pwelch', '\sigma_a^2 |G(f)|^2 / T')

%% 10. La forma de onda: los símbolos y la señal, sin el retardo del filtro
d = (numel(g) - 1)/2;
figure
subplot(211); stem(0:39, a(1:40)); grid on; ylabel('a_m')
subplot(212); plot((0:40*N-1)/N, s(d+1:d+40*N)); grid on
xlabel('t / T'); ylabel('s(t)')

%% 11. La energía media para cada M, medida contra la forma cerrada
for M = [2 4 8 16]
    rng(1)
    a = 2*randi([0 M-1], L, 1) - (M-1);     % niveles ±1, ±3, ..., ±(M-1)
    fprintf('M = %2d   Es medida = %8.4f   (M^2-1)/3 = %3d\n', M, mean(a.^2), (M^2-1)/3)
end
% M =  2   Es medida =   1.0000   (M^2-1)/3 =   1
% M =  4   Es medida =   5.0219   (M^2-1)/3 =   5
% M =  8   Es medida =  21.1109   (M^2-1)/3 =  21
% M = 16   Es medida =  85.3874   (M^2-1)/3 =  85

Los números medidos se leen contra su dispersión. Con 105 símbolos, el error estándar de la media de a2 es 0,25 % de Es para PAM-4, 0,28 % para PAM-8 y 0,28 % para PAM-16, y las cuatro mediciones caen a menos de dos. El 1,0000 exacto de PAM-2 no verifica nada: ahí a2=1 siempre. La potencia del bloque 8 queda 0,27 % abajo por la misma razón, porque hereda la energía sorteada del bloque 5; la PSD del bloque 9 es un estimador de Welch y queda 0,41 % abajo.

Cuatro detalles que muerden:

Para tener a mano

  1. s(t)=∑mamg(t−mT), con am∈{±1,±3,…,±(M−1)}. El mapper pone el número; el pulso, la forma.
  2. b=log2M bits por símbolo y Rb=b·Rs.
  3. Gray: niveles vecinos difieren en un bit. Etiqueta de la posición p desde arriba: p⊕⌊p/2⌋. No cambia la SER, baja la BER. pammod(..., 'gray') da la tabla espejada.
  4. Es=(M2−1)/3 con dmin=2; en general d2(M2−1)/12: 1, 5, 21, 85.
  5. A energía fija por bit, dmin2/Eb=12b/(M2−1): 4, 1,6, 0,57, 0,19. Cada bit extra cuesta 3,98, 4,47, 4,82 dB, y tiende a 6,02.
  6. S(f)=σa2|G(f)|2/T: la forma la pone el pulso, los niveles sólo la escala.
  7. ν=2log2|𝒜|/(1+α) con coseno realzado; máxima con α=0.
  8. En MATLAB: randi → mapper → upsample(a, N) → filter(g, 1, x), y descartar (Ntaps−1)/2 muestras de retardo.
← Anterior Siguiente → Inicio
Relacionados El espectro y los niveles La ISI y el pulse shaping La modulación QAM El mapper y el demapper