Beruflich Dokumente
Kultur Dokumente
PRACTICA 3: CONVOLUCION
I.
OBJETIVOS
Familiarizacin con la secuencia de pasos que permite calcular grficamente la convolucin de dos seales discretas de duracin finita.
II.
PC
MATLAB
Toolbox de DSP
III.
DESARROLLO DE LA PRCTICA
CONVOLUCION: La respuesta al impulso de un sistema es la salida que produce dicho sistema cuando a la entrada se tiene el impulso unidad. La respuesta al impulso es especialmente importante cuando el sistema es lineal e invariante en el tiempo (LTI, Linear Time Invariant) porque proporciona toda la informacin necesaria para calcular
la salida ante cualquier entrada. La salida, y(n), se obtiene convolucionando la entrada x(n) con la respuesta al impulso del sistema h(n). Esta operacin se define como
La convolucin de dos seales puede efectuarse grficamente realizando la siguiente secuencia de pasos: o o Dibujar x(k). Dibujar h(n - k) interpretndola como una seal en la variable independiente k y considerando n como un parmetro de desplazamiento. Dado que h(n - k) = h(-(k - n)), esta seal es una versin invertida en el tiempo de h(k) que posteriormente ha sido desplazada n muestras respecto al eje k. As pues, h(n - k) se obtiene reflejando h(k) sobre el eje k alrededor del punto k = 0 para construir h(-k) y despus desplazndola |n| muestras a la izquierda si n es negativo o n muestras a la derecha si n es positivo. o o Multiplicar x(k) y h(n - k). Sumar respecto a k la seal producto x(k)h(n - k).
En el anexo de la prctica aparece el cdigo de MATLAB correspondiente a un programa que hace la convolucin entre dos seales de duracin finita.
1.
Por razones de simplicidad, se ha supuesto que las dos seales comienzan en cero y que Lx y Lh son la duracin de x(n) y h(n) respectivamente. Por consiguiente, en el programa se supone que x(n) se extiende entre 0 y Lx - 1 y que h(n) se extiende entre 0 y Lh - 1.
2.
Demuestre que con las suposiciones anteriores sobre las duraciones de x(n) y h(n) la seal y(n) = x(n) * h(n) comienza en 0 y acaba en Lx + Lh - 2 (su duracin, por tanto, es Lx + Lh - 1).
3.
Escriba en un fichero el programa convolucion.m que aparece al final del enunciado. Utilice la instruccin help para consultar el funcionamiento y la sintaxis de aquellas funciones de MATLAB que no conozca. Haga la convolucin entre las dos siguientes seales:
x(n) = [1 2 1 1]
h(n) = [1 -1 1]
4.
Considere las siguientes seales: x1(n) = [1 4 2 3 5 3 3 4 5 7 6 9] x2(n) = [1 1] x3(n) = [1 2 1] x4(n) = [ ] x5(n) = [ ] x6(n) = [ - ] x7(n) = [ -]
Modifique el programa del apartado anterior para efectuar las siguientes convoluciones y observe los resultados obtenidos
a. b.
x1(n) * x2(n) x1(n) * x4(n). Compare con el apartado anterior y vea que es lo mismo pero multiplicado por .
c. d. e.
x1(n) * x7(n). Compare con el apartado anterior. x1(n) * x3(n) x1(n) * x5(n). Compare con el apartado anterior y vea que es lo mismo pero multiplicado por .
f.
5.
Ahora considere estas seales: x8(n) = u(n) - u(n - 5) x9(n) = u(n) - u(n - 10) 7 x10n un un 15 8
n x11n sen un un 36 12 4 Vuelva a modificar el programa anterior para efectuar las siguientes convoluciones y observe los resultados obtenidos.
a. b. c. d.
x8(n) * x8(n) x9(n) * x9(n) x8(n) * x9(n) x8(n) * x9(n - 3). Compare con el apartado anterior y vea que es lo mismo pero desplazado 3 unidades.
e.
x8(n - 2) * x9(n - 4). Compare con los dos apartados anteriores y vea que es lo mismo pero el resultado esta desplazado.
f. g.
x11(n) * x8(n) x11(n) * x9(n). Compare con el apartado anterior y vea que es lo mismo pero el resultado esta desplazado.
h. i. j.
x11(n) * x10(n). Compare con los dos apartados anteriores. x10(n) * x9(n) x10(n) * x10(n)
6.
La convolucin tiene las siguientes propiedades: o o o Conmutativa: x(n) * h(n) = h(n) * x(n) Distributiva: x(n) * [h1(n) + h2(n)] = x(n) * h1(n) + x(n) * h2(n) Asociativa: [x(n) * h1(n)] * h2(n) = x(n) * [h1(n) * h2(n)]
Verifique que estas propiedades se cumplen efectuando las convoluciones de los dos lados de las siguientes igualdades:
a. b. c.
x1(n) * x2(n) = x2(n) * x1(n) x3(n) * [x1(n) + x2(n)] = x3(n) * x1(n) + x3(n) * x2(n) [x1(n) * x2(n)] * x4(n) = x1(n) * [x2(n) * x4(n)]
IV.
CONCLUSIONES Y OBSERVACIONES:
V.
VI.
ANEXO
Programa convolucion.m
%********************************************************************* % % Nombre: convolucion.m % % Objetivo: calcula la convolucin de dos seales paso % a paso visualizando los resultados intermedios % % %********************************************************************* clear all; % Definicion de las seales a convolucionar
Lx=48; %Longitud de x(n) equis=sin(pi*(0:Lx-1)/12 + pi/4); %x(n) if size(equis) ~= Lx error('Error: la senhal x(n) esta mal definida') end; Lh=15; %Longitud de h(n) hache=(7/8).^(0:Lh-1); %h(n) if size(hache) ~= Lh error('Error: la senhal h(n) esta mal definida') end; % % Dibujo de x(n) y h(n). Se aaden Lh ceros antes y despues para visualizar mejor las seales
ndib=-Lh:Lx+Lh; subplot(211) equisdib=[zeros(1,Lh) equis zeros(1,Lh+1)]; stem(ndib,equisdib); title('x(n)'); subplot(212) hachedib=[zeros(1,Lh) hache zeros(1,Lx+1)]; stem(ndib,hachedib); title('h(n)'); pause; % Bucle que realiza la convolucion
for n=0:Lx+Lh-1
xdek=[zeros(1,Lh) equis zeros(1,Lh+1)]; subplot(221) stem(ndib,xdek); title('x(k)') xlabel('k') grid; % Construccion y dibujo de h(n-k)
hdenmenosk=[zeros(1,n+1) hache(Lh:-1:1) zeros(1,Lx+Lh-n)]; subplot(223) stem(ndib,hdenmenosk); title('h(n-k)') xlabel('k') grid; % Dibujo de x(k)h(n-k)
yden(n+1)=sum(xdek.*hdenmenosk); subplot(224) stem(-1:Lx+Lh,[0 yden zeros(1,Lx+Lh-n)]); title('y(n)') xlabel('n') grid; pause; end;