14
Laboratorio de Comunicaciones Digitales ETSII Telecomunicación Ingeniería de Telecomunicación Universidad de Cantabria Curso 2010/2011 PRACTICA 1 METODOLOGÍA El alumno dispone de tres sesiones de laboratorio para realizar esta práctica. La realización es individual, aunque la evaluación se hará por parejas en función de la entrega resuelta del cuestionario (uno por pareja) y de un programa ejecutable que resuelva el epígrafe "PROBLEMA", que vaya mostrando de forma clara y ordenada las respuestas exigidas y que se denominará X:\Practica1\problema.m (los alumnos de cada pareja dejarán el mismo programa en ambas cuentas). Se recomienda la utilización de los comandos disp('texto'), disp('var'), pause, title, xlabel, ylabel, legend, clg y clc en los ficheros .m para documentar los resultados presentados en pantalla. 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. Para la realización de esta práctica es conveniente que el alumno lleve al laboratorio unos auriculares que le permitan escuchar las distintas señales generadas. 1. MUESTREO Y RECONSTRUCCIÓN DE SEÑALES a) Generación de señales. Generar en MATLAB un seno de frecuencia 2KHz y amplitud 0.5 muestreado a distintas frecuencias de muestreo. Dicha señal se observará tanto en el ordenador como en el osciloscopio, siendo posible, así mismo, escucharla. 1

Practica1m

Embed Size (px)

DESCRIPTION

ejercicio

Citation preview

Page 1: Practica1m

Laboratorio de Comunicaciones Digitales

ETSII TelecomunicaciónIngeniería de TelecomunicaciónUniversidad de CantabriaCurso 2010/2011

PRACTICA 1METODOLOGÍA

El alumno dispone de tres sesiones de laboratorio para realizar esta práctica. La realización es individual, aunque la evaluación se hará por parejas en función de la entrega resuelta del cuestionario (uno por pareja) y de un programa ejecutable que resuelva el epígrafe "PROBLEMA", que vaya mostrando de forma clara y ordenada las respuestas exigidas y que se denominará X:\Practica1\problema.m (los alumnos de cada pareja dejarán el mismo programa en ambas cuentas). Se recomienda la utilización de los comandos disp('texto'), disp('var'), pause, title, xlabel, ylabel, legend, clg y clc en los ficheros .m para documentar los resultados presentados en pantalla.

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. Para la realización de esta práctica es conveniente que el alumno lleve al laboratorio unos auriculares que le permitan escuchar las distintas señales generadas.

1. MUESTREO Y RECONSTRUCCIÓN DE SEÑALES

a) Generación de señales. Generar en MATLAB un seno de frecuencia 2KHz y amplitud 0.5 muestreado a distintas frecuencias de muestreo. Dicha señal se observará tanto en el ordenador como en el osciloscopio, siendo posible, así mismo, escucharla.

f=2000; % frecuencia del tono a generarfso=1e6; % frecuencia de muestreo de referencia para los dibujosNo= fso*1e-3;to=(0:No-1)/fso; % representaremos 1 ms de la señalxo=0.5*sin(2*pi*f*to); % señal de referencia (muy sobremuestreada)for fs=[44100 22050 11025];

N=fs*1; % nº de muestras, p.e. 44100 muestras/s * 1 s = 44100 muestrast=(0:N-1)/fs; % Vector con los instantes de muestreo: 1 s a fs Hzx=0.5*sin(2*pi*f*t); % Señal muestreadafrec_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” de MATLAB se parezca a la señal de tiempo continuo. Sin embargo, mientras se cumpla el

1

Page 2: Practica1m

teorema de muestreo, la señal observada en el osciloscopio o escuchada con los auriculares es, efectivamente, un seno de 2 KHz.

b) Muestreo incorrecto. Generar en MATLAB un seno de frecuencia 9 KHz y amplitud 0.5 muestreado a distintas frecuencias de muestreo. Dicha señal se observará tanto en el ordenador como en el osciloscopio y se escuchará con los auriculares.

f=9000; % frecuencia de la señal senoidalfso=1e6; % frecuencia de muestreo de referencia para los dibujosNo= fso*2e-3;to=(0:No-1)/fso; % representaremos 2 ms de la señalxo=0.5*sin(2*pi*f*to); % señal de referencia (muy sobremuestreada)

