You are on page 1of 6

Procesamiento Digital de Seales, 1

PRACTICA 1

Iniciacin a Matlab/Octave.
Objetivos.
Adquisicin de la habilidad mnima para la realizacin de prcticas de
procesamiento digital de seales mediante el programa matemtico
Matlab/Octave.
Informacin previa.
1. Matlab es un programa comercial muy difundido para su aplicacin en el
mbito de la ingeniera. No es un programa libre ni gratuito, pero hay
otros programas clnicos como Octave que son pueden ejecutar el
cdigo fuente de Matlab, si bien con algunas limitaciones. En su
utilizacin ms bsica, ambos programas son equivalentes; pero
teniendo en cuenta su gratuidad, las prcticas de la asignatura se
realizarn con la versin de Octave.
2. Matlab es un intrprete. Esto significa que ejecuta los comandos al
tiempo que se van introduciendo. Improvisar comandos sobre la marcha
no es la forma ms conveniente de hacer trabajos serios con Matlab
porque dificulta la correccin de errores y la depuracin del cdigo.
3. La forma acostumbrada de trabajar con Matlab es escribir las
secuencias de comandos que en conjunto constituyen un programa en
un fichero de texto plano, pudindose editar fcilmente. Para que estos
ficheros de comandos puedan ser ejecutados por el intrprete es
necesario que se encuentren en algn directorio especfico y que tengan
la extensin .m
4. Concretamente, los ficheros .m deben ser grabados en el directorio
octave_files que se encuentra en el directorio de instalacin de Octave.
5. Matlab solo tiene un tipo de datos que son los nmeros en coma flotante
y un conjunto bsico de comandos para realizar asignaciones,
estructuras de control y representaciones grficas. Aparte de este ncleo
bsico, Matlab se ha enriquecido con las aportaciones de muchos
usuarios que lo han utilizado en diversos campos de aplicacin y han
distribuido libremente su cdigo. Las distribuciones de Matlab y Octave
contienen libreras de DSP cuyas funciones se utilizarn en las
prcticas.
6. Norma general para la realizacin de las prcticas. En un editor de
texto plano (por ejemplo, notepad) cree un fichero de nombre prxx.m
donde xx es el nmero de la prctica y grbelo en el directorio
octave_files. Escriba los comandos correspondientes al primer apartado
y vuelva a grabar el fichero. Invoque el fichero desde el intrprete
tecleando prxx [ENTER]. Si el resultado no es el correcto, corrija los
errores en el editor y repita la operacin. Contine de forma similar con
el resto de los apartados. Los comandos cuya ejecucin quiera evitar en
las sucesivas repeticiones pueden ser desactivados escribiendo el
carcter # al principio de la lnea correspondiente.
7. Presentacin de resultados. En general, se guardarn en un directorio
los ficheros de cdigo fuente correspondientes a los ejercicios
propuestos en cada prctica.

Procesamiento Digital de Seales, 2

Procedimiento.
1. Arranque el programa Octave y un editor de texto plano (Notepad). En lo
sucesivo, siga la norma indicada en el punto 6 anterior.
2. Se desea generar y representar grficamente una seal senoidal de
amplitud 1 y frecuencia 200 Hz, muestreada a 1 kHz en los ndices
comprendidos entre n=0 y n=9.
# PRACTICA 1
# Nombre y apellidos. Fecha.
# Seccin 2. Generacin de una senoide ---------------------# asignacion de valores a los parametros de la seal
a=1.0;
frq=200.0;
fs=1e3;
n=0:9;

#
#
#
#
#

# la seal es

amplitud
frecuencia
frecuencia de muestreo
n es un vector de nmeros entre 0 y 9.
n = 0 1 2 3 4 5 6 7 8 9

x[n] = x(n * Ts)

x = a * cos(2 * pi * frq * n * (1.0/fs));


# se genera y calcula el vector x

3. Grabe y ejecute el fichero. Si teclea en el intrprete el nombre de


cualquier variable (como n, x, frq, etc.) obtendr su valor numrico.
4. Para obtener el valor de un solo elemento del array:
>> n(3)
>> x(3)
Importante: Observe que en Matlab el primer elemento tiene ndice 1, no ndice 0
como en otros lenguajes de programacin.

5. Representacin grfica. Escriba este cdigo a continuacin del anterior:


# representacin grfica
subplot(111);
columna,

# pantalla grafica subdividida en 1 fila, 1

x[n]

# se selecciona el subgrafico 1.
clearplot;
# se borra el grafico
title('Grfica de una senoide');
# titulo del grafico
xlabel('n');
# titulo del eje x
ylabel('x[n]');
# titulo del eje y
plot(n,x,'^');
# traza el vector x frente a n
# ^ indica el tipo de grafico "stem"
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

Grfica de una senoide

line 1

Procesamiento Digital de Seales, 3

6. Repita el ejercicio con una frecuencia de la seal de 1.2kHz


Basta cambiar el valor de frq. (frq=1200.0).
7. Habr observado que las seales discretas obtenidas mediante el
muestreo a 1kHz de las seales analgicas anteriores (200 Hz y 1200
Hz) son iguales. Esto se puede comprobar generando ambas seales y
superponiendo sus representaciones grficas.
# PRACTICA 1
# Pedro J. Morales Glvez. Septiembre, 04
# Seccin 7. Aliasing ---------------------# asignacion de valores a los parametros de las seales
# Seal 1
a1
= 1.0;
frq1 = 200.0;
# Seal 2
a2
= 1.0;
frq2 = 1200.0;

