Unidad 4 · Transmisión en banda base y banda pasante · el espectro por tramos, el pulso que sale de él, por qué cumple Nyquist, sus colas, su truncado y la cadena que lo tiene que dar entero
El coseno realzado es el pulso que la cátedra usa para que los símbolos no se pisen. Se dice que «evita la ISI cuando el canal es lineal», y la frase tiene dos partes que conviene separar. La ISI que evita es una sola: la que dejan las colas de los pulsos vecinos en el instante en que se muestrea cada símbolo. La evita porque sus colas pasan por cero justo en esos instantes, que es el criterio de Nyquist. Y eso vale para el pulso que el receptor muestrea, no para el que el transmisor manda: vale sólo si la cadena entera —filtro de transmisión, canal y filtro de recepción— da un coseno realzado. La linealidad es lo que permite hablar de esa cadena como un único pulso.
Con filtro de transmisión , canal y filtro de recepción , la muestra del símbolo es, en la notación de la filmina,
La suma del medio es la ISI: lo que aportan las colas de los otros pulsos en el instante del símbolo . Su definición, por qué no baja con más potencia y cómo se mide su peor caso están en la ISI y el pulse shaping. El coseno realzado anula esa suma término a término, porque cumple para todo . No toca los otros dos términos: el ruido sigue ahí, y la ISI de muestrear corrido también, porque los ceros están en y no al lado (es el reloj corrido).
Y la condición cae sobre , el pulso de punta a punta. Si es un coseno realzado, no hay ISI. Si el que es coseno realzado es otro —el que se diseñó para el transmisor, por ejemplo—, la frase no dice nada. Las secciones 02 a 08 son el pulso; la 09, la cadena.
La filmina lo define por su espectro, con rolloff (en los scripts, rolloff; en rcosdesign, beta):
Tres tramos, y cada uno dice algo.
En los bordes del flanco el llega con pendiente cero, tanto al tramo plano como al cero. Ese detalle, que parece de terminación, es el que decide las colas del pulso (sección 06).
El pulso es la antitransformada, . Integrar el del flanco a lo bruto funciona, pero hay un camino más corto que además explica todo lo que viene: ver el espectro como un rectángulo suavizado.
Paso 1: el espectro es un rectángulo convolucionado con medio coseno. Sean el rectángulo del sinc y un núcleo de ancho con forma de medio coseno:
los dos en cero afuera. El núcleo tiene área 1: . La convolución es por la parte del área del núcleo, centrado en , que cae adentro del rectángulo. Si el núcleo entero cae adentro, vale : es el tramo plano. Si cae entero afuera, vale 0. En el flanco, con y , queda adentro la parte del núcleo con :
Y es el de la filmina: con el argumento vale , y . Así que , exacto.
Paso 2: la antitransformada del rectángulo es la de siempre:
Paso 3: la antitransformada del medio coseno. es par, así que la exponencial se reduce a su coseno y la integral a la mitad positiva. Con , y , y el producto de cosenos pasado a suma:
Como , los dos senos son , con . Sale como factor común, el corchete queda , y sacando del denominador:
porque y . Es la ventana de la filmina, y vale 1 en porque el núcleo tiene área 1.
Paso 4: convolución en frecuencia es producto en el tiempo. Como , el pulso es el producto de las dos antitransformadas:
La lectura que deja este camino: el sinc viene del rectángulo, y es el que pone los ceros; la ventana viene del suavizado del borde, y es la que apaga las colas. Suavizar el espectro en frecuencia es enventanar el pulso en el tiempo. Para comprobar que el par está bien, se toma el pulso del lado del tiempo —rcosdesign(0.5, 400, 32, 'normal'), 12 801 muestras— y se le hace la FFT: contra los tres tramos de la filmina, la mayor diferencia es 1,5·10⁻⁶ de , lo que cuesta haberlo cortado a 400 símbolos.
La ventana tiene denominador , que se anula en . Ahí también se anula el numerador, así que es . Con la ventana es , y en L'Hôpital deriva arriba y abajo:
El sinc, en cambio, es regular ahí. El pulso vale su producto:
Tres casos para tener a la vista. Con —0,5, 0,25— el punto singular cae en , donde el sinc ya es cero, y vale 0. Con cae en y vale . Y con cae en , que con cuatro muestras por símbolo es justo la quinta muestra desde el centro: vale .
Medido en MATLAB en esa muestra: rcosdesign da −0,1414213562, el límite exacto. La fórmula escrita tal cual da -Inf: el denominador sale 0 exacto y el coseno 6,1·10⁻¹⁷, que no es cero en coma flotante. Y el truco de raised_cosine.m y my_rcosine.m, sumarle 10⁻⁴ al rolloff para que ninguna muestra caiga en el punto, da −0,1414036771: esquiva el infinito a cambio de 1,8·10⁻⁵ de error, y de estar usando un rolloff un poco distinto en todas las demás muestras. Las dos cosas son despreciables al lado de truncar el pulso (sección 07), pero conviene saber de dónde salen.
El criterio pide que las réplicas del espectro separadas sumen una constante, ; de dónde sale y por qué equivale a está en la nota de la ISI. Con el paso 1 la demostración es una línea: plegar conmuta con convolucionar.
El corchete es una fila de rectángulos de ancho puestos uno al lado del otro: tapa el eje entero a altura . Convolucionar una constante con un núcleo de área 1 la deja igual. En ningún paso se usó el valor de , ni siquiera la forma del núcleo: cualquier núcleo de área 1 da un pulso de Nyquist. Con un núcleo rectangular sale el espectro trapezoidal de la filmina de «otras formas de onda que también satisfacen el criterio»; con el medio coseno, el coseno realzado. El sólo asegura que en cada frecuencia se solapen a lo sumo dos réplicas.
Del lado del tiempo es el mismo hecho: el pulso es , el sinc pone ceros en todos los con , y la ventana los respeta porque es finita en todos lados —eso es lo que dejó la sección 04— y vale en el origen.
Y la simetría vestigial es lo mismo mirado en el flanco. Del paso 1, a distancia de para cada lado:
El flanco es más una función impar alrededor de , y la parte impar se cancela con la de la réplica que baja del otro lado. Pasado el flanco () la cuenta es . Sobre la FFT del pulso largo de la sección 03, da 0,5000 y la suma de las dos mitades se aparta de en 2,1·10⁻⁸ como máximo, sobre 1001 valores de entre 0 y .
El sinc cae como . La ventana, lejos del origen, es un coseno sobre : cae como . El producto queda acotado por . Medido: el mayor sobre un símbolo, lejos del centro, con la fórmula continua en 20 001 puntos por intervalo:
| pulso | entre 10 y 11 T | entre 100 y 101 T | entre 1000 y 1001 T | por década |
|---|---|---|---|---|
| sinc, α = 0 | 3,033·10⁻² | 3,167·10⁻³ | 3,182·10⁻⁴ | 20,0 dB |
| RC, α = 0,25 | 4,795·10⁻⁴ | 1,166·10⁻⁶ | 1,181·10⁻⁹ | 59,9 dB |
| RC, α = 0,5 | 2,210·10⁻⁴ | 2,422·10⁻⁷ | 2,447·10⁻¹⁰ | 59,9 dB |
| RC, α = 1 | 3,708·10⁻⁵ | 3,949·10⁻⁸ | 3,976·10⁻¹¹ | 59,9 dB |
| RRC, α = 0,5 | 1,596·10⁻³ | 1,592·10⁻⁵ | 1,592·10⁻⁷ | 40,0 dB |
La columna de la derecha es la de 100 a 1000. Veinte decibeles por década es ; sesenta es . Con la primera década da sólo 52,3 dB: a diez símbolos vale 5, y el 1 del denominador de la ventana todavía pesa. A mil símbolos, da 1,18, 0,245 y 0,0398 contra la cota de 1,27, 0,318 y 0,0796: la cota es buena en el orden y floja en la constante, porque el seno y el coseno no llegan a su pico a la vez. Con el producto es y la constante exacta es .
La última fila explica el exponente. Una regla de la transformada de Fourier: si el espectro y sus derivadas hasta la son continuas y la -ésima salta, el pulso cae como . El rectángulo del sinc salta él mismo: , . El llega a los dos bordes del flanco con pendiente cero, así que lo primero que salta es la derivada segunda: . La raíz es un sin el cuadrado, que llega al cero con pendiente: salta la primera derivada y cae como , cuarenta decibeles por década. El filtro que de verdad se construye —la raíz— tiene colas más largas que el pulso que promete.
Un pulso de colas infinitas se implementa como un FIR, y hay que cortarlo. rcosdesign(beta, span, sps) pide el largo en símbolos, span, y devuelve span*sps + 1 coeficientes; los 101 de la cátedra son span = 25 con . Cortar cuesta dos cosas distintas, y al coseno realzado y a su raíz les cuesta distinto. Con y :
| span | taps | ISI del RC | energía fuera de banda, RC | ídem, RRC | ISI de RRC∗RRC | dónde |
|---|---|---|---|---|---|---|
| 4 | 17 | 0 | −38,0 dB | −33,4 dB | −53,7 dB | k = ±3 |
| 6 | 25 | 0 | −52,3 dB | −37,8 dB | −38,8 dB | k = ±3 |
| 8 | 33 | 0 | −54,5 dB | −42,2 dB | −60,4 dB | k = ±4 |
| 12 | 49 | 0 | −63,6 dB | −47,3 dB | −64,3 dB | k = ±6 |
| 16 | 65 | 0 | −70,0 dB | −51,0 dB | −67,9 dB | k = ±8 |
| 25 | 101 | 0 | −81,2 dB | −56,5 dB | −72,7 dB | k = ±13 |
| 50 | 201 | 0 | −96,0 dB | −65,8 dB | −75,2 dB | k = ±25 |
| 100 | 401 | 0 | −110,2 dB | −74,8 dB | −95,9 dB | k = ±50 |
La ISI es el mayor instante de símbolo distinto del propio, relativo a él. La energía fuera de banda es la fracción de que cae en , donde el pulso ideal no tiene nada; es una integral, y por eso no depende de la grilla: con span 25 la raíz da −56,74, −56,52, −56,46 y −56,45 dB con FFT de 4096 a 262 144 puntos. Se eligió en vez del pico del primer lóbulo fuera de banda, que se mueve 5 dB según dónde se empiece a buscar.
Truncar el coseno realzado no rompe Nyquist. La tercera columna es cero en todas las filas: las muestras en que quedan valían cero, y las que se tiraron no se leen. Lo que rompe es la banda: el pulso cortado ya no es limitado en banda, y la energía que se escapa baja unos 15 dB cada vez que se duplica el span (−81,2 → −96,0 → −110,2). La raíz pierde en los dos frentes. Deja salir más energía y la achica más despacio, 9 dB por duplicación (−56,5 → −65,8 → −74,8). Son los exponentes de la sección 06: con colas , la energía que queda más allá del corte va como , y dB, dB. Y el par de raíces cortadas ya no es exactamente un coseno realzado, así que deja ISI: −72,7 dB con los 101 taps de la cátedra.
Esa ISI residual tiene dos rasgos. Vive en el borde del corte, no al lado del pulso: la columna «dónde» sigue al span. Y no baja pareja: con span 6 es peor que con span 4, porque lo que se tira depende de en qué fase de su oscilación queda cortada la cola. Que no se deba a la raíz sola —que por sí misma deja un 9,335 % en el vecino, cualquiera sea el largo— está en el pulso que llega.
rcosdesign no deja el pico en 1: deja la energía en 1, sum(h.^2) = 1. El pico que resulta tiene forma cerrada, y sale de Parseval. La energía del coseno realzado continuo, con pico 1, es la de su espectro: el tramo plano aporta , y los dos flancos, de ancho entre los dos, un que promedia :
Muestreado cada , la suma de cuadrados es esa integral por —vale porque el pulso ocupa menos que la mitad de la tasa de muestreo—. Normalizar a energía 1 es dividir por su raíz. Para la raíz la cuenta es más corta: , y su pico, sin normalizar, es el de root_raised_cosine.m. Queda:
| α | pico RC, medido | forma cerrada | pico RRC, medido | forma cerrada |
|---|---|---|---|---|
| 0,25 | 0,5164 | 0,5164 | 0,5342 | 0,5342 |
| 0,5 | 0,5345 | 0,5345 | 0,5683 | 0,5683 |
| 0,75 | 0,5547 | 0,5547 | 0,6025 | 0,6025 |
| 1 | 0,5774 | 0,5774 | 0,6366 | 0,6366 |
Con y span 25. El pico va como : el coseno realzado de rolloff 0,5 da 0,7559, 0,5345, 0,3780 y 0,2673 con , 4, 8 y 16, las cuatro iguales a la fórmula en el cuarto decimal.
¿Por qué energía y no pico? Porque rcosdesign está pensada para el par. El pulso total conv(r, r) vale, en su centro, sum(r.^2): la energía de la raíz. Con energía 1, el par da pico 1 exacto —medido: 1,0000— y los niveles del ojo a la salida del receptor son los símbolos. La trampa es la otra: el coseno realzado con 'normal', energía 1, da pico 0,5345 y un ojo en ±0,53; y olvidarse el cuarto argumento da la raíz, porque la forma por omisión es 'sqrt' (la consecuencia está medida en la nota de la ISI).
Las funciones de la cátedra normalizan a suma 1, ganancia 1 en continua. Con eso el pico del coseno realzado queda en 0,2500 y el de la raíz en 0,2842, o sea y , y el par de raíces da pico 0,2500. Por eso E_folded_spectrum.m multiplica por N al diezmar el pulso total: h_tot_dw = N*h_tot(1:N:end) devuelve el pico a 1.
Ésta es la parte de la frase que confundía. El receptor no muestrea el pulso del transmisor: muestrea el que sale de tres filtros en cascada. Que esa cascada sea un pulso, uno solo, es lo que compra la linealidad. Si cada bloque es lineal e invariante en el tiempo, la salida para una fila de símbolos es la suma de copias corridas de la respuesta a uno solo, y esa respuesta es la convolución de las tres:
Es la filmina 13: para que el criterio siga valiendo, el que tiene que cumplir es . Hay cuatro situaciones, y las cuatro se miden con la cadena de la cátedra: , , raíces de 101 taps en transmisor y receptor.
(a) Canal plano. Con y la raíz repartida, y no hay ISI. El coseno realzado de rcosdesign, mirado solo, da ISI 0. El par de raíces da −72,7 dB, que es el piso por truncar (sección 07), no ISI del diseño.
(b) La linealidad es lo que permite multiplicar. Sin ella no habría un al que pedirle nada: no existiría «el pulso total», sólo una salida que depende de toda la secuencia.
(c) Un canal lineal pero no plano mete su en el producto, y deja de ser el coseno realzado. «Plano» quiere decir plano donde hay espectro: un pasabajos que corta más allá de multiplica por 1 todo lo que importa. Con el pasabajos que usa E_folded_spectrum.m, un fir1 de ventana Hamming, en cadena RRC → canal → RRC, bajando el corte:
| canal | corte | ISI máxima | peor caso D |
|---|---|---|---|
| coseno realzado solo | — | 0 | 0 |
| plano, RRC∗RRC | — | −72,7 dB | 0,0015 |
| fir1(66, 0.5) | 1/T | −72,7 dB | 0,0024 |
| fir1(66, 0.375) | 0,75/T | −70,3 dB | 0,0051 |
| fir1(66, 0.35) | 0,7/T | −53,4 dB | 0,0198 |
| fir1(66, 0.3) | 0,6/T | −34,6 dB | 0,1153 |
| fir1(66, 0.25) | 0,5/T | −20,6 dB | 0,4474 |
| fir1(66, 0.2) | 0,4/T | −11,8 dB | 1,1235 |
fir1 normaliza el corte a , así que 0,3 es , adentro del flanco, que va de 0,25 a . Mientras el corte no entra al flanco la ISI se queda en el piso; en cuanto entra, sube 36 dB en un décimo de . Lo que pasa es la sección 05 al revés: el canal le recorta a la réplica de un lado lo que tenía que devolverle a la del otro, la suma deja de ser constante y el plegado se hunde en . Con el corte en el peor caso pasa de 1 y el ojo de PAM-2 se cierra sin ruido. La tabla mide en el pico, que para estos canales simétricos es el mejor instante; en la última fila correr el muestreo 0,04 deja el mismo peor caso con el vecino mayor en −10,5 dB, que es lo que lee el widget.
Con el canal fijo en el rolloff grande es el que más pierde, porque su flanco llega más lejos: −52,3 dB con (que es su propio piso de truncado: su banda termina en ), −49,1 con 0,25, −34,6 con 0,5, −29,8 con 0,75 y −27,7 con 1.
Dos avisos sobre este número. El script de la clase escribe fir1(67, 0.3), y el primer argumento de fir1 es el orden: salen 68 coeficientes, el canal retarda media muestra y la misma cadena da −16,6 dB, casi todo de reloj corrido y no de canal. Y la cátedra adapta el receptor a transmisor más canal, no sólo al transmisor; con ese receptor el mismo pasabajos deja −31,2 dB. Las dos cosas, y por qué ese receptor no puede arreglarlo, están en el filtro adaptado.
Con el canal plano no pasa nada al mover : el plegado se queda en 1 y los instantes de símbolo en el eje. Elegí el pasabajos: arranca cortando en , más allá de la señal, y todavía no pasa nada aunque el canal no sea plano. Bajalo hasta que la línea punteada entre en el flanco de las réplicas grises: ahí el plegado se hunde en y abajo los instantes de los vecinos se despegan del eje. Después probá el pasatodo, que es el caso que enseña más: las réplicas grises no se mueven un píxel, porque el canal no toca ningún módulo, y el plegado azul igual se arruga. Con la arruga casi no se ve y las lecturas ya la cuentan; con 0,6 se ve.
Un canal de módulo plano no alcanza. El pasatodo , a la tasa de muestreo, tiene en todas las frecuencias: el de la cadena difiere del de la cadena sin canal en 1,8·10⁻¹⁵. Pero su retardo de grupo cambia con la frecuencia, cada réplica llega girada distinto, y la suma compleja del plegado deja de cancelar. Muestreando en el mejor instante —el que hace mínimo el peor caso, buscado cada dentro de medio símbolo alrededor del pico—:
| a | ISI máxima | peor caso D | en la muestra más alta |
|---|---|---|---|
| 0,1 | −65,1 dB | 0,0042 | −26,9 dB |
| 0,2 | −58,2 dB | 0,0077 | −19,2 dB |
| 0,3 | −49,2 dB | 0,0151 | −26,8 dB |
| 0,4 | −41,6 dB | 0,0302 | −27,0 dB |
| 0,5 | −32,2 dB | 0,0660 | −16,1 dB |
| 0,6 | −24,6 dB | 0,1526 | −20,3 dB |
La última columna es la trampa de medirlo mal: si se muestrea en la muestra más alta de la grilla de cuatro por símbolo, los números saltan sin orden, porque el retardo del pasatodo no es un número entero de muestras y la grilla cae corrida del centro del pulso en una cantidad que cambia con . Eso es reloj, no canal. Con el mejor instante la ISI crece pareja con , y ésa es la del canal.
(d) Un canal no lineal no tiene pulso total. Se mete, entre el transmisor y el receptor, un amplificador que satura, con , sobre una señal PAM-2 que llega a 0,738 de pico. Se mide la respuesta a un símbolo aislado y se predice la salida para 4000 símbolos al azar sumando copias corridas de ella, que es lo que el pulso total significa. La predicción erra por 9,2 % del pico en el peor instante; sin el amplificador, la misma cuenta erra por 1,6·10⁻¹⁵. El pulso aislado casi no tiene ISI —peor caso 0,0160, que predice un ojo de apertura 1,968— y el ojo medido con los datos se abre sólo 1,808. Sin amplificador, predicho y medido dan 1,9971 y 1,9974. Con el error es 4,2 %, y con , 15,0 %. No hay criterio de Nyquist que aplicar, porque no hay un del que pedir ceros: la interferencia depende de los vecinos de una manera que ninguna suma de pulsos describe.
Quién arregla el caso (c). El transmisor no conoce el canal, así que no puede mandar la raíz de algo que, multiplicado por , dé el coseno realzado. Lo que se hace es agregar otro filtro lineal en el receptor, el ecualizador, elegido para que la cascada entera vuelva a pasar por cero en los instantes de símbolo: el zero forcing lo pide exacto invirtiendo el canal, y el transceptor adaptativo lo aprende con los datos cuando el canal no se conoce. Funciona por la misma razón que el coseno realzado: porque todo es lineal y un filtro más es un factor más en el producto. En el caso (d) esa herramienta tampoco alcanza.
Las dos formas de rcosdesign, los ceros en , el punto singular, la simetría vestigial y la cadena con el canal. Lo que figura como comentario es la salida real de correrlo en R2026a.
%% 1. Las dos formas de rcosdesign: alfa = 0.5, 25 símbolos, N = 4 N = 4; alfa = 0.5; span = 25; g = rcosdesign(alfa, span, N, 'normal'); % el coseno realzado r = rcosdesign(alfa, span, N); % sin cuarto argumento: la raíz c = (numel(g) + 1)/2; % la muestra de t = 0 fprintf('RC: energía %.4f, pico %.4f, 1/sqrt(N(1-a/4)) = %.4f\n', ... sum(g.^2), g(c), 1/sqrt(N*(1 - alfa/4))) fprintf('RRC: energía %.4f, pico %.4f, (1-a+4a/pi)/sqrt(N) = %.4f\n', ... sum(r.^2), r(c), (1 - alfa + 4*alfa/pi)/sqrt(N)) p = conv(r, r); fprintf('pico de RRC*RRC = %.4f\n', p((numel(p) + 1)/2)) % RC: energía 1.0000, pico 0.5345, 1/sqrt(N(1-a/4)) = 0.5345 % RRC: energía 1.0000, pico 0.5683, (1-a+4a/pi)/sqrt(N) = 0.5683 % pico de RRC*RRC = 1.0000 %% 2. Los ceros en kT, para cualquier rolloff for a = [0 0.25 0.5 1] ga = rcosdesign(a, span, N, 'normal'); fprintf('alfa = %.2f: max |g(kT)|/g(0) = %.1e\n', a, ... max(abs(ga(c + N*[-12:-1, 1:12])))/ga(c)) end % alfa = 0.00: max |g(kT)|/g(0) = 0.0e+00 % alfa = 0.25: max |g(kT)|/g(0) = 0.0e+00 % alfa = 0.50: max |g(kT)|/g(0) = 0.0e+00 % alfa = 1.00: max |g(kT)|/g(0) = 0.0e+00 %% 3. El punto singular: con alfa = 0.4, t = T/(2 alfa) = 1.25 T es la muestra 5 a = 0.4; t = 1.25; ga = rcosdesign(a, span, N, 'normal'); ga = ga/ga(c); rc = @(t, a) sinc(t) .* cos(pi*a*t) ./ (1 - (2*a*t).^2); fprintf('rcosdesign %.10f | (pi/4)sinc(1/2a) %.10f | fórmula %g | con a + 1e-4 %.10f\n', ... ga(c + 5), pi/4*sinc(1/(2*a)), rc(t, a), rc(t, a + 1e-4)) % rcosdesign -0.1414213562 | (pi/4)sinc(1/2a) -0.1414213562 | fórmula -Inf | con a + 1e-4 -0.1414036771 %% 4. El espectro por tramos y la simetría vestigial, sobre la FFT de un pulso largo Nf = 32; gl = rcosdesign(alfa, 400, Nf, 'normal'); % 12 801 muestras cl = (numel(gl) + 1)/2; gl = gl/gl(cl); % pico 1, o sea G(0) = T = 1 NFFT = 2^18; x = zeros(1, NFFT); x(mod((1:numel(gl)) - cl, NFFT) + 1) = gl; % t = 0 en la primera muestra G = real(fft(x))/Nf; % G(f), con f en unidades de 1/T f = (0:NFFT-1)/NFFT*Nf; f(f >= Nf/2) = f(f >= Nf/2) - Nf; f1 = (1 - alfa)/2; f2 = (1 + alfa)/2; af = abs(f); Gt = (af <= f1) + (af > f1 & af <= f2) .* cos(pi/(2*alfa)*(af - f1)).^2; xs = linspace(0, 0.5, 1001); sv = interp1(f, G, 0.5 - xs) + interp1(f, G, 0.5 + xs); fprintf('max |G_fft - G_tramos| = %.1e, G(1/2T) = %.4f, max |G(1/2T-x) + G(1/2T+x) - 1| = %.1e\n', ... max(abs(G - Gt)), interp1(f, G, 0.5), max(abs(sv - 1))) % max |G_fft - G_tramos| = 1.5e-06, G(1/2T) = 0.5000, max |G(1/2T-x) + G(1/2T+x) - 1| = 2.1e-08 %% 5. La cadena RRC -> canal -> RRC, medida en los instantes de símbolo [m, D] = isi(g); fprintf('%-24s ISI %.1e, D = %.1e\n', 'RC ideal', m, D) canales = {1, 'plano'; fir1(66, 0.5), 'fir1(66, 0.5)'; fir1(66, 0.375), 'fir1(66, 0.375)'; ... fir1(66, 0.3), 'fir1(66, 0.3)'; fir1(66, 0.2), 'fir1(66, 0.2)'; ... fir1(67, 0.3), 'fir1(67, 0.3), 68 taps'}; for i = 1:size(canales, 1) [m, D] = isi(conv(conv(r, canales{i, 1}), r)); fprintf('%-24s ISI %6.1f dB, D = %.4f\n', canales{i, 2}, 20*log10(m), D) end % RC ideal ISI 0.0e+00, D = 0.0e+00 % plano ISI -72.7 dB, D = 0.0015 % fir1(66, 0.5) ISI -72.7 dB, D = 0.0024 % fir1(66, 0.375) ISI -70.3 dB, D = 0.0051 % fir1(66, 0.3) ISI -34.6 dB, D = 0.1153 % fir1(66, 0.2) ISI -11.8 dB, D = 1.1235 % fir1(67, 0.3), 68 taps ISI -16.6 dB, D = 0.3545 function [m, D] = isi(p) N = 4; [~, i0] = max(abs(p)); % el instante del símbolo: el pico k = [i0-N:-N:1, i0+N:N:numel(p)]; % los de los vecinos v = abs(p(k))/abs(p(i0)); m = max(v); D = sum(v); % el mayor, y el peor caso end
Lo que muerde:
fir1 es el orden. fir1(66, 0.3) da 67 coeficientes y un retardo entero de 33 muestras; fir1(67, 0.3) da 68 y un retardo de 33,5. La última línea de la salida es esa media muestra: −16,6 dB contra −34,6, con el mismo corte.isi toma la muestra más alta como instante del símbolo. Con los canales de fase lineal y cantidad impar de taps eso es el centro exacto. Con un pasatodo no: ahí hay que buscar el instante con interpolación, o la tabla de la sección 10 sale desordenada.-Inf o NaN. rcosdesign pone el límite; los scripts de la cátedra corren el rolloff 1e-4.conv(r, r) ya da pico 1. Con las funciones de la cátedra, el par da y hay que multiplicar por N.real(fft(x)) deja de ser .rcosdesign normaliza a energía 1: pico para el coseno realzado, par de raíces con pico 1 exacto. Sin cuarto argumento devuelve la raíz.fir1(66, 0.3), corte : −34,6 dB; corte : ojo de PAM-2 cerrado. Un pasatodo, con el módulo intacto, también la trae de vuelta.