Está en la página 1de 8

Wilbert Chávez Irazabal Comunicación Digital

PRACTICA No. 4

TEMA: “DIGITALIZACION DE LA INFORMACION”

1. OBJETIVOS

El objetivo de esta práctica es familiarizar al alumno con la generación y adquisición de


señales de comunicaciones atendiendo a aspectos tales como el muestreo, el aliasing y
los efectos de la cuantificación. Posteriormente se estudiará la caracterización de señales
de comunicaciones y el ruido mediante histogramas, densidad espectral de potencia y
autocorrelación. Finalmente se estudiarán los códigos de línea más comunes y su
densidad espectral de potencia así como el efecto del ruido en los mismos.
1. PARTE PRACTICA: Muestreo y reconstrucción de señales
a) Generación de señales.
Generar en MATLAB U OCTAVE, una función seno de frecuencia 2KHz y amplitud 1,
muestreado a distintas frecuencias de muestreo.
Dicha señal se observará tanto en el ordenador como en el osciloscopio, siendo
posible, así mismo, escucharla.
Si no se cuenta con tarjeta de sonido o con interfaz para el osciloscopio puede obviarlo
deshabilitando el comando enviar o el que realice esta función.
A continuación se le muestra un programa como ejemplo, que el alumno pudiera
mejorar o realizar otra programación que cumpla con el propósito de generación de
señales.

f=2000; % frecuencia del tono a generar


fso=1e6; % frecuencia de muestreo de referencia para los dibujos
No= fso*1e-3;
to=(0:No-1)/fso; % representaremos 1 ms de la señal
xo=sin(2*pi*f*to); % señal de referencia (muy sobremuestreada)
for fs=[44100 22050 11025 8000];
N=fs*1;
t=(0:N-1)/fs; % Vector con los instantes de muestreo: 1 s a fs Hz
x=sin(2*pi*f*t); % Señal muestreada
frec_muestreo(fs);
envia(x,5); % Reproducimos la señal 5 veces (5 s) con la tarjeta de sonido
plot(to*1e3,xo,'k',t*1e3,x,'b-o');axis([0,1,–1,1]);
legend('Señal original','Señal muestreada');xlabel(‘milisegundos’)
pause;cierra(0);% Se finaliza la generación cuando se pulse una tecla
end
Notar que es necesario sobremuestrear (por un factor superior a 10) para que el “dibujo” se
parezca a la señal de tiempo continuo. Sin embargo, mientras se cumpla el teorema de
muestreo, la señal observada en el osciloscopio o escuchada con los auriculares es,
efectivamente, un seno de 2 KHz.

Página 1|8
Wilbert Chávez Irazabal Comunicación Digital

b) Muestreo incorrecto.
Generar en MATLAB U OCTAVE, una función seno de frecuencia 9 KHz y amplitud 1
muestreado a distintas frecuencias de muestreo. Dicha señal se observará tanto en el
ordenador como en el osciloscopio.
A continuación se le muestra un programa como ejemplo, que el alumno pudiera
mejorar o realizar otra programación que cumpla con el propósito de generación de
muestreo incorrecto.
f=9000; % frecuencia de la señal senoidal
fso=1e6; % frecuencia de muestreo de referencia para los dibujos
No= fso*1e-3;
to=(0:No-1)/fso; % representaremos 1 ms de la señal
xo=sin(2*pi*f*to); % señal de referencia (muy sobremuestreada)
for fs=[44100 22050 11025 8000];
N=fs*1;
t=(0:N-1)/fs; % Vector con los instantes de muestreo: 1 s a fs Hz
x=sin(2*pi*f*t); % Señal muestreada
fr=rem(f,fs);fr=fr-fs.*(fr>fs/2); % frecuencia de señal reconstruida (con posible
aliasing)
xr=sin(2*pi*fr*to); % Señal reconstruida
plot(to,xo,'k',t,x,'r-o');axis([0,1e-3,–1,1]);
legend('Señal original','Señal muestreada')
title(sprintf('Frecuencia señal: %iHz Frecuencia de nuestreo: %iHz',f,fs))
xlabel('Pulse una tecla para escuchar y ver la señal reconstruida')
disp('Pulse una tecla para escuchar y ver la señal reconstruida')
pause
plot(to,xo,'k',t,x,'r-o',to,xr,'b'); axis([0,1e-3,–1,1]);
legend('original','muestreada','reconstruida')
title(sprintf('Frecuencia señal: %iHz Frecuencia de nuestreo: %iHz',f,fs))
frec_muestreo(fs);
envia(x,5); % Reproducimos la señal 5 veces (5 s) con la tarjeta de sonido
pause;cierra(0)
end

Notar como, para ciertas frecuencias de muestreo (aquellas para las que no se cumple el
teorema de muestreo), la señal reconstruida no se corresponde con la señal original de 9 KHz.
¿Cuáles son dichas frecuencias?. ¿Cuál sería la frecuencia mínima de muestreo para la señal
de 9 KHz?

