You are on page 1of 9

TRANSMISIN DIGITAL PRCTICA 1

Curso 2007-8

Transmisin Digital

Prctica 1

Introduccin
Esta primera prctica trata de familiarizar al alumno con el lenguaje de programacin Matlab, permitindole afrontar materias propias de la asignatura Transmisin Digital en las prximas prcticas. Se tratar de generar las siguientes seales: Seal aleatoria Seal sinusoidal Seal suma de dos senos Seal cuadrada peridica Seal triangular peridica. A este conjunto de seales se le deben hacer una serie de medidas adems de calcular su D.E.P y su funcin de autocorrelacin. Las medidas a realizar son: Valor medio Valor de pico Energa en el intervalo Potencia en el intervalo Factor de cresta No todas las funciones necesarias para realizar esta prctica estn desarrolladas en este documento. El objetivo que se persigue es que el alumno realice algunos ejercicios que le permitan iniciarse en el uso de Matlab ( a programar se aprende programando).1 A continuacin se describen cada una de las funciones de forma detallada.

Funcin seno(seno.m)
La funcin seno no tiene parmetros de entrada ni salida ya que todas las operaciones se realizan dentro de ella. Consta de un men por el que se le introducen los parmetros de entrada que son: inicio y fin del intervalo, frecuencia de muestreo, frecuencia, fase y amplitud de la seal. Ahora se muestra un ejemplo de la construccin de una seal seno con frecuencia 1 Hz y frecuencia de muestreo 100 Hz, intervalo de observacin 1-4 segundos, amplitud unidad y fase inicial nula.
1 0.8 0.6 0.4 Seal en el dominio del tiempo.

En el cdigo de las funciones en MATLAB que se ofrecen se han introducido errores.

Curso 2007/8

Transmisin Digital

Prctica 1

El listado de la funcin seno.m es: function []=seno() % Entrada de parmetros A=input('Inicio del intervalo de observacin(sg)? '); b=input('Fin del intervalo de observacin(sg)? '); f=input('Frecuencia de la seal (Hz)? '); fs=input('Frecuencia de muestreo (Hz)?: '); fase=input('Fase de la seal (rad)? '); a=input('Amplitud de la seal (voltios)? '); % Generacin de la seal t=A:1/fs:b; % vector instantes de muestreo x=a*sin(2*pi*f*t+fase); % vector con seal seno % Visualizacin de la seal plot(t,x); title('Seal en el dominio del tiempo.'); xlabel('Tiempo'); ylabel('Amplitud'); zoom;pause;close;

Funcin suma de dos senos(sen_two.m)


Esta funcin tiene una estructura igual que la anterior pero trabaja con 2 senos. Por tanto, sus parmetros de entrada son: amplitudes, frecuencias y fases para cada seal seno, frecuencia de muestreo e intervalo de visualizacin. La siguiente figura representa una seal suma de dos senos cuyos datos son: 1000 Hz de frecuencia de muestreo, 1 Hz para el primer seno y 2 Hz para el segundo, 0 radianes para el primero y pi radianes para el segundo, 1 y 2 voltios para el primer y el segundo seno respectivamente y el intervalo de visualizacin desde 1 hasta 3 segundos.
3 2 1 Amplitud 0 -1 -2 Seal en el dominio del tiempo.

El listado de esta funcin es: function []=sen_two() % Entrada de parmetros A=input('Inicio del intervalo de observacin(sg)? '); b=input('Fin del intervalo de observacin(sg)? '); fs=input('Frecuencia de muestreo (Hz)?: ');

Curso 2007/8

Transmisin Digital f1=input('Frecuencia de la 1 sinusoide (Hz)? '); fase1=input('Fase de la 1 sinusoide (rad)? '); a1=input('Amplitud de la 1 sinusoide (voltios)? '); f2=input('Frecuencia de la 2 sinusoide (Hz)? '); fase2=input('Fase de la 2 sinusoide (rad)? '); a2=input('Amplitud de la 2 sinusoide (voltios)? '); % Generacin de la seal t=a:1/fs:b; x=a1*cos(2*pi*f1*t+fase1)+a2*sin(2*pi*f2*t+fase2); % Visualizacin de la seal plot(t,x); title('Seal en el dominio del tiempo.'); xlabel('Tiempo'); ylabel('Amplitud'); zoom;pause;close;

Prctica 1

Funcin cuadrada peridica(cuadro.m)


