Está en la página 1de 19

------------------------------------------------------------------------------------------------------------------------------------------------

Practica 1b: Sistemas Discretos

Objetivos:
• Implementar el algoritmo de la convolucion e utilizarlo para realizar procesamiento de señales de audio.

Implemente en Matlab el algoritmo de la convolucion en tiempo discreto. Puede tomar como referencia el capıtulo 6
de la referencia [1].

CODIGO:

%%Convolucion_Mio
%%Carlos Guerrero
%%Universidad de Cuenca
function y_n =myconvolucion(x0,h0)
x_l = length(x0);
h_l = length(h0);
x_a = [x0, zeros(1,h_l)] %igualacion de matrices para
h_a=[h0,zeros(1,x_l)] %que x y h sean del mismo tamano llenando de ceros

for i =1: x_l+h_l-1 %% Numero de nuestras convolucion
y(i) = 0; %% Vector de salida lleno de ceros
for j=1:x_l %% Sumatoria desde 1 hasta la longitud de x o de h
if(i - j+1> 0) %% Se inicia un acumulador para cada n sumando solo si i-j+1
es >0
y(i) = y(i) + x_a(j)*h_a(i -j+1);
convolucion(i) = y(i);
else
end
end
end
y_n=convolucion

Explicación del Algoritmo:

1. La función myconvolucion tiene dos parámetros de ingreso x0 y h0, los cuales son los vectores de x y h
respectivamente.
2. Luego se obtiene la longitud de los vectores x y h.
3. Se procede a igualar la longitud de ambas matrices, llenado de ceros las posiciones faltantes.
4. El primer for nos da el número de muestras de la convolucion que de acuerdo a la literatura es la longitud de
x más la longitud de h menos 1.
5. Se le llena de ceros a la variable de salida y en nuestro caso
6. El siguiente for ira desde 1 hasta la longitud de x, debido a que Matlab no evalúa los vectores en posiciones
menores o iguales a 0, se le agrega un if donde (i-j+1) debe ser mayor a cero, así se asegura no tener
números negativos.
7. Se declara la fórmula de la convolucion y(n)=x(k)h(n-k) en el código y(i)=x(j)h(i-j+1)
8. Se declara una variable convolucion dependiente de i, así se ira sumando de forma iterativa.
9. Al final se devuelve en la variable y_n, y así se termina la función.

Prueba del Código:

en el dominio del tiempo . Procesamiento de Audio Para cada una de las respuestas al impulso elegidas usted debería graficar en el dominio del tiempo y en el dominio de la frecuencia lo siguiente: 1. 1.2. La señales de audio correspondiente a la entrada x[n]. en el dominio del tiempo y en dominio de la Frecuencia Figure 1 Señal de audio correspondiente a la entrada x[n].

Figure 2 Señal de audio correspondiente a la entrada x[n] en Frecuencia En las Figure 1 y 2 se puede evidenciar la señal de ingreso tanto en tiempo como en frecuencia respectivamente en este caso la señal es un audio llamado Celos.4 -0.2 0 -0. La señales de audio correspondiente a la respuesta al impulso h1 [n] y h2 [n]. tanto en el dominio de tiempo y Frecuencia.4 0. Grafica de h1[n] 0.8 0.6 0.wav 2.2 -0.8 0 1 2 3 4 5 6 7 8 9 4 x 10 Figure 3 Respuesta al impulso h1[n] en el dominio del Tiempo .6 -0.

5 3 3.wav tanto en el tiempo como en frecuencia Grafica de h2[n] 1 0.8 0.4 -0.5 4 4.5 1 1.6 0 0. Grafica de H1(w) 30 25 20 15 10 5 0 -4 -3 -2 -1 0 1 2 3 4 Figure 4 Respuesta al impulso h1[n] en el dominio de la frecuencia En la figure 3 y 4 se observa la respuesta al impulso de la señal de audio Rays.2 0 -0.5 5 4 x 10 Figure 5 Figure 6 Respuesta al impulso h2[n] en el dominio del Tiempo .2 -0.5 2 2.6 0.4 0.