for fs=[44100 22050 11025];N=fs*1; % nº de muestras en un segundo a fs muestras/st=(0:N-1)/fs; % Vector con los instantes de muestreo: 1s a fs Hzx=0.5*sin(2*pi*f*t); % Señal muestreadafr=rem(f,fs);fr=fr-fs.*(fr>fs/2); % frecuencia de señal reconstruida (con posible

aliasing)xr=0.5*sin(2*pi*fr*to); % Señal reconstruidaplot(1e3*to,xo,'k',1e3*t,x,'r-o');legend('Señal original','Señal muestreada');axis([0 1 -1 1])title(sprintf('frec. señal:%iHz frec. muestreo:%iHz periodo muestreo: %fms',f,fs,1e3/fs))xlabel('t (ms)')uiwait(msgbox('Observe en la grafica la señal original y la señal muestreada. Luego

pulse "OK" para escuchar y ver la señal reconstruida'))plot(1e3*to,xo,'k',1e3*t,x,'r-o',1e3*to,xr,'b');legend('original','muestreada','reconstruida');axis([0 1 -1 1])title(sprintf('frec. señal:%iHz frec. muestreo:%iHz periodo muestreo: %fms',f,fs,1e3/fs))xlabel('t (ms)')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?.

c) Efecto del aliasing. En este ejercicio, un alumno generará un seno de frecuencia 9 KHz y amplitud 0.5 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. Conectar la salida TX del Alumno1 con la entrada RX del Alumno2 y ejecutar el siguiente código:

ALUMNO1 (el que genera la señal)f=9000; % frecuencia de la señal senoidalfs=44100; % frecuencia de muestreoN= fs*1;t=(0:N-1)/fs; % generaremos 1 s de la señalx=0.5*sin(2*pi*f*t); % señal originalfrec_muestreo(fs);envia(x,60); % Reproducimos la señal 60 veces (1 minuto)

% Ahora el Alumno2 deberá ejecutar su códigopause;cierra(0) % pulsar una tecla cuando haya finalizado el Alumno2

2

Page 3: Practica1m

ALUMNO2 (el que adquiere la señal)fs1=44100;N1=1*fs1;t1=(0:N1-1)/fs1; % Numero de muestras en 1 sg a fs1 muestras/sfrec_muestreo(fs1);x1=recibe(1,N1); % Adquirimos N1 muestras (1 seg.) a fs1 muestras/s

% Se adquieren x2 y x3 a 22050 y 11025 muestras/s respectivamentefs2=22050;N2=1*fs2;t2=(0:N2-1)/fs2;frec_muestreo(fs2);x2=recibe(1,N2);fs3=11025;N3=1*fs3;t3=(0:N3-1)/fs3;frec_muestreo(fs3);x3=recibe(1,N3);

Mientras el Alumno1 ejecuta su programa (genera la señal), el Alumno2 ejecuta el suyo de forma que adquiere las cuatro señales x1, x2 y x3 (con tres frecuencias de muestreo distintas). El Alumno2 puede observar las señales adquiridas haciendo, por ejemplo:

plot(t1,x1,'r',t2,x2,'b',t3,x3,'g'); % dibuja todas las señalesaxis([0 1e-3 -1 1]) % observamos el primer milisegundo (use también el zoom)

Razone que es lo que ha ocurrido. Ahora, el Alumno1 debe observar la señal original en el canal 1 del osciloscopio (ejecutando envia(x,100) y conectando su señal al canal 1 del osciloscopio). Simultáneamente, el Alumno2 debe observar en el canal 2 una cualquiera de las señales adquiridas (p.e. ejecutando frec_muestreo(fs3);envia(x3,100)), calcule su frecuencia, compárela con la del canal 1 y compruebe en que casos el muestreo no ha sido correcto.

2. 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. De esta forma, el alumno podrá observar como 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) 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 Hzload voz.mat % en la variable x tenemos la señal de vozclose all;subplot(221);hist(x,50) % la función hist(x) dibuja el histograma del vector xtitle('Histograma señal original');xlabel('Voltios')

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:

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 determina 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(222);espect(x,200); title('DEP de la señal original'); % dibuja la dep

3

Page 4: Practica1m

c) Cuantificación de la señal de voz utilizando 10 bits por muestra

xq=cuantifica(x,10); % cuantificamos la señal con 10 bitserror=x-xq;subplot(224);espect(xq,100);axis([0 6 -110 -40]) % espectro de la señal cuantificadahold on;espect(error,100);hold off % espectro del error de cuantificacióngrid;legend('Señal Cuantificada','Error Cuantificación')subplot(223);hist(error,20) % histograma del error de cuantificacióntitle('Histograma error');xlabel('Voltios');pause;hist(xq,50); title('Histograma señal cuantificada');xlabel('Voltios');SNRq=10*log10(mean(x.^2)/mean(error.^2)) % Relación señal-ruido de cuantificaciónenvia([ x , xq ]/2);pause;cierra(0) % izda = original drcha = cuantificada

d) 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 observarla en el osciloscopio y escucharla).

3. GENERACIÓN DE SEÑALES DE COMUNICACIONES

En la actualidad, la inmensa mayoría de los sistemas de comunicaciones digitales son implementados totalmente (salvo las etapas de radiofrecuencia) en el dominio discreto mediante microprocesadores, DSP's u otros circuitos integrados digitales. 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.

Es importante que el alumno comprenda la relación entre velocidad binaria (Rb bits/s), velocidad de símbolo (Rs baudios o símbolos por segundo) y frecuencia de muestreo de la señal de línea (fs muestras/s) para señales de comunicaciones del tipo