Esta funcin tampoco tiene parmetros de entrada ni de salida ya que los datos se le introducen dentro de la funcin. Los datos de entrada son: frecuencia de muestreo, inicio y fin del intervalo de observacin, amplitud del pulso, periodo y ciclo de trabajo. La forma de construir una seal cuadrada es la siguiente: se parte de una seal base que es un periodo donde se definen el ancho del pulso y la parte todo cero. A continuacin se repite este periodo tantas veces como sea necesario para cubrir el intervalo de visualizacin redondeando por lo alto. Posteriormente se recorta lo que sobra. Un ejemplo de esta seal es:
1 0.9 0.8 0.7 Voltage 0.6 0.5 0.4 0.3 0.2 0.1 0 SEAL EN EL DOMINIO DEL TIEMPO

En este caso, el intervalo de observacin va desde 1 hasta 4 segundos, el periodo es 0.6 y el ciclo de trabajo es 0.2. El listado de esta funcin es: function[]=cuadro() fs=input('Frecuencia de muestreo (Hz)? '); a=input('Inicio del intervalo de observacin (sg)? '); b=input('Final del intervalo de observacin (sg)? '); T=input('Periodo (sg)? '); B=input('Ciclo de trabajo (%)? ');

Curso 2007/8

Transmisin Digital while (B>1), B=input('Introduce un ciclo de trabajo menor.'); end; A=input('Amplitud (voltios)? '); % Creacin de la funcin base n_unos=B*T*fs; n_ceros=B(1-B)*T*fs; base=[A*ones(1,n_unos) zeros(1,n_ceros)];

Prctica 1

% Creacin de la seal final t=a:1/fs/b; % Vector de instantes de muestreo LT=length(t); n_per=fix(LT/length(base)); % periodos completos de la base x=base; for i=1:n_per, x=[x base]; end x=x(1:LT); % Se afina longitud del vector % Visualizacin de la seal resultante plot(t,x); xlabel('Segundos'); ylabel('Voltage'); title('SEAL EN EL DOMINIO DEL TIEMPO');axis('auto'); zoom;pause;close;

Funcin triangular peridica(triangu.m)


Esta funcin tiene prcticamente la misma estructura que la anterior. Se crea una seal triangular base, se repite tantos periodos como sean necesarios, recortando si es necesario. Los datos de entrada son: amplitud, periodo, frecuencia de muestreo e inicio y fin del intervalo. Como ejemplo de esta seal, se tiene:
2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 0.5 1 1.5 2 2.5 3 3.5 4

Para este caso, la amplitud es 2 voltios, el periodo de observacin dura 4 segundos, fs=100 Hz y el periodo de la seal triangular es 1 segundo. El listado de esta funcin es: function[]=triangu() fs=input('Frecuencia de muestreo (Hz)? '); a=input('Inicio del intervalo (sg)? :');

Curso 2007/8

Transmisin Digital b=input('Final del intervalo (sg)? '); To=input('Periodo de la seal (sg)? '); A=input('Amplitud de la seal (voltios)? '); % Creacin de la funcin base base=[0:2*A/fs:A A-2*A/fs:-2*A/fs:0]; LX=length(base);

Prctica 1

% Creacin de la seal final t=a:1/fs/b; % Vector de instantes de muestreo LT=length(t); n_per=fix(LT/length(base)); % periodos completos de la base x=base; for i=1:n_per, x=[x base]; end x=x(1:LT); % Se afina longitud del vector % Visualizacin de la seal final plot(t,y); xlabel('segundos'); ylabel('Amplitud'); zoom;pause;close;

Funcin Aleatoria uniforme(alea_uni.m) y normal(alea_norm.m)


Estas funciones poseen la misma estructura que las anteriores. Sus datos de entrada son: frecuencia de muestreo y valores de inicio y fin de intervalo. Para la generacin de estas seales se aprovechan dos funciones de Matlab que generan matrices cuyos elementos responden a una funcin densidad de probabilidad uniforme (rand) o a una funcin densidad de probabilidad normal (randn). Cada una de ellas presenta las siguientes caractersticas: f.d.p. uniforme(rand): los valores que devuelve responden a una distribucin uniforme en el intervalo (0,1). Por tanto, para generar una seal con la media y varianza deseada habr que sumar y/o multiplicar por los valores adecuados. f.d.p. normal(randn): responde a una distribucin normal de media 0 y varianza 1. Para obtener la varianza y media deseada habr que operar con los valores correspondientes como para el caso anterior. El listado del fichero alea_uni.m donde se encuentra la funcin alea_uni es: function[x]=alea_uni() % PARAMETROS DE LA SEAL ALEATORIA fs=input('Frecuencia de muestreo (Hz): '); valorini=input('Valor inicial de observacin: '); valorfin=input('Valor final de observacin: '); while valorfin<=valorini, valorfin=input('Introduzca valor final mayor: '); end % CALCULO DE LA SEAL t=valorini:1/fs:valorfin; % vector de instantes de muestreo x=rand(1,length(t)); % PLOTEADO DE LA SEAL plot(t,x); title('SEAL ALEATORIA UNIFORME');