Página 2|8
Wilbert Chávez Irazabal Comunicación Digital

c) Efecto del aliasing.


En este ejercicio, un alumno generará un seno de frecuencia 9 KHz y amplitud 1 con
una frecuencia de muestreo de 44100 muestras/s tal y como se hizo en anteriores
ejercicios. El compañero deberá adquirir dicha señal utilizando diversas frecuencias de
muestreo. A continuación se le muestra un programa como ejemplo, que el alumno
pudiera mejorar o realizar otra programación que cumpla con el propósito del efecto
del Aliasing.
ALUMNO1 (generación)
f=9000; % frecuencia de la señal senoidal
fs=44100; % frecuencia de muestreo
N= fs*1;
t=(0:N-1)/fs; % generamos 1 s de la señal
x=sin(2*pi*f*t); % señal original
frec_muestreo(fs);envia(x,60); % Reproducimos la señal 60 veces (1 minuto)
pause;cierra(0) % Se detiene tras pulsar una tecla
ALUMNO2 (adquisición)
fs1=44100;N1=1*fs1; %Numero de muestras en 1 sg a fs1 muestras/s
frec_muestreo(fs1);x1=recibe(1,N1); % Adquirimos N1 muestras (20 ms) a fs1
muestras/s
cierra(1);
t1=(0:N1-1)/fs1;
% Repita la adquisición de x2, x3 y x4 a 22050, 11025 y 8000 muestras/s
respectivamente
plot(t1,x1,'r',t2,x2,'b',t3,x3,'g',t4,x4,'k'); % dibuje todas las señales
Los alumnos deberán observar en el canal 1 del osciloscopio la señal original de 9 KHz
generada a 44100 muestras/sg (utilice frec_muestreo(fs0); envia(xo,nveces) con nveces
lo suficientemente alto como para que le dé tiempo a calcular visualmente su frecuencia). Así
mismo, deberán observar en el canal 2 del osciloscopio las señales adquiridas (p.e. el alumno2
ejecutará frec_muestreo(fs2);envia(x2,nveces)), calcule su frecuencia y compruebe cuando
se produce aliasing (no olvide el comando cierra).
Nota: Es opcional este último proceso pues si no se cuenta con lo requerido no se ejecuta o
inhabilita el comando solo para ser mostrado en la pantalla de la computadora.
2. PARTE PRACTICA: Generación de señales de comunicaciones
En la actualidad, la inmensa mayoría de los sistemas de comunicaciones digitales son
implementados totalmente en el dominio discreto. En la figura 1 se muestra un esquema típico
de un transmisor digital banda base.

Figura 1. Sistema de comunicaciones en banda de base.

Página 3|8
Wilbert Chávez Irazabal Comunicación Digital

Es importante que el alumno comprenda la relación entre velocidad binaria (Rb bits/s),
velocidad de símbolo (Rs baudios) y frecuencia de muestreo de la señal de línea (fs muestras/s)
para señales de comunicaciones del tipo.
X(t)=  n Anh(t-nT)
Generaremos una señal conformada triangularmente de 1102.5 bits/sg con distintas
frecuencias de muestreo, es decir, distinto número de muestras por símbolo.
b=[1 0 1 0 1 1 0 0 1 0]; %bits
A=2*b-1; % simbolos
subplot(211);stem(b);subplot(212);stem(A) %dibujamos las secuencias de bits y
símbolos
fs1=44100;
frec_muestreo(fs1);
N1=40;
x1=filtro_tx(A,N1); % 40 muestras/símb, fs=44100Hz _ Rs=44100/40=1102.5 baudios
t1=(0:length(x1)-1)/fs1; % vector de tiempos para el dibujo
plot(t1,x1); % dibujamos las muestras de la señal de línea
envia([x1 ; 1 zeros(1,length(x1)-1)],500); % observe la señal en el osciloscopio
% dispare el sincronismo con el canal 2
cierra(1);

Nota: Repita el filtrado y visualice (tanto en la pantalla del ordenador como en el osciloscopio)
la misma señal pero con frecuencias de muestreo fs2=22050 Hz (N2=20) y fs3=11025
(N3=10). Compruebe que, en todos los casos, la señal de línea que se observa en el
osciloscopio es la misma (fíjese especialmente en que todas poseen la misma velocidad de
símbolo).
3. CUANTIFICACIÓN DE SEÑALES
Los sistemas digitales, así como los conversores A/D y D/A, poseen una resolución finita,
marcada por el número de bits. Este hecho limita la precisión con la que las señales pueden
ser adquiridas, generadas y procesadas.
En este experimento se trata de cuantificar, con distintas precisiones, una señal de voz
contenida en el fichero voz.mat. o su equivalente, de esta forma, el alumno podrá observar
cómo afecta el número de bits de cuantificación al nivel del error de cuantificación, a la relación
señal a ruido de cuantificación, a la función densidad de probabilidad del error y a su densidad
espectral de potencia.
A continuación se le muestra un programa como ejemplo, que el alumno pudiera mejorar o
realizar otra programación que cumpla con el propósito de cuantificación de señales.

