DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2.                                       ...
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2.                                       ...
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2.                                       ...
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2.                                       ...
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2.                                       ...
Upcoming SlideShare
Loading in...5
×

Convolucion Tiempo Discreto

10,379

Published on

Published in: Education, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
10,379
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
315
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Convolucion Tiempo Discreto

  1. 1. DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2. 1 Laboratorio de Sistemas y Señales: Convolución tiempo discreto y trasformada de Fourier (Abril 2008) Luis Felipe De La Hoz Cubas, María Ilse Dovale Pérez y Michael Forero Naizir Abstract— En el presente trabajo se busca aterrizar los concep- if m==1; tos vistos en clase de las temáticas de Convolución en el tiempo %A continuacion se toma una señal y se muestra que discreto y la Transformada de Fourier; además de esto se tiene al multiplicarla por como objetivo corroborar de una manera grá ca, por medio del software MatLab R las diferentes propiedades básicas de los %una exponencial negativa su transformada se muestra temas mencionados anteriormente. corrida t = -5:0.00001:5; x = rectpuls(t); I. INTRODUCCION gure(1) A Lo largo de esta actividad es importante que se tengan claros los conceptos del tema de la Convolución en el tiempo discreto y la Transformada de Fourier para poder subplot(2,1,1); plot(t,x); title('Pulso Rectangular'); modelar un programa en el Software MatLab haciendo uso de xlabel('Tiempo'); comandos que son importantes a la hora de gra car las señales ylabel('Amplitud'); que se pretendan hacer, también fue necesario profundizar e grid on; investigar otros comandos que sirvieron a la hora de hacer el frec1 = 100*(0:length(x)-1)/length(x); algoritmo, para esto se utilizó el menú ayuda, el cual es una frec1 = frec1'; de las herramientas más completas y poderosas del programa fftx = abs(fft(x)); usado para llevar a cabo el objetivo principal mencionado subplot(2,1,2); anteriormente. plot(frec1(1:end),fftx(1:end)); title('Señal en frecuencia'); II. PROPIEDADES DE FOURIER EN TIEMPO ylabel('Amplitud'); CONTINUO xlabel('Frecuencia'); grid on; tc = input ('Digite el T de corrimiento?nn'); En este algoritmo se muestra que se cumplen las siguientes a = complex(0,2); propiedades de Fourier en MatLab, estas propiedades se pro- x1 = exp(a*pi*tc*frec1'); baron en ambos dominios: el del tiempo y la frecuencia, es fftx2 = x1.*fftx; decir; al multiplicar una señal en el dominio del tiempo por una exponencial es igual que correrlo en frecuencia, además x2 = ifft(fftx2); haciendo la trasformada inversa de Fourier al corrimiento fftx2 = fftx2; en frecuencia el resultado es la señal multiplicada, por un gure(2) exponencial en el tiempo, veamos: subplot(2,1,1); plot(t,x2); Comienzo del algoritmo: title('Pulso Recto corrido en el tiempo'); xlabel('Tiempo'); m=menu('PROPIEDADES A MOSTRAR: ','x(t) e^(-at) ylabel('Amplitud'); => X(w+a)','x(t - a) => X(w) e^(-aw)','x(at) => (1/jaj) grid on; X(w / a)','Salir') subplot(2,1,2), plot(frec1(1:end/2),fftx2(1:end/2), 'o'); %La funcion MENU desplega un set de botones que title('Gra ca de Frecuencia'); de niran el curso del ylabel('Amplitud'); %programa grid on; end A continuación se despliega lo que hará el programa si se selecciona la opción 1 del menú quot;mquot;, es decir: quot;x(t) e^(-at) Las grá cas resultantes son las siguientes, tomando el T de => X(w+a)quot;, la propiedad de corrimiento en el tiempo. corrimiento como 10:
  2. 2. DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2. 2 frec1 = 100*(0:length(x)-1)/(length(x)); frec1 = frec1'; fx = abs(fft(x)); subplot(2,1,2); plot(frec1(1:end/2),fx(1:end/2)); title('Espectro en Magnitud'); ylabel('Amplitud'); xlabel('Frecuencia'); grid on; tc = input ('Digite el factor de frecuencia deseado?nn'); x1 = sin(2*pi*tc*t); Fig1: Señal de Pulso recto. x2 = x.*x1; gure (2); subplot(2,1,1), plot(t(1:100),x2(1:100)); title('Señal Seno multiplicada por Exponencial Compleja'); xlabel('Tiempo'); ylabel('Amplitud'); grid on; a = complex(0,2); x1 = exp(a*pi*tc*t); x2 = x.*x1; fftx2 = abs(fft(x2)); subplot(2,1,2), plot(frec1(1:end/2),fftx2(1:end/2)); title('Espectro de magnitud'); ylabel('Amplitud'); Fig2: Señal de pulso recto aplicando la primera propiedad de xlabel('Frecuencia'); la transormada de Fourier. grid on; pause; A continuación se despliega lo que hará el programa si end se selecciona la opción 2 del menú quot;mquot;, es decir: quot;x(t - a) => X(w) e^(-aw)quot;, es decir la propiedad de corrimiento en Las grá cas resultantes son las siguientes, tomando un frecuencia. factor de frecuencia de 10: if m==2; %Para mostrar la propiedad x(t - a) => X(w) e^(-aw) de la transformada de %Fourier se tomará un función, se le calculara la transformada y se %veri cara que la antitransformada resultante es la antitransformada de la %funcion incial pero corrida. Para esto se debe com- parar las dos gra cas %resultates. t = 0:0.01:100; x = sin(0.5*pi*(t)); gure (1) subplot(2,1,1); plot(t(1:500),x(1:500)); title('Señal Seno'), xlabel('Tiempo'), Fig3: Señal del Seno con su espectro en magnitud. ylabel('Amplitud'); grid on;
  3. 3. DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2. 3 Las grá cas resultantes son las siguientes, tomando un factor de escalamiento de 10: Fig4: Señal del Seno multiplicada por una exponencial compleja. A continuación se despliega lo que hará el programa si se selecciona la opción 2 del menú quot;mquot;, es decir: quot;x(at) => (1/jaj) X(w / a)quot;, es decir la propiedad de escalamiento. Fig5:Señal Coseno if m==3; %Por ultimo se muetra el efecto que tiene en la transformada el %escalamiento de una funcion t = 0:0.01:5; x = cos(3*pi*t); gure (1) subplot(2,1,1), plot(t,x); title('Señal Coseno'); xlabel('Tiempo'); ylabel('Amplitud'); grid on; frec1 = 100*(0:length(x)-1)/length(x); frec1 = frec1'; fftx = abs(fft(x)); subplot(2,1,2), plot(frec1(1:end/2),fftx(1:end/2)); Fig6: Señal coseno escalada en un factor de 10. axis([0 20 0 max(fftx)]); title('Señal en frecuencia'); ylabel('Amplitud'); Como se puede comprobar aqui vemos las propiedades de grid on; la Transformada de Fourier comprobadas con el programaMat s = input ('Digite cuanto quiere escalar la señal?nn'); Lab. x2 = cos(s*3*pi*t); gure (2) subplot(2,1,1), plot(t,x2); title('Señal Coseno escalada en el tiempo'); xlabel('Tiempo'); III. CONVOLUCION ylabel('Amplitud'); grid on; Se pretende comprobar que un sistema LTI en tiempo dis- fftx2 = abs(fft(x2)); creto tiene la respuesta al impulso: h[n] = 0:5fu[n] u[n 5]g subplot(2,1,2), plot(frec1(1:end/2),fftx2(1:end/2)); sabiendo que la entrada x[n] tiene las siguientes dos formas: axis([0 20 0 max(fftx2)]); a). x[n] = 2 u[n + 3] 4 u[n 4] + 2 u[n 11] title('Señal en frecuencia'); b) x[n] = u[n] u[n 3] ylabel('Amplitud'); Observemos como fue el desarrollo del programa planteado: grid on; pause; end
  4. 4. DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2. 4 y=conv(h,x); ux1=0:1:6; axes(handles.axes3); %selecciono el axis 3 ylabel('y[n]'); title('Respuesta del Sistema'); stem(ux1,y,'o','linewidth',2);grid on; % Al presionar pushbutton3. Este realiza la convolucion entre las funciones % de nidas por el usuario function pushbutton3_Callback(hObject, eventdata, handles) handles.Y=conv(handles.NH,handles.NX); handles.n3=-20:20; axes(handles.axes3); ylabel('y[n]'); title('Respuesta del Sistema'); % Al presionar pushbutton1. stem(handles.n3,handles.Y,'bd');grid on; function pushbutton1_Callback(hObject, eventdata, handles) h=[.5 .5 .5 .5 .5]; %En estas dos primeras lineas se de ne % Al presionar el pushbutton4. Para de nir la respuesta la respuesta al impulso al impulso r1=0:1:4; %Eje horizontal de la respuesta al impulso function pushbutton4_Callback(hObject, eventdata, handles) x=[2 2 2 2 2 2 2 -2 -2 -2 -2 -2 -2 -2]; %Entrada al sistema handles.cont=0; del inciso a handles.cont1=0; ux=-3:1:10; %Dominio de la entrada if length(handles.H)==length(handles.nH) axes(handles.axes1); %selecciono el axis 1 for i=1:length(handles.nH); xlabel('n'); if ((handles.nH(i)>=-10)&&(handles.nH(i)<=10)) ylabel('h[n]'); else title('Respuesta al Impulso'); set(handles.text15,'String','Por favor introducir un dominio stem(r1,h,'o','linewidth',2);grid on; %Gra co de menos de 10 elementos'); axes(handles.axes2); %selecciono el axis 2 handles.cont=handles.cont+1; xlabel('n'); end ylabel('x[n]'); if (mod(handles.nH,1)==0) title('Señal de Entrada inciso a'); else stem(ux,x,'d','linewidth',2);grid on %Gra co handles.cont2=handles.cont2+1; y=conv(h,x); %Convolucion end ux1=-3:1:14; %Dominio de la convolución end axes(handles.axes3); %selecciono el axis 3 if handles.cont==0&&handles.cont1==0 xlabel('n'); handles.w=-10; ylabel('y[n]'); handles.q=1; title('Respuesta'); for t=1:21 stem(ux1,y,'o','linewidth',2 );grid on; %Gra co if handles.q<=length(handles.nH) if handles.w==handles.nH(handles.q) % Al presionar pushbutton2. handles.NH(t)=handles.H(handles.q); function pushbutton2_Callback(hObject, eventdata, handles) handles.w=handles.w+1; h=[.5 .5 .5 .5 .5]; %Respuesta al impulso handles.q=handles.q+1; r1=0:1:4; else x=[1 1 1]; %Entrada al sistema del inciso b handles.NH(t)=0; ux=0:1:2; handles.w=handles.w+1; axes(handles.axes1); %selecciono el axis 1 end xlabel('n'); else ylabel('h[n]'); handles.NH(t)=0; title('Respuesta al Impulso'); handles.w=handles.w+1; stem(r1,h,'o','linewidth',2);grid on; end axes(handles.axes2); %selecciono el axis 2 end xlabel('n'); end ylabel('x[n]'); else title('Señal de Entrada inciso b'); set(handles.text15,'String','los tañamos de las muestras y stem(ux,x,'o','linewidth',2);grid on sus amplitudes deben ser iguales');
  5. 5. DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA - ELECTRONICA I - LABORATORIO 2. 5 end guidata(hObject, handles); if handles.cont==0&&handles.cont1==0 end handles.n1=-10:10; if handles.con2==1&&handles.con1==1 axes(handles.axes1); %selecciono el axis 1 set(handles.pushbutton3,'Enable','on') xlabel('n'); end ylabel('h[n]'); guidata(hObject, handles); title('Respuesta al impulso de nida por usuario'); function edit1_Callback(hObject, eventdata, handles) stem(handles.n1,handles.NH,'rp');grid on; handles.nH=str2num(get(handles.edit1,'String')); handles.con1=1; handles.ab1=1; guidata(hObject, handles); guidata(hObject, handles); end Con este algoritmo se presenta un programa que le permite %Al presionar el pushbutton5. al usuario especi car la respuesta al impulso de un sistema function pushbutton5_Callback(hObject, eventdata, handles) LTI.e ingresar una señal discreta de entrada a dicho sistema. handles.cont=0; Tanto la señal ingresada y la respuesta al impulso del handles.cont1=0; sistema LTI tienen un número nito de muestra, con la posibil- if length(handles.H)==length(handles.nH) idad de que el programa pueda gra car la señal ingresada, la for i=1:length(handles.nH); respuesta al impulso del sistema y la señal de salida resultante. if ((handles.nH(i)>=-10)&&(handles.nH(i)<=10)) El programa esta presentado en ambiente grá co, y para esto else se empleo el ambiente grá co con el comando GUIDE (Graph- set(handles.edit3,'String','Introducir un dominio de menos ical User Interface Development Enviroment) que ofrece MAT- de 10 elementos'); LAB, el cual permite crear de modo interactivo la interface de handles.cont=handles.cont+1; usuario, asi como en Visual Basic, sólo que con posibilidades end más limitadas. if (mod(handles.nH,1)==0) else handles.cont2=handles.cont2+1; end IV. CONCLUSION end Finalmente se pudo comprobar de forma grati cante que if handles.cont==0&&handles.cont1==0 los conceptos vistos en clase tienen una aplicación real en handles.w=-10; la vida cotidiana, el Software MatLab fue la ayuda mas handles.q=1; indispensable en la tarea de comprobar tanto las propiedades for t=1:21 de Fourier, como la Convolución en el tiempo discreto, en este if handles.q<=length(handles.nX) caso se utilizaron nuevos comandos explicados en el cuerpo if handles.w==handles.nX(handles.q) del trabajo, otra ayuda muy importante fue la quot;AYUDAquot; del handles.NX(t)=handles.X(handles.q); programa Mat Lab donde se muestran ejemplos que ayudaron handles.w=handles.w+1; de sobremanera a la creación de los laboratorios. handles.q=handles.q+1; Como ya sabemos MatLab es un programa matemático else para realizar cálculos numéricos con vectores y matrices, sin handles.NX(t)=0; embargo también podemos trabajar con números escalares, handles.w=handles.w+1; tanto reales como complejos, es por esto que fue posible la end realizacion de las comprobaciones de 3 de las propiedades de else la Transformada de Fourier. MatLab también posee una gran handles.NX(t)=0; capacidad, que es la realizacion de gra cos y la facilidad que handles.w=handles.w+1; le brinda al usuario de poder trabajar con un ambiente grá co end lo cual permite un más fácil manejo del programa y aprovechar end al máximo sus capacidades. end else set(handles.text15,'String','los tañamos deben de ser iguales'); V. BIBLIOGRAFIA end if handles.cont==0&&handles.cont1==0 [1]. OPPENHEIM & WILSKY, Señales y Sistemas, II handles.n1=-10:10; Edición. axes(handles.axes2) [2]. GARCIA, De Jalon, Javier & RODRIGUEZ, Jose xlabel('n');ylabel('x[n]');title('Señal de Entrada'); Ignacio; quot;Aprenda MatLab como si estuviera en primeroquot;. stem(handles.n1,handles.NX,'o');grid on [3]. FORMATO IEEE, LaTex. (Scienti c Work Place) handles.con2=1;

×