Está en la página 1de 5

DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA - ELECTRONICA I - LABORATORIO 2.

Laboratorio de Sistemas y Seales: Convolucin


tiempo discreto y trasformada de Fourier
(Abril 2008)
Luis Felipe De La Hoz Cubas, Mara Ilse Dovale Prez y Michael Forero Naizir

Abstract En el presente trabajo se busca aterrizar los concep- if m==1;


tos vistos en clase de las temticas de Convolucin en el tiempo %A continuacion se toma una seal y se muestra que
discreto y la Transformada de Fourier; adems de esto se tiene al multiplicarla por
como objetivo corroborar de una manera gr ca, por medio
del software MatLab R las diferentes propiedades bsicas 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 Convolucin 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 seales ylabel('Amplitud');
que se pretendan hacer, tambin 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 ms 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('Seal 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 seal en el dominio del tiempo por
una exponencial es igual que correrlo en frecuencia, adems x2 = ifft(fftx2);
haciendo la trasformada inversa de Fourier al corrimiento fftx2 = fftx2;
en frecuencia el resultado es la seal 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 continuacin se despliega lo que har el programa si se
selecciona la opcin 1 del men "m", es decir: "x(t) e^(-at) Las gr cas resultantes son las siguientes, tomando el T de
=> X(w+a)", la propiedad de corrimiento en el tiempo. corrimiento como 10:
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA - 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: Seal de Pulso recto. x2 = x.*x1;
gure (2);
subplot(2,1,1), plot(t(1:100),x2(1:100));
title('Seal 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: Seal de pulso recto aplicando la primera propiedad de xlabel('Frecuencia');
la transormada de Fourier. grid on;
pause;
A continuacin se despliega lo que har el programa si end
se selecciona la opcin 2 del men "m", es decir: "x(t - a)
=> X(w) e^(-aw)", 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 funcin, 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('Seal Seno'), xlabel('Tiempo'),
Fig3: Seal del Seno con su espectro en magnitud.
ylabel('Amplitud');
grid on;
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA - ELECTRONICA I - LABORATORIO 2. 3

Las gr cas resultantes son las siguientes, tomando un


factor de escalamiento de 10:

Fig4: Seal del Seno multiplicada por una exponencial


compleja.

A continuacin se despliega lo que har el programa si se


selecciona la opcin 2 del men "m", es decir: "x(at) => (1/jaj)
X(w / a)", es decir la propiedad de escalamiento. Fig5:Seal 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('Seal 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: Seal coseno escalada en un factor de 10.
axis([0 20 0 max(fftx)]);
title('Seal 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 seal?nn'); Lab.
x2 = cos(s*3*pi*t);
gure (2)
subplot(2,1,1), plot(t,x2);
title('Seal 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('Seal en frecuencia'); b) x[n] = u[n] u[n 3]
ylabel('Amplitud'); Observemos como fue el desarrollo del programa planteado:
grid on;
pause;
end
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA - 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('Seal 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 convolucin 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('Seal de Entrada inciso b'); set(handles.text15,'String','los taamos de las muestras y
stem(ux,x,'o','linewidth',2);grid on sus amplitudes deben ser iguales');
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA - 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 seal discreta de entrada a dicho sistema.
handles.cont=0; Tanto la seal ingresada y la respuesta al impulso del
handles.cont1=0; sistema LTI tienen un nmero nito de muestra, con la posibil-
if length(handles.H)==length(handles.nH) idad de que el programa pueda gra car la seal ingresada, la
for i=1:length(handles.nH); respuesta al impulso del sistema y la seal 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, slo que con posibilidades
end ms 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 aplicacin 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 Convolucin 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 "AYUDA" 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 creacin de los laboratorios.
handles.q=handles.q+1; Como ya sabemos MatLab es un programa matemtico
else para realizar clculos numricos con vectores y matrices, sin
handles.NX(t)=0; embargo tambin podemos trabajar con nmeros 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 tambin 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 ms fcil manejo del programa y aprovechar
end al mximo sus capacidades.
end
else
set(handles.text15,'String','los taamos deben de ser
iguales');
V. BIBLIOGRAFIA
end
if handles.cont==0&&handles.cont1==0 [1]. OPPENHEIM & WILSKY, Seales y Sistemas, II
handles.n1=-10:10; Edicin.
axes(handles.axes2) [2]. GARCIA, De Jalon, Javier & RODRIGUEZ, Jose
xlabel('n');ylabel('x[n]');title('Seal de Entrada'); Ignacio; "Aprenda MatLab como si estuviera en primero".
stem(handles.n1,handles.NX,'o');grid on [3]. FORMATO IEEE, LaTex. (Scienti c Work Place)
handles.con2=1;

También podría gustarte