a) Cargamos la señal de voz y observamos su histograma, lo que nos dará idea de la función
densidad de probabilidad de la señal de voz.
frec_muestreo(11025); % frecuencia de muestreo 11025 Hz
load voz.mat % en la variable x tenemos la señal de voz
subplot(211);hist(x,50) % la función hist(x) dibuja el histograma del vector x

Página 4|8
Wilbert Chávez Irazabal Comunicación Digital

b) Dibuje la densidad espectral de potencia (DEP) de la señal de voz, de manera que pueda
observar que frecuencias poseen más potencia. Utilize la función espect(x,N,f)
sx=espect (señal, número de puntos, frecuencia máxima)
El número de puntos afecta a la estima del espectro, cuanto mayor sea, más muestras se
obtienen, pero también más variabilidad. La frecuencia máxima detemina el límite superior
(el inferior es cero) del eje de abcisas al dibujar el espectro. Si se utiliza una variable de
salida sx, en ella se obtienen las muestras del espectro, si no se utiliza ninguna, la función
lo dibuja. Si no se incluyen el número de puntos o la frecuencia máxima toma valores por
defecto.
subplot(212);espect(x,200) % dibuja la dep

c) Cuantificación de la señal de voz: se utilizarán 10 bits


xq=cuantifica(x,10); % cuantificamos la señal con 10 bits
error=x-xq;
hist(xq,20);pause % histograma del error de cuantificación
subplot(211);espect(xq,100) % espectro de la señal cuantificada
subplot(212);espect(error,100) % espectro del error de cuantificación
SNRq=10*log10(mean(x.^2)/mean(error.^2)) %Relación señal-ruido de
cuantificación
envia([ x ; xq ]);
cierra (1)
El alumno deberá repetir el apartado c) para distinto número de bits (probar con 8, 6 y 4)
observando cómo afecta dicho número al espectro de la señal cuantificada y del error; al
histograma del error; y a la calidad de la señal cuantificada, tanto cuantitativa (SNRq)
como cualitativamente (al escucharla u observarla en el osciloscopio).
4. CODIGOS DE LÍNEA
Como se recordará, existen diferentes tipos de codificación en los sistemas digitales. En los
sistemas banda base es común utilizar códigos de línea con objeto de conformar el espectro
de la señal de comunicaciones (por ejemplo para eliminar la componente continua), facilitar la
recuperación de sincronismo, etc. En este apartado vamos a simular digitalmente
(representándolas mediante sus muestras) señales conformadas mediante diferentes códigos
de línea. Así mismo podremos observar en el osciloscopio las señales reales que viajan por
el canal sin más que enviarlas a la tarjeta de sonido.

a) Generaremos formas de onda digitales usando el comando wave_gen:


wave_gen( secuencia binaria, 'nombre del código de línea', Régimen binario)
b= [1 0 1 0 1 1]; % generamos la secuencia binaria
x=wave_gen(b,'unipolar_nrz', 800); % usamos NRZ unipolar y 800 bits por segundo
waveplot(x) % dibujamos la señal resultante
envia(x/2,2000); % obseve la señal en el osciloscopio
pause;
cierra(0);
Nota: En este caso se envía a la tarjeta de sonido la señal x/2 para evitar que se sature el
conversor D/A, que posee un rango de _1V. Esto deberá ser tenido en cuenta por el alumno
al observar los niveles de la señal en el osciloscopio. Recuerde así mismo que la tarjeta de
sonido no es capaz de proporcionar niveles de continua.

Página 5|8
Wilbert Chávez Irazabal Comunicación Digital

b) Repita el apartado a) para los siguientes códigos de línea:


• polar NRZ ('polar_nrz');
• unipolar RZ ('unipolar_rz');
• bipolar RZ ('bipolar_rz');
• manchester ('manchester');
Observe como implementa MATLAB el vector x. ¿Cuántas muestras se utilizan por
símbolo?. ¿Por qué las señales observadas en el osciloscopio no son perfectamente
“cuadradas”?. Con el hardware de que dispone, ¿cómo podría paliar este efecto?.
c) Genere una secuencia binaria de longitud 1000 y dibuje la DEP para cada código de línea
del apartado b), por ejemplo,
b= binary(1000);
espect(wave_gen(b,'nombre del código de línea', 800));

d) Para ilustrar la dependencia de la densidad espectral de potencia con el régimen binario