con los dos impulsos tanto en el tiempo como en frecuencia.wav tanto en el tiempo como en frecuencia 3. Figure 7 Grafica de convolucion x[n]*h1[n] en el dominio del Tiempo . La señales de audio correspondiente a la salidas del sistema y[n] = x[n] ∗ h[n]. Grafica de H2(w) 25 20 15 10 5 0 -4 -3 -2 -1 0 1 2 3 4 Figure 6 Respuesta al impulso h1[n] en el dominio de la frecuencia En la figure 5 se observa la respuesta al impulso número dos de una señal de audio Trig Room.

además la señal tiene una duración más larga en donde en el último tramo decrece casi hasta cero. 4. Como se modificó la señal en el dominio del tiempo? La señal se elevó en ganancia de 0. además la señal presente un aumento de volumen. 4 x 10 Grafica de Convolucion x(n)*h1(n) en Frecuencia 4 3.5 0 -4 -3 -2 -1 0 1 2 3 4 Figure 8 Grafica de convolucion x[n]*h1[n] en el dominio de la frecuencia. Según la teoría la longitud de la convolucion debe ser longitud de x(n) más la longitud de h(n) menos uno. tanto en tiempo como en frecuencia. luego se procedió a hacer la convolucion con la función conv pasándole como parámetro los vectores x[n].5 3 2. Cuáles son las longitudes de las secuencias: x[n].5 a 4. 2. pero se puede evidenciar que tiene la misma duración de –pi a pi. El código de Matlab se lo puede revisar al final de este tema. Las Figure 8 y 9 muestra la convolucion entre la señal x[n] y h1[n].h1[n] y h2[n].5 2 1.5 1 0. 1. lon_x_n = 320493 muestras lon_h_1_n = 87635 muestras Por lo tanto la longitud de y1(n) teoría es 320493+87635 -1 dándonos 408127 muestras Comparando con Matlab nos da: . Como se modificó la señal en el dominio de la frecuencia? Se modifico ganancia de la misma además parece haber más ceros en las muestras. cabe destacar que las señales x[n]. h[n] y y[n] = x[n] ∗ h[n] ? Escriba los cálculos correspondientes que justifiquen el porqué de la longitud de y[n]. En matlab se procedió a calcular la longitud total de las señales.h1[n] y h2[n] se muestrearon con la función audioread de Matlab. 3. luego se procedió a graficar las mismas. Cuál es su percepción de la variación del sonido original luego de haber pasado por el sistema con la respuesta al impulso h[n]? A la señal le ingresa ruido que se escucha claramente al fondo de la misma.

Las Figure 10 y 11 muestran las gráficas de las convolucion entre x[n] y h2[n]. Figure 9 Grafica de convolucion x[n]*h2[n] en el dominio del Tiempo 4 x 10 Grafica de Convolucion x(n)*h2(n) en Frecuencia 4 3. . y luego a grafica tanto en el tiempo como en frecuencia.5 3 2.5 0 -4 -3 -2 -1 0 1 2 3 4 Figure 10 Grafica de convolucion x[n]*h2[n] en el dominio de la frecuencia.5 2 1.Con lo que se concuerda que la longitud de y(n) es la misma tanto de forma teoría como experimental. Se puede evidenciar que en el dominio de la frecuencia la señal no difiere mucho de la señal de ingreso x[n].5 1 0. así mismo se muestrearon las señales descritas con audioread y se procedió a convolucionar con conv.

