Diezmado

El concepto de diezmado, si bien en su etimología se refiere a una reducción en un factor de diez, se aplica de forma genérica al muestreo de una señal discreta por un factor entero, es decir, a preservar una de cada M muestras de la señal discreta. La ecuación que lo describe es muy sencilla :


\begin{displaymath}
x_d [n] = x [nM]
\end{displaymath} (46)

que indica que las muestras presentes en la señal diezmada se obtienen de las muestras de la señal original en los instantes nM.




$$ Ejercicio 30  

Escribir el c'odigo de una funci'on que realice la compresi'on de una se nal de entrada por un factor $M$, con la siguiente cabecera:

function xc = compresor(x,M)

% x: vector de entrada
% M: factor de  compresion
% xc: vector de salida
Dicha funci'on debe asignar una de cada $M$ componentes del vector de entrada al vector de salida. Recordar, para ello, cómo se puede acceder a las componentes equiespaciadas de un vector, sin necesidad de utilizar ning'un bucle for. Notar asimismo que la longitud de la se nal de salida ser'a menor que la longitud de la se nal de entrada. Suponer que la primera muestra del vector de entrada se corresponde con el instante $n=0$.

A fin de comprobar la funci'on, generar una se nal $x[n]$ de la siguiente forma:

>>  n=(0:40);
>> x=sinc(n/2);
>> stem(n,x);

La se nal $x$ se corresponde con un segmento finito de $x[n]=sinc(\frac{n}{2})$. Se puede visualizar su espectro de la siguiente forma:

>> X = fft(x,256);
>> w= 2*pi*(0:255)/256;
>> plot(w,abs(X));
Se puede apreciar que por causa del n'umero finito de muestras de la sinc, el pulso rectangular aparece distorsionado, siendo patente el efecto de Gibbs. Comprimir ahora la se nal por un factor $M=2$:

>> xc = compresor(x,2);
La se nal $xc[n]$ debe tener 'unicamente un valor distinto de cero, y situado en la primera muestra. Observar su espectro.




Hay que indicar que en varios textos (incluido el utilizado en la asignatura), la operación que acabamos de explicar se denomina compresión, dej'andose el concepto de diezmado para el caso en el que además se incluye un filtro paso bajo. Con esta salvedad en mente, y abusando un poco de la notación, aquí denotaremos a veces la operación anterior como diezmado, aunque no exista tal filtro paso bajo.

A diferencia del caso continuo, el diezmado implica una aparente pérdida de información. Es decir, cuando una señal continua sufre una compresión la señal resultante $y(t)=x(Mt)$ contiene todos los valores presentes en la original, aunque comprimidos en el tiempo. Sin embargo, al realizar esa compresión con una señal discreta, de cada M muestras desaparecen M-1. Dado que el proceso es análogo al muestreo de una señal continua, cabe preguntarse si se pueden aplicar las mismas ideas acerca de la recuperación de la información: límite de Nyquist, aliasing, etc. Ese es el caso, y a continuación vamos a ver cómo el estudio en frecuencia nos ilustra al respecto.




$$ Ejercicio 31  

Generar la señal $y[n]=cos(2\pi n/30)-0.5cos(2\pi n/10)$, para $0 \le n < 100 $, consistente en la superposición de dos señales sinusoidales, con las frecuencias relacionadas por un factor de 3, de la siguiente forma:

>> n=(0:99);
>> y=cos(2*pi*n/30)-0.5*cos(2*pi*n/10);
>> stem(n,y)
Se puede apreciar en la gr'afica cómo hay una oscilaci'on de alta frecuencia superpuesta sobre otra de mayor amplitud y menor frecuencia.

Ahora comprimiremos la se nal por un factor $M=10$, utilizando la funci'on del primer ejercicio:

>> yc = compresor(y,10);
>> nc=(0:length(yc)-1);
>> stem(nc,yc);
Claramente, el factor de compresi'on ha sido tan alto que no se puede apreciar una frecuencia alta superpuesta a una m'as baja. Se ha producido un aliasing en la mayor de las frecuencias, que ahora se confunde con la frecuencia $\omega=0$.

Repetir el proceso anterior, pero con un factor de diezmado $M=2$. Comprobar que ahora s'i son discernibles dos frecuencias en la nueva se nal, y que la envolvente original se podr'ia reconstruir.




Como queda patente en el ejercicio anterior, parece existir un límite a la tasa de diezmado que se puede permitir sin perder información sobre las frecuencias presentes, y por tanto, sobre la señal en sí. Como ya es conocido, el espectro de la señal diezmada tiene la forma


\begin{displaymath}
X_d (e^{j\omega}) = \frac{1}{M} \sum_{i=0}^{M-1} X(e^{j(\omega /M
-2\pi i/M)})
\end{displaymath} (47)

Cualquier frecuencia que esté por encima de $\pi / M$ va a producir un solapamiento de espectros, dado que al igual que en el muestreo de una señal continua, la señal muestreada consiste en la repetición periódica del espectro original (con una posterior expansión debido a la compresión en el tiempo). Así, el teorema del muestreo para señales continuas se puede extender al caso discreto:

En el caso de que no se verifique el teorema del muestreo se producirá aliasing, debido al solapamiento de las réplicas.

Veamos esa confusión de frecuencias en un caso práctico.

$$ Ejercicio 32  

