Sei sulla pagina 1di 5

Convolucin Discreta

Universidad de Guanajuato

Seales y Sistemas (Propedutico de Maestria)


Profesor: Dr. Luis Javier Morales

Alumnos: Camarena Martnez David Ramrez Gasca Humberto Jurez Ramrez Eduardo Enrique Ortiz Lpez Emmanuel

16/06/2009

Convolucin Discreta
Introduccin: Si x(n) es la entrada a un sistema lineal en invariante en el tiempo (tiempo discreto) caracterizado por T[.], entonces la salida y(n), est dada por:
g g

y ( n) !

x ( k )h (n  k ) ! x ( n  k ) h ( k )
k ! g k ! g

(1)

Donde h(n) = T[ (n)], es decir la respuesta al impulso La ecuacin 1 es llamada la convolucin de x y h o viceversa, la cual la podemos representar como: y ( n ) ! x ( n )  h ( n ) ! h ( n )  x (n ) Procedimiento: Para esta tarea se implemento en MatLab el proceso de convolucin sin ocupar la funcin conv. La secuencia de la multiplicacin de los elementos de las matrices x(n) y h(n) es la siguiente, considerando que tanto x(n) como h(n) son de la misma longitud: w(1) ! x(1) * h (1) w(2) ! x(1) * h(2)  x(2) * h(1) w(3) ! x(1) * h(3)  x(2) * h(2)  x(3) * h(1) / w(n ) ! x (1) * h(n)  x(2) * v(n  1)  x(n) * v(1) La longitud de y(n) es igual a la longitud de x(n) ms la longitud de h(n) menos uno, es decir:
M  N 1

(2)

(3)

Donde: M = longitud de la secuencia x(n) N = longitud de la secuencia h(n) Por lo tanto el cdigo utilizado en MatLab es el siguiente:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Convolucion % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y = convolucion(x,h) m=length(x); n=length(h); aux=m+n-1; y=zeros(1,aux);

%longitud de la salida y

for k=1:aux for j=1:m if k+1-j<=0 yaux(k)=0; else if k+1-j>=length(h)+1 yaux(k)=0; else yaux(k)=x(j)*h(k+1 -j); end end y(k)=yaux(k)+y(k); end end k=0:aux-1; stem(k,y) grid on xlabel('n') ylabel('y(n)') title('Convolucion y(n)=x(n)*h(n)' )

Comprobacin: Consideremos una seal x[n] con coeficientes 1, 2, 2, 1, 1, 0 y una seal h[n] con 3,2,1 como coeficientes. Realizando la convolucin el cdigo anterior el resultado es el siguiente: >> x=[1 2 2 1 1 0]; >> h=[3 2 1]; >> convolucion(x,h) >> y
y = 3 8 11 9 7 3 1 0 0

Ahora, realizndolo con la funcin de MatLab llamada conv y comparndolos vemos que son los mismos coeficientes. >> conv(x,h)
ans = 3 8 11 9 7 3 1 0 0

Como los coeficientes son los mismos podemos concluir que el cdigo anterior es correcto. La grafica de la convolucin de las secuencias anteriores se muestra en la Figura 1.

Convolucion y(n)= x(n)*h(n) 12

10

y(n)

3 n

Figura 1. Convolucin de dos secuencias discretas Como ejercicio hicimos la lectura de una seal ECG mezclada con ruido y despus se convolucion con los coeficientes de un filtro notch. La respuesta del filtro Notch en el dominio Z, viene dada por la ecuacin 4:
Y ( z ) ! (1  F z 1  z 2 ) X ( z )

(4)

Calculando la transformada inversa de la ecuacin 4, nos dara los coeficientes (ecuacin 5) con los cuales hay que convolucionar la seal leda, es decir h[n]: H ( z ) ! 1  F z 1  z 2 ! Z 1 _H ( z )a ! Z 1 _  F z 1  z 2 a 1 h[n] ! H [n]  FH [n  1]  H [n  2] Y realizando varias pruebas el valor ptimo de para el cual la seal x[n] es filtrada es =0.6. EL programa realizado para hacer este filtrado es el siguiente:
clc; clear all; close all; X=wavread( 'ecg3plushum.wav' ); t = [0: length(X)]; Hn = 1*(t==0) - 0.61*(t==1) + 1*(t==2); t = [0: length(X)]; Hn = 1*(t==0) - 0.60*(t==1) + 1*(t==2); Yn=convolucion(X,Hn); figure;plot(X) title('Seal ECG con ruido' ) grid on figure;plot(Yn) grid on title('Seal ECG filtrada' ) axis([0 900 min(Yn) max(Yn)])

(5)

Los resultados obtenidos se muestran en las grficas de la figura 2 y 3, las cuales muestran las seal sin filtrar y la seal limpia de ruido respectivamente.
S eal E CG c 1

0.8

0.6

0.4

0.2 0

-0.2

-0.4

-0.6 0 100 200 300 400 500 600 700 800 900

Figura 2. Seal ECG con ruido


S eal E CG filtrada 0.6

0.4

0.2

-0.2

-0.4

100

200

300

400

Figura 3. Seal ECG sin ruido (seal filtrada) Bibliografa: y Fundamentals of digital Signal Processing Lonnie C. Ludeman

ruido

500

600

700

800

900

Potrebbero piacerti anche