TRANSMISIÓN DIGITAL PRÁCTICA 1

Curso 2007-8

intervalo de observación 1-4 segundos. Ahora se muestra un ejemplo de la construcción de una señal seno con frecuencia 1 Hz y frecuencia de muestreo 100 Hz.6 0. fase y amplitud de la señal. 1 0.8 0.m) La función seno no tiene parámetros de entrada ni salida ya que todas las operaciones se realizan dentro de ella. A este conjunto de señales se le deben hacer una serie de medidas además de calcular su D.Transmisión Digital Práctica 1 Introducción Esta primera práctica trata de familiarizar al alumno con el lenguaje de programación Matlab. amplitud unidad y fase inicial nula.E. Función seno(seno. 1 En el código de las funciones en MATLAB que se ofrecen se han introducido errores. Las medidas a realizar son: •Valor medio •Valor de pico •Energía en el intervalo •Potencia en el intervalo •Factor de cresta No todas las funciones necesarias para realizar esta práctica están desarrolladas en este documento. frecuencia de muestreo. Curso 2007/8 2 . 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”).P y su función de autocorrelación. frecuencia.1 A continuación se describen cada una de las funciones de forma detallada. Consta de un menú por el que se le introducen los parámetros de entrada que son: inicio y fin del intervalo.4 Señal en el dominio del tiempo. Se tratará de generar las siguientes señales: •Señal aleatoria •Señal sinusoidal •Señal suma de dos senos •Señal cuadrada periódica •Señal triangular periódica. permitiéndole afrontar materias propias de la asignatura Transmisión Digital en las próximas prácticas.

El listado de esta función es: function []=sen_two() % Entrada de parámetros A=input('Inicio del intervalo de observación(sg)? '). La siguiente figura representa una señal suma de dos senos cuyos datos son: 1000 Hz de frecuencia de muestreo. fs=input('Frecuencia de muestreo (Hz)?: '). Función suma de dos senos(sen_two. % Generación de la señal t=A:1/fs:b. fs=input('Frecuencia de muestreo (Hz)?: ').'). title('Señal en el dominio del tiempo. 3 2 1 Amplitud 0 -1 -2 Señal en el dominio del tiempo. % vector con señal seno % Visualización de la señal plot(t.close. f=input('Frecuencia de la señal (Hz)? '). zoom. % vector instantes de muestreo x=a*sin(2*pi*f*t+fase).m es: function []=seno() % Entrada de parámetros A=input('Inicio del intervalo de observación(sg)? '). xlabel('Tiempo').Transmisión Digital Práctica 1 El listado de la función seno.x). sus parámetros de entrada son: amplitudes.m) Esta función tiene una estructura igual que la anterior pero trabaja con 2 senos. ylabel('Amplitud'). Curso 2007/8 3 . Por tanto. 1 Hz para el primer seno y 2 Hz para el segundo. b=input('Fin del intervalo de observación(sg)? '). frecuencias y fases para cada señal seno. b=input('Fin del intervalo de observación(sg)? ').pause. a=input('Amplitud de la señal (voltios)? '). 1 y 2 voltios para el primer y el segundo seno respectivamente y el intervalo de visualización desde 1 hasta 3 segundos. frecuencia de muestreo e intervalo de visualización. fase=input('Fase de la señal (rad)? '). 0 radianes para el primero y pi radianes para el segundo.

a1=input('Amplitud de la 1ª sinusoide (voltios)? ').x). Posteriormente se recorta lo que sobra. fase2=input('Fase de la 2ª sinusoide (rad)? '). f2=input('Frecuencia de la 2ª sinusoide (Hz)? '). zoom. amplitud del pulso. xlabel('Tiempo'). Práctica 1 Función cuadrada periódica(cuadro. % Generación de la señal t=a:1/fs:b.7 Voltage 0.close.2. a2=input('Amplitud de la 2ª sinusoide (voltios)? '). La forma de construir una señal cuadrada es la siguiente: se parte de una señal base que es un periodo donde se definen el ancho del pulso y la parte todo cero.8 0. Un ejemplo de esta señal es: 1 0. Curso 2007/8 4 . inicio y fin del intervalo de observación. el intervalo de observación va desde 1 hasta 4 segundos. A continuación se repite este periodo tantas veces como sea necesario para cubrir el intervalo de visualización redondeando por lo alto.6 y el ciclo de trabajo es 0. x=a1*cos(2*pi*f1*t+fase1)+a2*sin(2*pi*f2*t+fase2). a=input('Inicio del intervalo de observación (sg)? '). B=input('Ciclo de trabajo (%)? ').6 0.3 0. el periodo es 0.m) Esta función tampoco tiene parámetros de entrada ni de salida ya que los datos se le introducen dentro de la función. T=input('Periodo (sg)? ').pause.1 0 SEÑAL EN EL DOMINIO DEL TIEMPO En este caso.9 0. title('Señal en el dominio del tiempo. Los datos de entrada son: frecuencia de muestreo. b=input('Final del intervalo de observación (sg)? '). % Visualización de la señal plot(t. El listado de esta función es: function[]=cuadro() fs=input('Frecuencia de muestreo (Hz)? '). periodo y ciclo de trabajo.4 0.5 0. fase1=input('Fase de la 1ª sinusoide (rad)? ').').2 0.Transmisión Digital f1=input('Frecuencia de la 1ª sinusoide (Hz)? '). ylabel('Amplitud').