Curso 2007/8

Transmisin Digital xlabel('Tiempo (segundos)'); ylabel('Amplitud (Voltios)'); zoom;pause;close;

Prctica 1

El listado de la funcin alea_nor es equivalente pero sustituyendo la llamada a la funcin de Matlab rand por randn. Ejercicio 1.- Modifique las funciones alea_uni y alea_nor para que admitan como nuevos parmetros la media y la varianza de la seal aleatoria que se desea generar. A continuacin se muestra un ejemplo de seal con f.d.p. uniforme con media 5 y varianza la unidad, fs=100Hz e intervalo de observacin desde 1 hasta 4 segundos:
7 6.5 6 5.5 5 4.5 4 3.5 3 1 1.5 2 2.5 3 3.5 4

Un ejemplo de seal con f.d.p. normal, media 2, varianza 1 y fs=100 Hz sera:


6 5 4 3 2 1 0 -1

1.5

2.5

3.5

Curso 2007/8

Transmisin Digital

Prctica 1

Funcin valores(valores.m)
Esta funcin se encarga de realizar todas las medidas definidas al principio a travs de un men. Como nico parmetro de entrada tiene el vector correspondiente a la seal de la que se quiere obtener los siguientes parmetros: Valor medio: Se calcula dividiendo la suma de los valores de cada muestra entre el nmero de muestras que hay. Es decir:

v medio =
siendo N la longitud del vector de seal x.

1 N

x(i) ,
i =1

Valor de pico: Es el valor mximo de la seal. Se calcula comparando todas las muestras del vector de seal y ver cual es la mayor. Energa de la seal en el intervalo: Es la suma de todas las componentes del vector de seal al cuadrado. Es decir:

Energa = x 2 (i )
i =1

Potencia de la seal en el intervalo: indica la tasa con la que es liberada la energa. Es decir:

Potencia =
El listado del fichero es: function []=valores(x)

1 N

x
i =1

(i )

while k1<6, k1=menu('PARMETROS DE LA SEAL','Valor medio','Valor de pico','Energia','Potencia','volver'); if k1==1 %VALOR MEDIO suma=0; for contador=1:length(t), suma=suma+x(contador); end valor_medio=suma/length(t) pause end if k1==2 %VALOR DE PICO valor_pico=max(abs(x)) pause end if k1==3 %ENERGIA DE LA SEAL energia=x*x pause end if k1==4 %POTENCIA MEDIA Px=energia/length(t)

Curso 2007/8

Transmisin Digital pause end end %Fin del while

Prctica 1

Ejercicio 2.- Obtenga una funcin que halle la Densidad Espectral de Potencia (D.E.P.) de una seal. Para construirla use la transformada rpida de Fourier (funcin fft de Matlab). Sus parmetros de entrada sern la seal y la frecuencia de muestreo usada para obtener la seal. Debe representar el resultado obtenido, apareciendo en el eje de abcisas la frecuencia en Hz y en de ordenadas la potencia en watios. Compruebe para las funciones vistas en los apartados anteriores que los resultados obtenidos coinciden con los tericos. Por ejemplo, para una seal seno su D.E.P. sern dos deltas colocadas en la frecuencia de la seal con valor Ac2/4 donde Ac es la amplitud de la seal.

Funcin de Autocorrelacin(autocor.m)
Esta funcin, como su nombre indica, se encarga de calcular la funcin de autocorrelacin de una seal. El nico parmetros de entrada es el vector que representa la seal a la que se le calcula la autocorrelacin. Dentro de la funcin se pide un segundo parmetro que es el mximo desplazamiento para el que se va a calcular la autocorrelacin. No hay parmetros de salida. La autocorrelacin se calcula desde cero hasta el mximo desplazamiento introducido por el teclado. La expresin que usa para calcular la funcin de autocorrelacin es:

R( ) =
El listado de esta funcin es: function []=autocor(x)

1 N

N 1 n=0

x ( n) x ( n + )

% INTRODUCCIN DE PARMEROS tau=input('Nmero mximo de desplazamientos? '); while tau<0, tau=input('El nmero de desplazamientos debe ser mayor que cero: '); end % CLCULO DE LA AUTOCORRELACIN if (tau>length(x)) % Limito el valor mximo de tau tau=length(x); end auto=x*x; LE=length(x); for i=1:tau, aux=x(k+1:LE)*x(1:LE-k); auto=[aux auto aux]; end % PLOTEADO DE LA SEAL RESULTANTE eje_tiempos=-tau:tau; plot(eje_tiempos,auto); title('Autocorrelacion de la seal'); ylabel('Potencia (W)'); xlabel('desplazamiento (muestras)'); zoom;pause;close;

Curso 2007/8

You might also like