fs=1e3;
n=0:9;

# frecuencia de muestreo

x1 = a1 * cos(2 * pi * frq1 * n * (1.0/fs));


x2 = a2 * cos(2 * pi * frq2 * n * (1.0/fs));

# seal 1
#
2

# representacin grfica
subplot(111);
clearplot;
title('Aliasing');
xlabel('n');
ylabel('x1,x2');
plot(n,x1,'o',n,x2,'+');

8. Se puede observar el efecto de solapamiento si se superponen la


seales continuas:
# PRACTICA 1
# Pedro J. Morales Glvez. Septiembre, 04
# Seccin 8. Aliasing ---------------------n = 0:9;
t = 0:0.1:9;

# rango de las seales discretas


# rango de la seal pseudo continua
# (realmente es una seal discreta con mayor
# resolucin)

# asignacion de valores a los parametros de las seales


# Seal 1

Procesamiento Digital de Seales, 4

a1
= 1.0;
frq1 = 200.0;
# Seal 2
a2
= 1.0;
frq2 = 1200.0;
fs=1e3;

# frecuencia de muestreo

xa1 = a1*cos(2*pi*frq1*t*(1.0/fs));
xa2 = a2*cos(2*pi*frq2*t*(1.0/fs));

# seal pseudocontinua 1
#
2

xd1 = a1*cos(2*pi*frq1*n*(1.0/fs));
xd2 = a2*cos(2*pi*frq2*n*(1.0/fs));

# seal discreta 1
#
2

# representacin grfica
subplot(111);
clearplot;
title('Aliasing');
xlabel('n');
ylabel('xa1,xa2,xd1,xd2');
plot(t,xa1,'k-',t,xa2,'k:',n,xd1,'ko',n,xd2,'k+');

Aliasing

xa1,xa2,xd1,xd2

line 1
line 2
line 3
line 4

0.5
0

-0.5
-1

9. Generacin de una seal cuadrada.


Las funciones en Matlab se escriben en ficheros independientes. El
nombre de la funcin debe ser el mismo que el nombre del fichero.
Grabe este fichero con el nombre fcuadrada.m y consrvelo para futuras
referencias.
# PRACTICA 1
# Pedro J. Morales Glvez. Septiembre, 04
# Seccin 9. Seal cuadrada ---------------------# implementacion poco eficiente; pero funciona.
function valor=fcuadrada (frq,fs,t)
valor=-1.0;
if (sin(2*pi*frq*t/fs) > 0)
valor = 1.0;

Procesamiento Digital de Seales, 5

endif
endfunction

Invoque la funcin fcuadrada desde el intrprete y compruebe que


funciona correctamente.
Ejercicio. Genere una seal cuadrada de 1000 puntos con frecuencia de
150 Hz y muestreada a 1000 Hz. Represntela grficamente.
10. Ejercicio. Muestree la seal exponencial real x(t)=5 exp(-0.1 t) u(t)
Entre t=0 y t=4 con un periodo de muestreo Ts=0.1s. Represente
grficamente la seal muestreada.
11. Los nmeros complejos se representan en Matlab en forma binmica o
en forma exponencial.
Forma binmica: 3+2j
Forma exponencial: 5*exp(pi/4*j)
Las partes real e imaginaria de un complejo se obtienen mediante las
funciones real e imag.
El mdulo y el argumento se obtienen mediante las funciones abs y
angle.
Ejercicio. Genere una seal compleja de mdulo 3 y argumento 2 pi 50 t
Muestree entre t=0 y t=60ms con un periodo de muestreo Ts=0.5ms.
a. Represente grficamente la seal muestreada en forma binmica.
b. Id. en forma polar.
12. Ejercicio. Genere y represente grficamente la funcin impulso entre
n=-4 y n=4.
13. Ejercicio. Genere y represente grficamente la funcin escaln entre
n=-4 y n=4.
14. Cuantificacin. La siguiente funcin realiza la cuantificacin de una
seal de entrada:
# PRACTICA 1
# Pedro J. Morales Glvez. Septiembre, 04
# Seccin 14. Cuantificacin ---------------------# x
# b
# m
#

entrada
nmero de bits
rango de la seal [-m +m]
(cuantificacin por redondeo)

function valor=fcuanti (x,b,m)


resol = 2*m/(2^b-1);
nivel = x/resol;
nivel = round(nivel);
valor = nivel * resol;
endfunction

Implemente esta funcin en Matlab y compruebe que funciona


correctamente.

Procesamiento Digital de Seales, 6

15. Efecto de la cuantizacin. Genere una seal compuesta por la suma


de estas tres componentes senoidales:
Componente 1
Componente 2
Componente 3

Amplitud
1.0
0.6
0.3

Frecuencia
50
75
150

Genere tres seales discretas muestreando esta seal con una frecuencia
de 1kHz, un rango entre 2 y +2 y con una resolucin de 3, 4 y 8 bits.
o Represente grficamente la seal analgica
muestreada con una resolucin de 3 bits.
o Id. con una resolucin de 4 bits.
o Id. con una resolucin de 8 bits.

la

seal

Puede considerarse que la seal muestreada con resolucin infinita es


igual a la suma de la seal muestreada con resolucin finita ms una
seal de ruido cuyo valor disminuye conforme aumenta la resolucin.

Represente la seal de ruido con una resolucin de 3 bits.


Id. con 4 bits.
Id. con 8 bits.
Cul es la relacin entre el valor pico a pico del ruido y la
resolucin?

Presentacin de resultados.
Segn las instrucciones generales.
.

You might also like