jueves, 28 de junio de 2012

Código fuente de convolución entre dos funciones rect(x)

Hola a todos allá afuera en la red!. En un post anterior escribí algo acerca de la convolución entre dos funciones rect(x). Ahora os dejo el programa que realiza la convolución entre las dos funciones, esta escrito para Matlab u Octave; elijan el que deseen, ya que no es lo mismo pero es igual hahaha.

---------------------Inicio de código------------------

%Este es el eje x
LongitudVector= 2.5; %2.5 unidades
ResolucionEjex = 0.001;
Eje_x = -LongitudVector:ResolucionEjex:LongitudVector;
[d, LongitudEjex] = size(Eje_x); %Número de elementos en Eje_x
FuncRect = zeros(1,LongitudEjex); %esta es una función rect
FuncRect02 = zeros(1,LongitudEjex); %esta es la otra función rect

desplaza = 0; %desplazamiento sobre el eje x
AnchoPulso = 1; %Ancho de la función
a1 = -AnchoPulso/2 + desplaza; %Límites del ancho de pulso
a2 = AnchoPulso/2 + desplaza;

%En este ciclo se genera la función rect
for i = 1:1:LongitudEjex
if ((Eje_x(i) >= a1) && (Eje_x(i) <= a2))
FuncRect(i)=1;
else FuncRect(i)=0;
end
end

desplaza = 1.5; %desplazamiento sobre el eje x
AnchoPulso = 1; %Ancho de la función
a1 = -AnchoPulso/2 + desplaza; %Límites del ancho de pulso
a2 = AnchoPulso/2 + desplaza;

for i = 1:1:LongitudEjex
if ((Eje_x(i) >= a1) && (Eje_x(i) <= a2))
FuncRect02(i)=1;
else FuncRect02(i)=0;
end
end

%plot(Eje_x,FuncRect);
%hold
%plot(Eje_x,FuncRect02, 'r');
xlabel('x');
ylabel('Amplitud');

%Recuérdese que en la convoloción una de las funciones debe de
%ser invertida.
FuncRectInvertida = FuncRect(LongitudEjex:-1:1);
%plot(Eje_x,FuncRectInvertida);
Convol = size(1,2*LongitudEjex-1);

for i = 1:1:2*LongitudEjex-1
Convol(i)=0;
for j = max(1-LongitudEjex + i, 1): min(LongitudEjex,i)
k = i - j + 1;
Convol(i) = Convol(i) + FuncRect(j)*FuncRectInvertida(k);
end
end

Eje_x = -(LongitudEjex-1):(LongitudEjex-1);
plot(Eje_x.*ResolucionEjex,Convol.*ResolucionEjex);

----------------Fin de código------------------------

En en código, dejé comentadas las lineas que plotean las dos funciones rect(x), así que si desean ver las dos funciones rect(x) sólo quiten % y listo.



Funciones Rect(x)


El resultado final y de interés se muestra en la siguiente figura.

Convolución de dos funciones Rect(x)


Espero les sirva, y que la fuerza los acompañe!!!

1 comentario:

Jonoroz dijo...

Es un buen ejemplo pero no me muestra la gráfica, lo que hago es cargar el archivo archivo.m a la terminal, claro ya con Octave ejecutandose.

> source('/../archivo.m')

pero no aparece nada, me podría decir cual es mi error.