ejecute el programa codlin.m. Observe la DEP del código de línea manchester con
regímenes binarios de 250 bps, 400 bps, 500 bps y 1 Kbps (utilice una frecuencia de
muestreo de 8000 Hz). Observe las variaciones de los ceros espectrales y relaciónelos con
el régimen binario. Calcule, así mismo, el número de muestras por símbolo utilizado en
cada caso. Observe las señales en el osciloscopio.

5. RUIDO

Por último, resulta de interés generar ruido para simular su efecto en los sistemas de
comunicación. En la realidad resulta imposible muestrear (adecuadamente) ruido blanco
Gaussiano (¿por qué?), pero si generamos repetidas realizaciones independientes de una
variable aleatorio Gaussiana obtenemos un ruido en tiempo discreto que nos permite simular
el efecto del ruido en comunicaciones. En el apartado siguiente se pretende ilustrar la
simulación en tiempo discreto de señales de comunicaciones en ruido. Así mismo, el alumno
podrá observar el efecto del ruido en la señal de línea por medio del osciloscopio.

a) Secuencias de ruido. Genere secuencias de 1000 puntos de ruido Gaussiano


r=randn(1,1000); %La función randn() genera realizaciones de una variable aleatoria
subplot(211); % Gaussiana de media cero y varianza 1.
waveplot(r);
Dibuje el histograma de la señal
subplot(212);hist(r,20); % La función hist(x) dibuje el histograma del vector x
axis([-3 3 0 200]), pause;
Dibuje ahora la autocorrelación y la DEP de la señal
subplot(211);
acf(r); % la función acf(x) estima la autocorrelación de la secuencia x y la dibuja
subplot(212); espect(r,256);
Repita el proceso varias veces, comprobando que señales de ruido totalmente distintas
dan lugar a histogramas, autocorrelaciones y densidades espectrales de potencia
similares.

Página 6|8
Wilbert Chávez Irazabal Comunicación Digital

b) Efecto del ruido en la forma de onda transmitida: Genere 10 símbolos de una señal
NRZ polar con un régimen binario de 800 bps. Genere ruido Gaussiano discreto.
Súmeselo a la señal x, dibuje ambas señales y obsérvelas en el osciloscopio.

b=binary(10); x=wave_gen (b,'polar_nrz',800);


ruido=0.1*randn(size(x));
y=x+ruido;
subplot(211), waveplot(x);title('Señal')
subplot(212), waveplot(y);title('Señal + Ruido') % Observe los valores de pico de la
señal
envia([x , y]/escala,2000); % escale adecuadamente las señales para evitar saturar el
D/A
pause;cierra(0);

¿Cómo estimaría la potencia de ruido a partir de las muestras del vector "ruido"?¿y la potencia
de la señal y? Genere señales cada vez más largas y compruebe cómo las estimas mejoran.

c) Repita el apartado b) para valores de la potencia de ruido de 0.5,1 y 2.5 (tenga en cuenta
en cada caso la posible saturación de la tarjeta de sonido).

d) También se puede observar el efecto de incrementar la potencia de ruido viendo la densidad


espectral de potencia de la señal de salida.

b=binary(1000); x=wave_gen (b, 'polar_nrz',800);


ruido=0.1*randn(size(x));
espect(x); hold on
espect(x+ruido); grid; hold off;

Superponga sobre la densidad espectral de potencia de la señal ruidosa la de las otras señales
del apartado c) y compruebe el efecto en el espectro de incrementar el ruido.

Página 7|8
Wilbert Chávez Irazabal Comunicación Digital

6. PROBLEMA HA RESOLVER

En este problema los alumnos compararán las prestaciones de un cuantificador uniforme y de


un cuantificador no uniforme (ley A). Partiendo de la señal de voz.mat o su equivalente,
deberán cuantificarla con 8 bits y obtener la relación señal a ruido de cuantificación de ambos
métodos para distintos niveles de potencia de la señal original.

Deberá implementar una función que lleve a cabo la compresión de la señal original siguiendo
la expresión:

Con A=87.56. Así mismo, se realizará una función de MATLAB U OCTAVE que implemente
el expansor, es decir, la función inversa de C (x).
Utilizando MATLAB U OCTAVE, se deberá presentar una gráfica que muestre la potencia de
la señal de entrada en el eje horizontal (para lo cual se escalará la señal original desde x hasta
x/100) y la SNR de ambos métodos en el eje vertical. Se deberán repetir las simulaciones para
cuantificadores de 5 bits.

7. BIBLIOGRAFÍA
[1] A.V. Oppenheim, A.S. Willsky, S. Hamid, “Signals and systems”, 2da ed., Ed.:
Prentice Hall, 1997.
[2] MATLAB - GNU Octave Tutorial, Disponible:
https://www.tutorialspoint.com/matlab/matlab_gnu_octave.htm

Página 8|8