Está en la página 1de 9

UNIVERSIDAD DE CUENCA

FACULTAD DE INGENIERÍA

ESCUELA DE ELECTRÓNICA Y TELECOMUNICACIONES

DE INGENIERÍA ESCUELA DE ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE PROCESAMIENTO DIGITAL DE SEÑALES PRÁCTICA

LABORATORIO DE PROCESAMIENTO DIGITAL DE SEÑALES

PRÁCTICA Nº 1

SEÑALES Y SISTEMAS EN MATLAB

AUTOR:

Jonathan Mauricio Blandín Segarra

DOCENTE:

Ing. Ismael Minchala Avila, Ph.D.

Cuenca Ecuador Septiembre 2016

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Operaciones fundamentales con señales

Utilizando MATLAB, definir las tres señales básicas.

Código 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

,2); title( 'UnitImpulse[n]' ); %hold on; end Fig. 1. Señal impulso unitario sin desplazamiento y

Fig. 1. Señal impulso unitario sin desplazamiento y muestras de -5 a 10.

Para esta señal se ha creado una función unitimpulse(n0,n1,n2), en la que n0 es el desplazamiento. Se dispondrá de un vector n, el mismo que tiene como límites inferior y superior a n1 y n2 respectivamente. Para nuestro cálculo 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 | Electrónica y Telecomunicaciones

2

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Para la graficación contamos con el comando stem, que se encarga de graficar funciones discretas; para nuestro ejemplo tenemos parámetros como: n, que es número de muestras que tiene nuestra señal; x, es el valor de la señal evaluado en la muestra correspondiente; ‘filled’, es un parámetro de MATLAB para rellenar los puntos de las muestras de un color; ‘LineWidth’, es un parámetro interno que nos sirve para trazar líneas con mayor ancho, para nuestro caso lo hemos definido con 2. Para poner títulos, nos hemos apoyado en el comando title.

Código 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

,2); title( 'UnitStep[n]' ); %hold on; end Fig. 2. Señal escalón unitario sin desplazamiento y

Fig. 2. Señal escalón unitario sin desplazamiento y muestras de -5 a 10.

Para esta señal se ha creado una función unitstep(n0,n1,n2), en la que n0 es el desplazamiento. Se dispondrá de un vector n, el mismo que tiene como límites inferior y superior a n1 y n2 respectivamente. Para nuestro cálculo 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 | Electrónica y Telecomunicaciones

3

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

De igual manera que el ejemplo anterior, se ha ocupado el comando stem con todos sus parámetros para poder graficar nuestra señal.

Código 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

,2); title( 'Ramp[n]' ); %hold on; end Fig. 3. Señal rampa con desplazamiento 0 y muestras

Fig. 3. Señal rampa con desplazamiento 0 y muestras de -5 a 10.

Para esta señal de manera análoga se ha creado una función ramp(n0,n1,n2), en la que los parámetros realizan el mismo trabajo que en las anteriores señales. Para nuestro cálculo vamos a producir un vector x el mismo que será la multiplicación de un escalón unitario con una constante proporcional al desplazamiento, esta combinación formará una señal 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 parámetros para poder graficar nuestra señal.

Universidad de Cuenca | Electrónica y Telecomunicaciones

4

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Realice la operación de la siguiente ecuación y muestre los resultados a través de una gráfica.

[

]

[

]

[

Ejecución 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)

stem (n, y, 'filled', 'LineWidth', 2) Fig. 4. Resolución del problema inicial mediante partes.
stem (n, y, 'filled', 'LineWidth', 2) Fig. 4. Resolución del problema inicial mediante partes.

Fig. 4. Resolución del problema inicial mediante partes.

Para generar la señal se ha basado en las funciones creadas anteriormente y se ha trabajado por partes para poder ir comprobando la validez tanto de las señales generadas como de la señal final. En la primera función se ha graficado un impulso unitario con desplazamiento cero; unitstep(0,-10,10).

Para la segunda función se ha graficado una rampa con desplazamiento en adelanto de dos; ramp(2,-10,10). Para la tercera función se ha graficado un escalón desplazado cinco unidades hacia la derecha; unitstep(5,-10,10).

La última función es una rampa la cual está formada con una inversión, un escalamiento y un desplazamiento en el tiempo. Para esta última función, debido a

Universidad de Cuenca | Electrónica y Telecomunicaciones

5

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

