Sunteți pe pagina 1din 9

UNIVERSIDAD DE CUENCA

FACULTAD DE INGENIERA
ESCUELA DE ELECTRNICA Y TELECOMUNICACIONES

LABORATORIO DE PROCESAMIENTO DIGITAL DE SEALES

PRCTICA N 1

SEALES Y SISTEMAS EN MATLAB

AUTOR:
Jonathan Mauricio Blandn Segarra

DOCENTE:
Ing. Ismael Minchala Avila, Ph.D.

Cuenca Ecuador
Septiembre 2016

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Operaciones fundamentales con seales


Utilizando MATLAB, definir las tres seales bsicas.
[ ]

Cdigo en MATLAB:
function [x,n] = unitimpulse(n0,n1,n2)
% Generates x(n) = delta(n-n0); n1 <= n <= n2
% ---------------------------------------------% [x,n] = unitimpulse(n0,n1,n2)
%
n = [n1:n2]; x = [(n-n0) == 0];
stem(n,x,'filled','LineWidth',2);
title('UnitImpulse[n]');
%hold on;
end

Fig. 1. Seal impulso unitario sin desplazamiento y muestras de -5 a 10.

Para esta seal se ha creado una funcin unitimpulse(n0,n1,n2), en la que n0 es


el desplazamiento. Se dispondr de un vector n, el mismo que tiene como lmites
inferior y superior a n1 y n2 respectivamente. Para nuestro clculo vamos a
producir un vector x el mismo que ser uno cuando la resta entre el vector de
muestras y el desplazamiento sea igual a cero ([(n-n0) == 0]).

Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Para la graficacin contamos con el comando stem, que se encarga de graficar


funciones discretas; para nuestro ejemplo tenemos parmetros como: n, que es
nmero de muestras que tiene nuestra seal; x, es el valor de la seal evaluado en
la muestra correspondiente; filled, es un parmetro de MATLAB para rellenar
los puntos de las muestras de un color; LineWidth, es un parmetro interno que
nos sirve para trazar lneas con mayor ancho, para nuestro caso lo hemos definido
con 2. Para poner ttulos, nos hemos apoyado en el comando title.
[ ]
Cdigo en MATLAB:
function [x,n] = unitstep(n0,n1,n2)
% Generates x(n) = u(n-n0); n1 <= n <= n2
% -----------------------------------------% [x,n] = stepseq(n0,n1,n2)
%
n = [n1:n2]; x = [(n-n0) >= 0];
stem(n,x,'filled','LineWidth',2);
title('UnitStep[n]');
%hold on;
end

Fig. 2. Seal escaln unitario sin desplazamiento y muestras de -5 a 10.

Para esta seal se ha creado una funcin unitstep(n0,n1,n2), en la que n0 es el


desplazamiento. Se dispondr de un vector n, el mismo que tiene como lmites
inferior y superior a n1 y n2 respectivamente. Para nuestro clculo vamos a
producir un vector x el mismo que ser uno cuando la resta entre el vector de
muestras y el desplazamiento sea igual a cero ([(n-n0) >= 0]).

Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

De igual manera que el ejemplo anterior, se ha ocupado el comando stem con


todos sus parmetros para poder graficar nuestra seal.
[ ]

Cdigo en MATLAB:
function [x,n] = ramp(n0,n1,n2)
% Generates x(n) = u(n-n0); n1 <= n <= n2
% -----------------------------------------% [x,n] = stepseq(n0,n1,n2)
%
n = [n1:n2]; x = [(n-n0) >= 0].*(n-n0);
stem(n,x,'filled','LineWidth',2);
title('Ramp[n]');
%hold on;
end

Fig. 3. Seal rampa con desplazamiento 0 y muestras de -5 a 10.

Para esta seal de manera anloga se ha creado una funcin ramp(n0,n1,n2), en


la que los parmetros realizan el mismo trabajo que en las anteriores seales. Para
nuestro clculo vamos a producir un vector x el mismo que ser la multiplicacin
de un escaln unitario con una constante proporcional al desplazamiento, esta
combinacin formar una seal con un aumento proporcional y pendiente igual a
uno. ([(n-n0) >= 0].*(n-n0)).
De igual manera que los ejemplos anteriores, se ha ocupado el comando stem
con todos sus parmetros para poder graficar nuestra seal.

Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Realice la operacin de la siguiente ecuacin y muestre los


resultados a travs de una grfica.
[ ]

[ ]

Ejecucin en MATLAB:
>>
>>
>>
>>
>>
>>
>>

y1 = unitstep(0,-10,10);
y2 = ramp(2,-10,10);
y3 = unitstep(5,-10,10);
y4 = (heaviside(-n/2+3).*(-n/2+3));
n = -10:10;
y=y1.*y2-y3.*y4;
stem (n, y, 'filled', 'LineWidth', 2)

Fig. 4. Resolucin del problema inicial mediante partes.

Para generar la seal se ha basado en las funciones creadas anteriormente y se ha


trabajado por partes para poder ir comprobando la validez tanto de las seales
generadas como de la seal final. En la primera funcin se ha graficado un
impulso unitario con desplazamiento cero; unitstep(0,-10,10).
Para la segunda funcin se ha graficado una rampa con desplazamiento en
adelanto de dos; ramp(2,-10,10). Para la tercera funcin se ha graficado un
escaln desplazado cinco unidades hacia la derecha; unitstep(5,-10,10).
La ltima funcin es una rampa la cual est formada con una inversin, un
escalamiento y un desplazamiento en el tiempo. Para esta ltima funcin, debido a
Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