.

4

TRANSMISOR

Codificador FiltroTransmisor

CONVERSORD/A

Sistema Digital Discreto

muestrasfs

muestras/s

x(t)x[n]bn An

señalde línea

símbolosRs símbolos/s

bitsRb bits/s

Page 5: Practica1m

a) 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]; % bitsA=2*b-1; % símbolossubplot(212);stem(b);title('bits');subplot(211);stem(A);title('símbolos');pause %dibujamos las secuencias de bits y símbolosfs1=44100;frec_muestreo(fs1);N1=40; % 40 muestras/símb, fs=44100Hz Rs=44100/40=1102.5 baudiosx1=filtro_tx(A,N1);t1=(0:length(x1)-1)/fs1; % vector de tiempos para el dibujoplot(t1,x1,'-o');title('señal de línea') % dibujamos las muestras de la señal de líneaenvia([x1 ; 1 zeros(1,length(x1)-1)]/2,500); % observe la señal en el osciloscopiopause;cierra(0); % realice el Trigger con el canal 2

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) a pesar de haber sido generadas con distintas frecuencias de muestreo.

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.

ATENCIONPara que el entorno de simulación funcione adecuadamente es necesario inicializar

una serie de variables globales ejecutando la función iniciar. Al ejecutar iniciar el programa le solicitará el número de experimento:

>>Introduzca el número de experimento

debe introducir un 1. El programa responderá:

>>=================================================>> En esta sesión de MATLAB se utilizan 10 muestras por símbolo.>> Asumiendo un régimen binario de 800 bits/seg, la frecuencia>> de muestreo es 8 [kHz].>> La componente frecuencial más alta que pueden manejar las >> rutinas MATLAB es menor o igual que 4.00 [kHz].>>===================================================

Esta inicialización implica que se utilizarán 10 muestras por símbolo, con lo que una señal de comunicaciones binaria a 800 baudios se muestreará a 8 KHz (ancho de banda de simulación 4 KHz). En el caso de que el programa no se comporte de esta manera, ejecute el comando clear global y repita la operación. Si persisten los problemas pregunte al profesor.

5

Page 6: Practica1m

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 binariax=wave_gen(b,'unipolar_nrz', 800); % usamos NRZ unipolar y 800 bits por segundowaveplot(x) % dibujamos la señal resultanteenvia(x/2,2000); % observe la señal en el osciloscopiopause;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 0.7V. 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.

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 en una señal de 800bps?.

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. 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 hercios y calcule el número de muestras por símbolo utilizado en cada caso. Observe las variaciones de los ceros espectrales y relaciónelos con el régimen binario. Observe así mismo las señales en el osciloscopio (envíe las señales un número suficientemente alto de veces y realice el trigger con el canal 2)

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 v.a. 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

6

Page 7: Practica1m

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.

7

Page 8: Practica1m

a) Secuencias de ruido. Genere secuencias de 1000 puntos de ruido Gaussiano. Recuerde ejecutar iniciar con experimento 1

r=randn(1,10000); % genera 1x10000 muestras de v.a. Gaussiana (media=0 y varianza=1) subplot(211);waveplot(r);

Dibuje el histograma de la señal

subplot(212);hist(r,20);axis([-3 3 0 2000]);xlabel('Voltios');pause;

Dibuje ahora la autocorrelación y la DEP de la señal

subplot(211);acf(r); % la función acf(x) estima y dibuja la autocorrelación de la secuencia x subplot(212); espect(r,256);axis([0 4 -50 0])

Repita el proceso varias veces, comprobando que señales de ruido totalmente distintas dan lugar a histogramas, autocorrelaciones y densidades espectrales de potencia similares.

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ñalescala=????? % aplique un valor de escala adecuado para evitar saturar el D/Aenvia([x , y]/escala,2000); % utilice el valor de escala al enviar las señales a la tarjeta 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 de las potencias 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 onespect(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.

8

Page 9: Practica1m

6. PROBLEMA

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 x incluida en el fichero voz.mat 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.

Para ello, 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 que implemente el expansor, es decir, la función inversa de C(x).

En resumen, utilizando Matlab deberá aplicar ambos cuantificadores y obtener SNR1 y SNR2 (en decibelios) para la señal original (x2=x). Posteriormente deberá repetir el proceso para distintos niveles de potencia de la señal, sin más que escalar la señal original (x2=G*x con G variando desde 1 hasta 1/100). Finalmente deberá presentar una gráfica que muestre la potencia de la señal de entrada x2 (en dBWatt) en el eje horizontal y la SNR (en decibelios) de ambos métodos en el eje vertical. Se deberán repetir las simulaciones y presentar la gráfica para cuantificadores de 8 y de 5 bits.

9

CompresorLey AC(x)

CuantificadorUniforme

8 bitsRango 1V

x2[n]

bnExpansor

Ley A

CuantificadorUniforme

8 bitsRango 1V

y1[n]

SNR1

y2[n]

SNR2

x[n]G