su grado de complejidad al implementarlo, se ha optado por utilizar una función propia de MATLAB como lo es heaviside(x), la cual emula las características de un escalón unitario. Esta función multiplicada con un valor proporcional a su desplazamiento produce una función rampa (heaviside(-n/2+3).*(-n/2+3)).

Las operaciones solicitadas con estas funciones generan la señal final y[n] que es igual a y1.*y2-y3.*y4.

la señal final y[n] que es igual a y1.*y2-y3.*y4 . Fig. 5. Resultado de la expresión

Fig. 5. Resultado de la expresión 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 parámetros para poder graficar nuestra señal; stem (n, y, 'filled', 'LineWidth', 2).

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

Mediante los conceptos básicos de las señales básicas tratadas anteriormente, se ha podido emplear un algoritmo que describa a las mismas al darle parámetros de entrada como: desplazamiento, límite inferior y límite superior. Al implementar estas señales a partir de funciones en MATLAB, se las ha podido utilizar posteriormente para poder formar señales más complejas con tan solo llamar a las funciones y haciendo operaciones matemáticas con ellas para poder resolver el punto anterior de una manera más simple, ahorrando código y tiempo.

Los resultados se los ha visualizado gráficamente haciendo válido el trabajo realizado y en el punto anterior se ha tratado de dividir toda la expresión para ir comprobando paso a paso que el resultado final y su gráfica son correctas.

Universidad de Cuenca | Electrónica y Telecomunicaciones

6

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Filtro de promedio móvil

Adquiere una señal de audio en MATLAB utilizando el micrófono integrado del computador. El tiempo de grabación es de 1 segundo.

Código en MATLAB:

recObj = audiorecorder disp('Hable Ahora') recordblocking(recObj, 0.5); disp('Fin de grabación!'); play(recObj);

x=getaudiodata(recObj); %Samples

%Invocation audio input

%Audio rec 0.5 sec

%Play audio

Implemente un sistema de promedio móvil y filtre la señal de audio. El algoritmo de filtro de promedio móvil es:

Dónde:

[

]

[

]

M, es el número de muestras en un tiempo n de la señal grabada. N, es el número de muestras en las que está dividido el tiempo de la señal grabada. K, es la variable que trata de hacer el barrido de la señal para obtener un promedio. x[n], es la señal de entrada desde un transductor, en nuestro caso un micrófono. y[n], es la señal filtrada, basada en el algoritmo y en los parámetros anteriores.

Código 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 código se realiza el filtro de promedio móvil, para lo cual se recurre a bucles anidados para que hagan el barrido de n y de k con un número de muestras M con cada n igual a 10.

Universidad de Cuenca | Electrónica y Telecomunicaciones

7

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Muestre los resultados a través de una gráfica.

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: Señal Original')

subplot(2,2,4);

plot(n,y,'b'); title('Subplot 3: Señal Filtrada')

'b' ); title( 'Subplot 3: Señal Filtrada' ) Fig. 6. Visualización de la señal original y

Fig. 6. Visualización de la señal original y filtrada de la palabra "hola" desde MATLAB, con una grabación de 0.5 segundos (4000 puntos).

Se ha logrado mostrar las señales por separado y juntas mediante el comando subplot, que nos ayuda a ordenar las gráficas en filas y columnas con sus parámetros de entrada que son (m,n,p); donde, m, es el número de filas; n, es el número de columnas y p, es la posición 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 señal original junto con la filtrada, la posición 3 (fila 2, columna 1), es para la señal original y la posición 4 (fila 2, columna 2), es para la señal filtrada.

Las señales obtenidas son graficadas continuamente a diferencia de las señales discretas del anterior punto; motivo por el cual se ha ocupado el comando plot que realiza dicha función y para nuestro caso hemos ocupado los siguientes parámetros: n, es el número de muestra, y, es el valor de la señal en la muestra y b, es el color (blue) con el que vamos a mostrar la señal.

Universidad de Cuenca | Electrónica y Telecomunicaciones

8

30 de septiembre de 2016

[SEÑALES Y SISTEMAS EN MATLAB]

Analice y comente los resultados. Emita un reporte de la práctica.

El algoritmo es sencillo pero eficiente, lo que hace es tomar un número de muestras M en cada tiempo n del intervalo de la señal 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 señal filtrada, que claramente se observa que se han eliminado los picos, creando una señal más alisada y con mucho menos ruido.

Universidad de Cuenca | Electrónica y Telecomunicaciones

9