for i=1:n_per.2 0 0 0.pause. end x=x(1:LT).5 4 Para este caso.Transmisión Digital while (B>1). recortando si es necesario. % Se afina longitud del vector % Visualización de la señal resultante plot(t. x=[x base].axis('auto'). zoom. el periodo de observación dura 4 segundos. B=input('Introduce un ciclo de trabajo menor. se tiene: 2 1.n_ceros)].4 1. la amplitud es 2 voltios.5 2 2. % Vector de instantes de muestreo LT=length(t).4 0.close. Como ejemplo de esta señal. frecuencia de muestreo e inicio y fin del intervalo.8 1. % Creación de la función base n_unos=B*T*fs.n_unos) zeros(1. n_ceros=B(1-B)*T*fs.').6 1. Curso 2007/8 5 . title('SEÑAL EN EL DOMINIO DEL TIEMPO'). El listado de esta función es: function[]=triangu() fs=input('Frecuencia de muestreo (Hz)? '). ylabel('Voltage'). se repite tantos periodos como sean necesarios. xlabel('Segundos').m) Esta función tiene prácticamente la misma estructura que la anterior. Se crea una señal triangular base.8 0. Los datos de entrada son: amplitud. end.6 0. base=[A*ones(1. Función triangular periódica(triangu.5 1 1.x). A=input('Amplitud (voltios)? '). fs=100 Hz y el periodo de la señal triangular es 1 segundo. a=input('Inicio del intervalo (sg)? :'). % periodos completos de la base x=base. periodo. n_per=fix(LT/length(base)).2 1 0. Práctica 1 % Creación de la señal final t=a:1/fs/b.5 3 3.

Por tanto.close.m donde se encuentra la función alea_uni es: function[x]=alea_uni() % PARAMETROS DE LA SEÑAL ALEATORIA fs=input('Frecuencia de muestreo (Hz): ').p.length(t)). end x=x(1:LT). % periodos completos de la base x=base. Curso 2007/8 6 . end % CALCULO DE LA SEÑAL t=valorini:1/fs:valorfin. Práctica 1 % Creación de la señal final t=a:1/fs/b.d. valorfin=input('Introduzca valor final mayor: ').y).d. % vector de instantes de muestreo x=rand(1. A=input('Amplitud de la señal (voltios)? '). LX=length(base). x=[x base]. valorfin=input('Valor final de observación: '). zoom.Transmisión Digital b=input('Final del intervalo (sg)? '). El listado del fichero alea_uni. • f. Cada una de ellas presenta las siguientes características: • f. % Creación de la función base base=[0:2*A/fs:A A-2*A/fs:-2*A/fs:0]. To=input('Periodo de la señal (sg)? '). uniforme(rand): los valores que devuelve responden a una distribución uniforme en el intervalo (0. xlabel('segundos').x).pause.1). % Se afina longitud del vector % Visualización de la señal final plot(t. Función Aleatoria uniforme(alea_uni. Para obtener la varianza y media deseada habrá que operar con los valores correspondientes como para el caso anterior. ylabel('Amplitud'). while valorfin<=valorini.m) y normal(alea_norm. title('SEÑAL ALEATORIA UNIFORME'). para generar una señal con la media y varianza deseada habrá que sumar y/o multiplicar por los valores adecuados.m) Estas funciones poseen la misma estructura que las anteriores. valorini=input('Valor inicial de observación: '). % Vector de instantes de muestreo LT=length(t).p. for i=1:n_per. Sus datos de entrada son: frecuencia de muestreo y valores de inicio y fin de intervalo. % PLOTEADO DE LA SEÑAL plot(t. Para la generación de estas señales se aprovechan dos funciones de Matlab que generan matrices cuyos elementos responden a una función densidad de probabilidad uniforme (rand) o a una función densidad de probabilidad normal (randn). n_per=fix(LT/length(base)). normal(randn): responde a una distribución normal de media 0 y varianza 1.

varianza 1 y fs=100 Hz sería: 6 5 4 3 2 1 0 -1 1 1.5 2 2. fs=100Hz e intervalo de observación desde 1 hasta 4 segundos: 7 6.close.pause. uniforme con media 5 y varianza la unidad.5 4 Curso 2007/8 7 .5 3 3.5 5 4. Práctica 1 El listado de la función alea_nor es equivalente pero sustituyendo la llamada a la función de Matlab “rand” por “randn”.5 2 2.5 6 5.d.Modifique las funciones alea_uni y alea_nor para que admitan como nuevos parámetros la media y la varianza de la señal aleatoria que se desea generar. media 2. A continuación se muestra un ejemplo de señal con f. normal.p. zoom.5 4 Un ejemplo de señal con f.5 4 3.Transmisión Digital xlabel('Tiempo (segundos)').p.5 3 3. Ejercicio 1.d. ylabel('Amplitud (Voltios)').5 3 1 1..

Se calcula comparando todas las muestras del vector de señal y ver cual es la mayor. k1=menu('PARÁMETROS DE LA SEÑAL'. 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 SEÑAL energia=x*x’ pause end if k1==4 %POTENCIA MEDIA Px=energia/length(t) Curso 2007/8 8 .'volver'). Es decir: Potencia = El listado del fichero es: function []=valores(x) 1 N ∑x i =1 N 2 (i ) while k1<6.'Valor medio'.'Valor de pico'.'Energia'. suma=suma+x(contador). Como único parámetro de entrada tiene el vector correspondiente a la señal de la que se quiere obtener los siguientes parámetros: Valor medio: Se calcula dividiendo la suma de los valores de cada muestra entre el número de muestras que hay. Es decir: Energía = ∑ x 2 (i ) i =1 N Potencia de la señal en el intervalo: indica la tasa con la que es liberada la energía.'Potencia'. Energía de la señal en el intervalo: Es la suma de todas las componentes del vector de señal al cuadrado.m) Esta función se encarga de realizar todas las medidas definidas al principio a través de un menú. i =1 N Valor de pico: Es el valor máximo de la señal. Es decir: v medio = siendo N la longitud del vector de señal x. for contador=1:length(t). 1 N ∑ x(i) . if k1==1 %VALOR MEDIO suma=0.Transmisión Digital Práctica 1 Función valores(valores.

serán dos deltas colocadas en la frecuencia de la señal con valor Ac2/4 donde Ac es la amplitud de la señal. apareciendo en el eje de abcisas la frecuencia en Hz y en de ordenadas la potencia en watios. Curso 2007/8 9 . El único parámetros de entrada es el vector que representa la señal a la que se le calcula la autocorrelación.) de una señal. para una señal seno su D. No hay parámetros de salida.E. Para construirla use la transformada rápida de Fourier (función “fft” de Matlab).E. plot(eje_tiempos. xlabel('desplazamiento (muestras)'). La autocorrelación se calcula desde cero hasta el máximo desplazamiento introducido por el teclado.P. Sus parámetros de entrada serán la señal y la frecuencia de muestreo usada para obtener la señal. Dentro de la función se pide un segundo parámetro que es el máximo desplazamiento para el que se va a calcular la autocorrelación.Obtenga una función que halle la Densidad Espectral de Potencia (D. aux=x(k+1:LE)*x(1:LE-k). se encarga de calcular la función de autocorrelación de una señal. ylabel('Potencia (W)'). end % PLOTEADO DE LA SEÑAL RESULTANTE eje_tiempos=-tau:tau.auto). Compruebe para las funciones vistas en los apartados anteriores que los resultados obtenidos coinciden con los teóricos. end % CÁLCULO DE LA AUTOCORRELACIÓN if (tau>length(x)) % Limito el valor máximo de tau tau=length(x). La expresión que usa para calcular la función de autocorrelación es: R(τ ) = El listado de esta función es: function []=autocor(x) 1 N −τ N −1−τ n=0 ∑ x ( n) x ( n + τ ) % INTRODUCCIÓN DE PARÁMEROS tau=input('Número máximo de desplazamientos? ').P. Debe representar el resultado obtenido.m) Esta función. Por ejemplo.close.. tau=input('El número de desplazamientos debe ser mayor que cero: '). Función de Autocorrelación(autocor. LE=length(x).pause. while tau<0. for i=1:tau. title('Autocorrelacion de la señal'). zoom. end auto=x*x’.Transmisión Digital pause end end %Fin del while Práctica 1 Ejercicio 2. auto=[aux auto aux]. como su nombre indica.