su grado de complejidad al implementarlo, se ha optado por utilizar una funcin


propia de MATLAB como lo es heaviside(x), la cual emula las caractersticas de
un escaln unitario. Esta funcin multiplicada con un valor proporcional a su
desplazamiento produce una funcin rampa (heaviside(-n/2+3).*(-n/2+3)).
Las operaciones solicitadas con estas funciones generan la seal final y[n] que
es igual a y1.*y2-y3.*y4.

Fig. 5. Resultado de la expresin y[n]=u[n]r[n-2]-u[n-5]r[-n/2+3].

De igual manera que los ejemplos anteriores, se ha ocupado el comando stem


con todos sus parmetros para poder graficar nuestra seal; stem (n, y, 'filled',
'LineWidth', 2).

Analice y comente los resultados obtenidos. Emita un reporte de la


prctica.
Mediante los conceptos bsicos de las seales bsicas tratadas anteriormente, se
ha podido emplear un algoritmo que describa a las mismas al darle parmetros de
entrada como: desplazamiento, lmite inferior y lmite superior. Al implementar
estas seales a partir de funciones en MATLAB, se las ha podido utilizar
posteriormente para poder formar seales ms complejas con tan solo llamar a las
funciones y haciendo operaciones matemticas con ellas para poder resolver el
punto anterior de una manera ms simple, ahorrando cdigo y tiempo.
Los resultados se los ha visualizado grficamente haciendo vlido el trabajo
realizado y en el punto anterior se ha tratado de dividir toda la expresin para ir
comprobando paso a paso que el resultado final y su grfica son correctas.
Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Filtro de promedio mvil


Adquiere una seal de audio en MATLAB utilizando el micrfono
integrado del computador. El tiempo de grabacin es de 1 segundo.
Cdigo en MATLAB:
recObj = audiorecorder
disp('Hable Ahora')
recordblocking(recObj, 0.5);
disp('Fin de grabacin!');
play(recObj);
x=getaudiodata(recObj);

%Invocation audio input


%Audio rec 0.5 sec
%Play audio
%Samples

Implemente un sistema de promedio mvil y filtre la seal de audio.


El algoritmo de filtro de promedio mvil es:

[ ]

Dnde:
M, es el nmero de muestras en un tiempo n de la seal grabada.
N, es el nmero de muestras en las que est dividido el tiempo de la seal
grabada.
K, es la variable que trata de hacer el barrido de la seal para obtener un
promedio.
x[n], es la seal de entrada desde un transductor, en nuestro caso un micrfono.
y[n], es la seal filtrada, basada en el algoritmo y en los parmetros anteriores.
Cdigo en MATLAB:
M=10;
for i=16:4000
for k=0:M
y(i)=1/(M+1)*sum(x(i-k));
end
end

En esta parte del cdigo se realiza el filtro de promedio mvil, para lo cual se
recurre a bucles anidados para que hagan el barrido de n y de k con un nmero de
muestras M con cada n igual a 10.

Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Muestre los resultados a travs de una grfica.


n=16:4015;
subplot(2,2,[1,2]);
plot(x,'g');
hold on;
plot(n,y,'b');
title('Subplot 1: Original con filtrada')
subplot(2,2,3);
plot(x,'g');
title('Subplot 2: Seal Original')
subplot(2,2,4);
plot(n,y,'b');
title('Subplot 3: Seal Filtrada')

Fig. 6. Visualizacin de la seal original y filtrada de la palabra "hola" desde MATLAB, con una grabacin de 0.5
segundos (4000 puntos).

Se ha logrado mostrar las seales por separado y juntas mediante el comando


subplot, que nos ayuda a ordenar las grficas en filas y columnas con sus
parmetros de entrada que son (m,n,p); donde, m, es el nmero de filas; n, es el
nmero de columnas y p, es la posicin dentro del vector o matriz que se quiera
ocupar. Para nuestro caso creamos una matriz de 2x2, en la cual las posiciones 1 y
2 (primera fila), se las asign para la seal original junto con la filtrada, la
posicin 3 (fila 2, columna 1), es para la seal original y la posicin 4 (fila 2,
columna 2), es para la seal filtrada.
Las seales obtenidas son graficadas continuamente a diferencia de las seales
discretas del anterior punto; motivo por el cual se ha ocupado el comando plot que
realiza dicha funcin y para nuestro caso hemos ocupado los siguientes
parmetros: n, es el nmero de muestra, y, es el valor de la seal en la muestra y
b, es el color (blue) con el que vamos a mostrar la seal.

Universidad de Cuenca | Electrnica y Telecomunicaciones

30 de septiembre de 2016

[SEALES Y SISTEMAS EN MATLAB]

Analice y comente los resultados. Emita un reporte de la prctica.


El algoritmo es sencillo pero eficiente, lo que hace es tomar un nmero de
muestras M en cada tiempo n del intervalo de la seal original, para luego de
tomar esas muestras poder sacar un promedio y almacenarlas en un nuevo vector,
cuyo vector ser conformado con los datos de nuestra seal filtrada, que
claramente se observa que se han eliminado los picos, creando una seal ms
alisada y con mucho menos ruido.

Universidad de Cuenca | Electrnica y Telecomunicaciones

S-ar putea să vă placă și