Generar una secuencia de la forma $x[n] = cos(\pi n/11)$, para $0 \le
n < 512$:

>> x=cos(pi*(0:511)/11);
Si ahora observamos su espectro:

>> X = fft(x,512);
>> plot(2*pi*(0:511)/512,abs(X/max(abs(X))));
vemos que est'a compuesto por dos picos en las frecuencias $\omega_0=\pi/11$ y $\omega_0=-\pi/11$. Se ha utilizado un factor de normalizaci'on en la llamada a la funci'on plot(), para que el m'aximo valor representado sea 1.

Ahora comprimiremos esta secuencia con dos factores de compresi'on distintos, M=4 y M=10 , utilizando para ello la funci'on realizada en el primer ejercicio. Superponer sobre la misma gr'afica los distintos espectros que se van obteniendo:

>> hold;
>> x4 = compresor(x,4);
>> X4 = fft(x4,512);
>> plot(2*pi*(0:511)/512,abs(X4/max(abs(X4))));
>> x10 = ...
>> ...

Notar que las 'ultimas componentes espectrales est'an cerca de $\pi$. Razonar a partir de qu'e valor de $M$ comenzar'a a producirse ``aliasing''.

Ahora repetiremos las operaciones anteriores con los factores de muestreo M=12 y M=18, manteniendo los espectros anteriores en pantalla a fin de comparar la posici'on de los picos de los espectros:

Antes de visualizar los espectros, estimar las frecuencias de las se nales diezmadas $x12$ y $x18$, corroborando los resultados en las gr'aficas obtenidas.

Razonar para qu'e factor de muestreo $M$ la frecuencia de la se nal diezmada ser'a 0, comprobando el resultado con Matlab.

Nota: Como se puede observar los espectros no son realmente impulsivos debido a la longitud finita de los cosenos.

En aplicaciones prácticas las ideas anteriores son utilizadas para reducir la cantidad de muestras necesarias para ser procesadas. Así, como hemos visto anteriormente, la condición para evitar el aliasing es $M < \frac{\pi}{\omega_M}$ (M puede ser racional, como veremos posteriormente). Eso indica que en muchos casos tenemos exceso de información en las muestras presentes, dado que parte del espectro está libre.

Al igual que ocurre en el caso continuo, en muchas ocasiones es preciso introducir un filtro paso bajo previo para evitar el aliasing introducido por el muestreo, tal y como se muestra en la figura 5.9. Idealmente ese filtro ha de ser un filtro paso bajo con frecuencia de corte $\pi / M$, que es la máxima frecuencia que puede estar presente sin incurrir en aliasing. Ese filtro suaviza los cambios bruscos que no pueden ser seguidos con la nueva tasa de muestreo, de modo que se evite el que esas altas frecuencias se confundan posteriormente con otras frecuencias más bajas. En el siguiente ejercicio se ilustrará el uso de la función de Matlab decimate(), que incluye un filtro paso bajo.




$$ Ejercicio 33  

En este ejercicio se comparará el resultado de usar la función decimate de Matlab, la cual incluye un filtro paso bajo previo para evitar ``aliasing'', con el resultado de la simple operación de compresión, que ha sido programada en el primer ejercicio.
Generar, para ello, una secuencia de la forma $x[n] = cos(\pi n/11)$, con $0 \le
n < 512$. Ejecutar en Matlab:

>> xc4=compresor(x,4);
>> xd4=decimate(x,4);
Tener en cuenta que la funci'on decimate() es un poco lenta, debido al filtro paso bajo.
Visualizar ahora los espectros superpuestos de ambas se nales, del mismo modo que se hizo en el ejercicio anterior, comprobando que son casi id'enticos (las diferencias se deben a que el filtro paso bajo no es ideal).
Repetir la secuencia de operaciones para un factor de diezmado $M=18$, visualizando esta vez las se nales en el dominio del tiempo:
>> hold off;
>> figure(0)
>> stem(xc18);
>> figure(1)
>> stem(xd18);
Razonar las diferencias entre ambas se nales.
Nota: no borrar las variables x y xd4, a fin de poder utilizarlas en ejercicios posteriores.

La función de Matlab decimate() usa por defecto un filtro paso bajo de Chebyschev de orden 8, que si bien es bastante bueno, no es el ideal. La respuesta en tiempo del filtro ideal correspondería a una sinc:


\begin{displaymath}
h[n]=\frac{1}{M}sinc(\frac{n}{M}) \longrightarrow
H(e^{j\...
...t < \frac{\pi}{M} \\
0 & \mbox{resto}
\end{array}
\right.
\end{displaymath} (48)

Con esa respuesta impulsional, la ecuación que relaciona la salida del diezmador $x_d[n]$ con la entrada $x[n]$ quedaría;


\begin{displaymath}
x_d[n]=\frac{1}{M} \sum _{k} x[k] sinc(\frac{nM-k}{M})
\end{displaymath} (49)




$$ Cuestión 17  

Demostrar que la operación de diezmado no es invariante en el tiempo. Eso equivale a demostrar que la ecuación 5.11 no se puede poner como una convolución en tiempo.

En aquellos casos en los que no exista aliasing en la operación de diezmado se puede reconstruir la secuencia original. Para ello hay que llevar a cabo una interpolación, analizada en la siguiente sección.

Josť Luis Alba Castro [GTS] 2004-09-15