Este documento describe una práctica de laboratorio sobre generación y adquisición de señales de comunicaciones digitales. Los objetivos incluyen familiarizar a los estudiantes con conceptos como muestreo, aliasing y cuantificación de señales. También se estudian códigos de línea comunes y el efecto del ruido. La práctica guía a los estudiantes a través de ejercicios de muestreo, reconstrucción y cuantificación de señales, así como generación de señales de comunicaciones.
Es un analisis breve no tan profundo en FM, adjunto unos 3 problemas basicos para poder entender como usar las formulas que nos ayudan a poder analizar y entender la modulacion de FM. Espero que les sea de gran utilidad :)
Es un analisis breve no tan profundo en FM, adjunto unos 3 problemas basicos para poder entender como usar las formulas que nos ayudan a poder analizar y entender la modulacion de FM. Espero que les sea de gran utilidad :)
RESPUESTA EN FRECUENCIA (Métodos del Diagrama de Bode y del Diagrama Polar)Elias1306
Los objetivos del presente informe son conocer las aplicaciones de Matlab en el desarrollo y solución de problemas matemáticos para entender los métodos del Diagrama de Bode y del Diagrama Polar.
concepto Series y Transformada de Fourier, PROPIEDADES DE LA TRANSFORMADA DE FOURIER: Desplazamiento en el tiempo, linealidad, Escalamiento, Inversión o Reflexión, Multiplicación, Dualidad, Convolución, Teorema Parseval, APLICACIONES DE LAS SERIES DE FOURIER, COEFICIENTES DE FOURIER EN MATLAB, Ejemplos
1. 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:Practica1problema.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 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=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
muestras
t=(0:N-1)/fs; % Vector con los instantes de muestreo: 1 s a fs Hz
x=0.5*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” de
MATLAB se parezca a la señal de tiempo continuo. Sin embargo, mientras se cumpla el
1
2. 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 senoidal
fso=1e6; % frecuencia de muestreo de referencia para los dibujos
No= fso*2e-3;
to=(0:No-1)/fso; % representaremos 2 ms de la señal
xo=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/s
t=(0:N-1)/fs; % Vector con los instantes de muestreo: 1s a fs Hz
x=0.5*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=0.5*sin(2*pi*fr*to); % Señal reconstruida
plot(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 senoidal
fs=44100; % frecuencia de muestreo
N= fs*1;
t=(0:N-1)/fs; % generaremos 1 s de la señal
x=0.5*sin(2*pi*f*t); % señal original
frec_muestreo(fs);envia(x,60); % Reproducimos la señal 60 veces (1 minuto)
% Ahora el Alumno2 deberá ejecutar su código
pause;cierra(0) % pulsar una tecla cuando haya finalizado el Alumno2
2
3. 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/s
frec_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 respectivamente
fs2=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ñales
axis([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 Hz
load voz.mat % en la variable x tenemos la señal de voz
close all;subplot(221);hist(x,50) % la función hist(x) dibuja el histograma del vector x
title('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
4. c) Cuantificación de la señal de voz utilizando 10 bits por muestra
xq=cuantifica(x,10); % cuantificamos la señal con 10 bits
error=x-xq;
subplot(224);espect(xq,100);axis([0 6 -110 -40]) % espectro de la señal cuantificada
hold on;espect(error,100);hold off % espectro del error de cuantificación
grid;legend('Señal Cuantificada','Error Cuantificación')
subplot(223);hist(error,20) % histograma del error de
cuantificación
title('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ón
envia([ 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.
bits símbolos muestras señal
Rb bits/s Rs símbolos/s fs de línea
bn An x[n] x(t)
Codificador Filtro CONVERSOR
Transmisor D/A
TRANSMISOR
Sistema Digital Discreto
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
x(t) = ∑ A n h(t − nT) .
n
4
5. 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]; % bits
A=2*b-1; % símbolos
subplot(212);stem(b);title('bits');
subplot(211);stem(A);title('símbolos');pause %dibujamos las secuencias de bits y símbolos
fs1=44100;frec_muestreo(fs1);
N1=40; % 40 muestras/símb, fs=44100Hz Rs=44100/40=1102.5 baudios
x1=filtro_tx(A,N1);
t1=(0:length(x1)-1)/fs1; % vector de tiempos para el dibujo
plot(t1,x1,'-o');title('señal de línea') % dibujamos las muestras de la señal de línea
envia([x1 ; 1 zeros(1,length(x1)-1)]/2,500); % observe la señal en el osciloscopio
pause;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.
ATENCION
Para 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
6. 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); % observe 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 ±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
discreto de señales de comunicaciones en ruido. Así mismo, el alumno podrá observar el
6
7. efecto del ruido en la señal de línea por medio del osciloscopio.
7
8. 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ñal
escala=????? % aplique un valor de escala adecuado para evitar saturar el D/A
envia([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 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.
8
9. 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.
Cuantificador
Uniforme y1[n]
8 bits ↑
x[n] Rango ±1V SNR1
G x2[n]
Cuantificador
Compresor bn
Uniforme Expansor y2[n]
Ley A
8 bits Ley A ↑
C( x )
Rango ±1V SNR2
Para ello, deberá implementar una función que lleve a cabo la compresión de la señal
original siguiendo la expresión:
A| x| 1
1 + ln( A) sign( x), 0 ≤| x |≤ ;
A
C ( x) =
1 + ln( A | x |) 1
sign( x), ≤| x |≤ 1.
1 + ln( A) A
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