Está en la página 1de 9

TRANSMISIÓN DIGITAL

PRÁCTICA 1

Curso 2007-8
Transmisión Digital Práctica 1

Introducción
Esta primera práctica trata de familiarizar al alumno con el lenguaje de programación Matlab,
permitiéndole afrontar materias propias de la asignatura Transmisión Digital en las próximas prácticas.
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.
A este conjunto de señales se le deben hacer una serie de medidas además de calcular su D.E.P y su
función de autocorrelación. 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. 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 continuación se describen cada una de las funciones de forma detallada.

Función seno(seno.m)
La función seno no tiene parámetros 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 parámetros de entrada que son: inicio y fin
del intervalo, frecuencia de muestreo, frecuencia, fase y amplitud de la señal.
Ahora se muestra un ejemplo de la construcción de una señal seno con frecuencia 1 Hz y frecuencia
de muestreo 100 Hz, intervalo de observación 1-4 segundos, amplitud unidad y fase inicial nula.
Señal en el dominio del tiempo.
1

0.8

0.6

0.4

1
En el código de las funciones en MATLAB que se ofrecen se han introducido errores.

Curso 2007/8 2
Transmisión Digital Práctica 1

El listado de la función seno.m es:


function []=seno()

% Entrada de parámetros
A=input('Inicio del intervalo de observación(sg)? ');
b=input('Fin del intervalo de observación(sg)? ');
f=input('Frecuencia de la señal (Hz)? ');
fs=input('Frecuencia de muestreo (Hz)?: ');
fase=input('Fase de la señal (rad)? ');
a=input('Amplitud de la señal (voltios)? ');

% Generación de la señal
t=A:1/fs:b; % vector instantes de muestreo
x=a*sin(2*pi*f*t+fase); % vector con señal seno

% Visualización de la señal
plot(t,x);
title('Señal en el dominio del tiempo.');
xlabel('Tiempo');
ylabel('Amplitud');
zoom;pause;close;

Función suma de dos senos(sen_two.m)


Esta función tiene una estructura igual que la anterior pero trabaja con 2 senos. Por tanto, sus
parámetros de entrada son: amplitudes, frecuencias y fases para cada señal seno, frecuencia de muestreo e
intervalo de visualización.
La siguiente figura representa una señal 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 visualización desde
1 hasta 3 segundos.
Señal en el dominio del tiempo.
3

1
Amplitud

-1

-2

El listado de esta función es:


function []=sen_two()

% Entrada de parámetros
A=input('Inicio del intervalo de observación(sg)? ');
b=input('Fin del intervalo de observación(sg)? ');
fs=input('Frecuencia de muestreo (Hz)?: ');

Curso 2007/8 3
Transmisión Digital Práctica 1

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)? ');

% Generación de la señal
t=a:1/fs:b;
x=a1*cos(2*pi*f1*t+fase1)+a2*sin(2*pi*f2*t+fase2);

% Visualización de la señal
plot(t,x);
title('Señal en el dominio del tiempo.');
xlabel('Tiempo');
ylabel('Amplitud');
zoom;pause;close;

Función cuadrada periódica(cuadro.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.
Los datos de entrada son: frecuencia de muestreo, inicio y fin del intervalo de observación, amplitud
del pulso, periodo y ciclo de trabajo.
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. A continuación se repite este periodo tantas
veces como sea necesario para cubrir el intervalo de visualización redondeando por lo alto. Posteriormente se
recorta lo que sobra.
Un ejemplo de esta señal es:
SEÑAL EN EL DOMINIO DEL TIEMPO
1

0.9

0.8

0.7

0.6
Voltage

0.5

0.4

0.3

0.2

0.1

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

Curso 2007/8 4
Transmisión Digital Práctica 1

while (B>1),
B=input('Introduce un ciclo de trabajo menor.');
end;
A=input('Amplitud (voltios)? ');

% Creación de la función base


n_unos=B*T*fs;
n_ceros=B(1-B)*T*fs;
base=[A*ones(1,n_unos) zeros(1,n_ceros)];

% Creación de la señal 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

% Visualización de la señal resultante


plot(t,x);
xlabel('Segundos');
ylabel('Voltage');
title('SEÑAL EN EL DOMINIO DEL TIEMPO');axis('auto');
zoom;pause;close;

Función triangular periódica(triangu.m)


Esta función tiene prácticamente la misma estructura que la anterior. Se crea una señal 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 señal, se tiene:

1.8

1.6

1.4

1.2

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 observación dura 4 segundos, fs=100 Hz y el
periodo de la señal triangular es 1 segundo.
El listado de esta función es:
function[]=triangu()
fs=input('Frecuencia de muestreo (Hz)? ');
a=input('Inicio del intervalo (sg)? :');

Curso 2007/8 5
Transmisión Digital Práctica 1

b=input('Final del intervalo (sg)? ');


To=input('Periodo de la señal (sg)? ');
A=input('Amplitud de la señal (voltios)? ');

% Creación de la función base


base=[0:2*A/fs:A A-2*A/fs:-2*A/fs:0];
LX=length(base);

% Creación de la señal 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

% Visualización de la señal final


plot(t,y);
xlabel('segundos');
ylabel('Amplitud');
zoom;pause;close;

Función 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 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). Cada una de ellas presenta las siguientes características:
• f.d.p. uniforme(rand): los valores que devuelve responden a una distribución uniforme en el
intervalo (0,1). Por tanto, para generar una señal con la media y varianza deseada habrá que
sumar y/o multiplicar por los valores adecuados.
• f.d.p. normal(randn): responde a una distribución 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 función alea_uni es:


function[x]=alea_uni()

% PARAMETROS DE LA SEÑAL ALEATORIA


fs=input('Frecuencia de muestreo (Hz): ');
valorini=input('Valor inicial de observación: ');
valorfin=input('Valor final de observación: ');

while valorfin<=valorini,
valorfin=input('Introduzca valor final mayor: ');
end

% CALCULO DE LA SEÑAL
t=valorini:1/fs:valorfin; % vector de instantes de muestreo
x=rand(1,length(t));

% PLOTEADO DE LA SEÑAL
plot(t,x);
title('SEÑAL ALEATORIA UNIFORME');

Curso 2007/8 6
Transmisión Digital Práctica 1

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

El listado de la función alea_nor es equivalente pero sustituyendo la llamada a la función de Matlab “rand”
por “randn”.

Ejercicio 1.- 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.

A continuación se muestra un ejemplo de señal con f.d.p. uniforme con media 5 y varianza la unidad,
fs=100Hz e intervalo de observación desde 1 hasta 4 segundos:

6.5

5.5

4.5

3.5

3
1 1.5 2 2.5 3 3.5 4

Un ejemplo de señal con f.d.p. normal, media 2, varianza 1 y fs=100 Hz sería:

-1
1 1.5 2 2.5 3 3.5 4

Curso 2007/8 7
Transmisión Digital Práctica 1

Función valores(valores.m)
Esta función se encarga de realizar todas las medidas definidas al principio a través de un menú.
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:
N
1
v medio =
N
∑ x(i) ,
i =1

siendo N la longitud del vector de señal x.


ÆValor de pico: Es el valor máximo de la señal. Se calcula comparando todas las muestras del vector
de señal y ver cual es la mayor.
ÆEnergía de la señal en el intervalo: Es la suma de todas las componentes del vector de señal al
cuadrado. Es decir:
N
Energía = ∑ x 2 (i )
i =1

ÆPotencia de la señal en el intervalo: indica la tasa con la que es liberada la energía. Es decir:
N
1
Potencia =
N
∑x
i =1
2
(i )

El listado del fichero es:


function []=valores(x)

while k1<6,
k1=menu('PARÁMETROS DE LA SEÑAL','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 SEÑAL
energia=x*x’
pause
end
if k1==4
%POTENCIA MEDIA
Px=energia/length(t)

Curso 2007/8 8
Transmisión Digital Práctica 1

pause
end
end %Fin del while

Ejercicio 2.- Obtenga una función que halle la Densidad Espectral de Potencia (D.E.P.) de una señal.
Para construirla use la transformada rápida de Fourier (función “fft” de Matlab). Sus parámetros de
entrada serán la señal y la frecuencia de muestreo usada para obtener la señal. 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 teóricos. Por ejemplo, para una señal seno su D.E.P. 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.

Función de Autocorrelación(autocor.m)
Esta función, como su nombre indica, se encarga de calcular la función de autocorrelación de una
señal. El único parámetros de entrada es el vector que representa la señal a la que se le calcula la
autocorrelación. 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. No hay parámetros de salida. La autocorrelación se calcula desde cero
hasta el máximo desplazamiento introducido por el teclado. La expresión que usa para calcular la función de
autocorrelación es:
N −1−τ
1
R(τ ) =
N −τ
∑ x ( n) x ( n + τ )
n=0

El listado de esta función es:


function []=autocor(x)

% INTRODUCCIÓN DE PARÁMEROS
tau=input('Número máximo de desplazamientos? ');
while tau<0,
tau=input('El número de desplazamientos debe ser mayor que cero:
');
end

% CÁLCULO DE LA AUTOCORRELACIÓN
if (tau>length(x)) % Limito el valor máximo 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 SEÑAL RESULTANTE


eje_tiempos=-tau:tau;
plot(eje_tiempos,auto);
title('Autocorrelacion de la señal');
ylabel('Potencia (W)');
xlabel('desplazamiento (muestras)');
zoom;pause;close;

Curso 2007/8 9

También podría gustarte