h_2 = h2(:.2 Audios close all clear all clc %load handel %Read stereo audio file %%Primero la x[n] [x.Fs]=audioread('CelloS. %pause(3) %%********************Grafico de x1(n)*************** . En Matlab se procedió a calcular la longitud total de las señales. lon_x_n = 320493 muestras lon_h_2_n = 46338 muestras Por lo tanto la longitud de y1(n) teoría es 320493+46338 -1 dándonos 366830 muestras.Fs2]=audioread('Trig Room. h[n] y y[n] = x[n] ∗ h[n] ? Escriba los cálculos correspondientes que justifiquen el porqué de la longitud de y[n]. Código en Matlab: %%Universidad de Cuenca %%Carlos Guerrero %%1.2). sound(y_n_1.2). h_1 = h1(:. %%Primer Impulso [h1. %%Primera convolucion pause(5) y_n_1= conv(x1. Comparando con Matlab nos da: Como se aprecia teóricamente y experimentalmente se obtiene el mismo número de muestras. Cuáles son las longitudes de las secuencias: x[n].wav').Como se modificó la señal en el dominio del tiempo? La señal se eleva en ganancia además se presentan más picos en la señal. Cuál es su percepción de la variación del sonido original luego de haber pasado por el sistema con la respuesta al impulso h[n]? Presenta ruido. %%Segundo Impulso [h2.Fs).h_1). %storing only one channel in x1: x1 = x(:. %playing audio file sound(x1.Fs1]=audioread('Rays.wav').2). su volumen aumento considerablemente.Fs). Como se modificó la señal en el dominio de la frecuencia? La señal tiene más amplitud pero tiene casi la misma forma de la original. Según la teoría la longitud de la convolucion debe ser longitud de x(n) más la longitud de h(n) menos uno.wav').

y_n_2=conv(x1. plot(-pi: 2*pi/length(X_w): pi-2*pi/length(X_w).X_w) title('Grafica de Convolucion x(n)*h1(n) en Frecuencia ') %%********************Grafico de Convolucion x(n)*h1(n)*************** figure(9) stem(y_n_2. 2) audio con ruido y 3) señal filtrada. plot(-pi: 2*pi/length(X_w): pi-2*pi/length(X_w). %%Grafica x(n) figure(1) stem(x1.'red') title('Grafica de x[n] ') %%*************Grafica X(w)******** figure(2) X_w = abs(fftshift(fft(x1))).X_w) title('Grafica de H1(w) ') %%********************Grafico de h2(n)*************** figure(5) stem(h_2.h_2).'black') title('Grafica de Convolucion x(n)*h2(n) ') %%********************Grafico de H2(w)*************** figure(10) X_w = abs(fftshift(fft(y_n_1))).X_w) title('Grafica de X(w) ') %%********************Grafico de h1(n)*************** figure(3) stem(h_1.'red') title('Grafica de h1[n] ') %%********************Grafico de H1(w)*************** figure(4) X_w = abs(fftshift(fft(h_1))). . plot(-pi: 2*pi/length(X_w): pi-2*pi/length(X_w). Moving Average Filter Visualice las tres señales en el dominio del tiempo: 1) audio.'red') title('Grafica de h2[n] ') %%********************Grafico de H2(w)*************** figure(6) X_w = abs(fftshift(fft(h_2))).3.X_w) title('Grafica de H2(w) ') %%********************Grafico de Convolucion x(n)*h1(n)*************** figure(7) stem(y_n_1. plot(-pi: 2*pi/length(X_w): pi-2*pi/length(X_w). plot(-pi: 2*pi/length(X_w): pi-2*pi/length(X_w).Fs).'black') title('Grafica de Convolucion x(n)*h1(n) ') %%********************Grafico de Convolucion x(n)*h1(n) en frecuencia*************** figure(8) X_w = abs(fftshift(fft(y_n_1))).X_w) title('Grafica de Convolucion x(n)*h2(n) en Frecuencia ') %%Calculo de la longitudes lon_x_n=length(x1) lon_h_1_n=length(h_1) lon_h_2_n=length(h_2) lon_y_n_1=length(y_n_1) lon_y_n_2=length(y_n_2) 1. pause(5) sound(y_n_2.

04 -0.2 0.3 -0.4 0 0. Senal de Audio 0. con atenuación de 0.1 0 -0.03 0.1 -0.3 0.2 -0.5 5 x 10 Figure 11 Señal de audio Gráfico de la señal de audio Celos.4 0.5 3 3.01 .5 1 1.5 5 x 10 Figure 12 Señal de Ruido Generación de la señal de ruido con la función randn con longitud de la señal Celos.5 2 2.02 0.01 -0.03 -0. Senal de Ruido 0.04 0.02 -0.01 0 -0.wav.wav realizada con la función audioread.5 0.5 1 1.5 3 3.05 0.05 0 0.5 2 2.

Grafica de la señal de Ruido sumada a la señal de ingreso x[n](Celos. . Figure 14 Señal Filtrada con ventana de 5 muestras. Grafica de la señal filtrada con el filtro de promedio móvil con una ventana de 5 muestras. Figure 13 Señal de audio con ruido. se puede notar una señal muy parecida a la original.wav).

Grafica de la señal filtrada con el filtro de promedio móvil con una ventana de 10 muestras. Grafica de la señal filtrada con el filtro de promedio móvil con una ventana de 20 muestras. se puede notar un pequeño decremento en la amplitud. Figure 15 Señal Filtrada con ventana de 10 muestras. Figure 16 Señal Filtrada con ventana de 20 muestras. pero es muy similar a la original. .

Figure 17 Señal Filtrada con ventana de 50 muestras. Figure 18 Señal Filtrada con ventana de 100 muestras. la de azul a la señal con ruido y la de color negro corresponde a la señal de ingreso. Grafica de la señal filtrada con el filtro de promedio móvil con una ventana de 100 muestras. Grafica de la señal filtrada con el filtro de promedio móvil con una ventana de 50 muestras. Para las siguientes graficas la señal de rojo corresponde a la filtrada. .

pero se puede evidenciar en algunas partes que no le toma de la manera más adecuada. Figure 20 Grafica de Señales de Audio. En la Figure 21 se puede evidenciar que la señal de filtrado(rojo) con una ventana de 20 sigue la tendencia de la ruidosa pero de menor amplitud. Se puede notar que la señal filtrada(rojo) es muy parecida a la señal ruidosa. Figure 19 Grafica de Señales de Audio. siendo la mejor aproximación. Audio con ruido y audio filtrado con ventana de 5 muestras. Audio con ruido y audio filtrado con ventana de 10 muestras. .

además su amplitud se reduce nuevamente comparada con la ventana de 20 muestras. Audio con ruido y audio filtrado con ventana de 50 muestras. . Figure 21 Grafica de Señales de Audio. En esta grafica se puede notar que se ha perdido mucha información debido al número de muestras de la ventana. Se nota claramente que se perdido mucha información con este tamaño de ventana. Figure 22 Grafica de Señales de Audio. Audio con ruido y audio filtrado con ventana de 20 muestras. además se ve claramente que la amplitud de la señal se ha reducido.

Código en Matlab . 2. según la gráfica muestra una señal filtrada de menor tamaño que la original. Se produjo una mejora sustancial en el audio tras la aplicación del filtro de promediado móvil? Explique sus percepciones.1. casi sin ruido. al ser la ventana de gran tamaño el promedio de las mismas va ser de menor tamaño siempre haciendo que la señal decrezca en amplitud. 4. Figure 23 Grafica de Señales de Audio. Cuál es el tamaño de ventana que brinda los mejores resultados? Justifique su respuesta. El filtro tiene el mismo efecto en la mejora del audio si el ruido agregado a la señal original se incrementa considerablemente? Por ejemplo. con un coeficiente de 0. Con la ventana de 10 muestras se encontró un mejor audio. 5. 1. pero todavía existo el mismo en la señal. En la gráfica se muestra que la señal filtrada (rojo) ha reducido drásticamente su amplitud y no se parece en nada a la señal ruidosa. si la ventana es pequeña se obtiene un promedio muy parecido a la señal de ingreso eliminando así el ruido. Pero al ser más amplia la ventana en el promedio se toma diferentes valores ya no los más cercanos haciendo que la señal quede muy distorsionada. Cuál es la influencia del tamaño de la ventana sobre el resultado del filtrado? El filtro de promediado móvil tiene como objetivo obtener un promedio de la señal en un tamaño de ventana determinado. 3. Por qué una ventana más grande tiende a resultar en un sonido más “opaco”? Debido a que el filtro es un promedio de las muestras . Si la señal ha mejorado bastante el ruido se ha reducido. Audio con ruido y audio filtrado con ventana de 100 muestras. No debido a que la señal de ruido es mucho mayor que la señal de ingreso haciendo que se escuche solo la señal de ruido es decir el filtro ya no es efectivo.

Fs) stem(ruidosa. end .01*randn(1.M) y_50(n)=(1/M)*sum(ruidosa(n:n+M-1)).'blue') title('Senal de Audio con ruido') %%Implememntacion filtro promediado movil M=5. figure(2) plot(ruido) title('Senal de Ruido') figure(3) ruidosa=x1+ruido' %sound(ruidosa. end sound(y.Fs]=audioread('CelloS.M) y(n)=(1/M)*sum(ruidosa(n:n+M-1)).'black') title('Ventana de 10 muestras') %%Muestas M=20. for n=1:(length(ruidosa). figure(1) plot(x1. for n=1:(length(ruidosa).'black') title('Ventana de 20 muestras') %%Muestas M=50.wav'). for n=1:(length(ruidosa).Fs) figure(4) stem(y. end sound(y_10.M) y_100(n)=(1/M)*sum(ruidosa(n:n+M-1)).length(x1)).Fs) figure(5) stem(y_10.'black') title('Ventana de 50 muestras') %%Muestas pause(5) M=100.3 Audios close all clear all clc %load handel %Read stereo audio file %%Primero la x[n] [x.'red') title('Senal de Audio') %%generacion de ruido ruido=0. end figure(8) stem(y. end figure(7) stem(y_20.2). %storing only one channel in x1: x1 = x(:. for n=1:(length(ruidosa).M) y_20(n)=(1/M)*sum(ruidosa(n:n+M-1)). for n=1:(length(ruidosa).%%Universidad de Cuenca %%Carlos Guerrero %%1.'black') title('Senal Filtrada con ventana de 5 muestras') %%*******Muestras******** pause(5) M=10.M) y_10(n)=(1/M)*sum(ruidosa(n:n+M-1)).

'blue') hold on stem(y_50.En Matlab se procedió a hacer las respuestas a impulsos de diferentes audios.'black') hold on stem(ruidosa.'red') title('Mezcla de Senales con ventana de 50 muestras ') xlim([0 499]) %%******************Tssssss 500 muestras******Ventana de 100 figure(14) stem(x1. además al plantear nuestra propia función se entendió como funciona la convolucion. de manera que no se le escucha muy bien.'blue') hold on stem(y. . Conclusiones .'red') title('Mezcla de Senales con ventana de 20 muestras ') xlim([0 499]) %%******************Tssssss 500 muestras******Ventana de 50 figure(13) stem(x1.'black') hold on stem(ruidosa.Debido a que Matlab no trabaja con la posición de cero en las matrices se hizo difícil realizar el código para la convolucion.Se pudo evidenciar de manera práctica lo aprendido en clases acerca de la convolucion de señales. pero con la ayuda de la bibliografía se lo pudo llevar a cabo.'black') hold on stem(ruidosa. .'red') title('Mezcla de Senales con ventana de 10 muestras ') xlim([0 499]) %%******************Tssssss 500 muestras******Ventana de 20 figure(12) stem(x1.'blue') hold on stem(y_20.'black') hold on stem(ruidosa.Fs) figure(9) stem(y_100.4. .'black') hold on stem(ruidosa.'red') title('Mezcla de Senales con ventana de 5 muestras ') xlim([0 499]) %%******************Tssssss 500 muestras******Ventana de 10 figure(11) stem(x1.Las señales de audio que se obtuvieron luego de hacer la convolucion eran diferentes se introdujo ruido y se amplificaron las señales.sound(y_100. .'blue') hold on stem(y_10.'blue') hold on stem(y_100. logrando entender en que consiste el procesamiento de audio tanto en el tiempo como en frecuencia.'black') title('Ventana de 100 muestras') %%******************Tssssss 500 muestras******Ventana de 5 figure(10) stem(x1.'red') title('Mezcla de Senales con ventana de 100 muestras ') xlim([0 499]) 1.

www. Conv. Smith. The Scientist and Engineer’s Guide to Digital Signal Processing.El número de muestras promedio se debe elegir de acuerdo a cada señal. de una posición dada. .La etapa del filtrado de promediado móvil es una eficiente alternativa consiste en sacar el promedio de un numero tal de muestras hacia delante. Bibliografia [1]Matlab Documentation. 1.com/help/matlab/ref/conv. . 1997- 2013.Además se comprobó que una ventana de tamaño grande. para la práctica con una ventana de 10 muestras el sonido mejoraba bastante.html [2] Steven W.com.. .4. Disponible en: http://www. hace que la señal se atenué demasiado ya que se pierde mucha información al hacer el promedio de las señal.mathworks.dspguide.