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!!!

jueves, 12 de abril de 2012

Convolución entre dos funciones rect(x)

Hola a todos, espero esten bien. En esta ocación explicaré un poco acerca de la convolución entre dos funciones rect, rectángulo, pulso cuadrado o como quieran y deseen llamarla, haha. Que se define de la siguiente manera:
Daría igual escribirla de la siguiente manera:

Pero antes de realizar la convolución entre dos funciones rect(x), voy a explicar un poco acerca de la convolución. Recuerden que la convolución se define como:

La expresión extraña anterior, significa que la convolución depende de x aunque en la integral pareciera que u es la variable de la que depende la convolución. Para aclarar ésto, si se toma esa expresión integral así como se muestra y en g(x-u) a x se le asigna el valor de cero entonces quedaría algo como:

Que para muchos es más claro observarlo, es una integral de la multiplicación etre las dos funciones f(x), en este caso f(u) y g(x) o g(-u), donde lo que se está integrando es el área resultante de la multiplicación de esas dos funciones. El signo negativo en g(-u) significa que la función esta invertida; o de manera gráfica:


Se convierte en:


Entonces de manera más clara aún, es una integral de la multiplicación de dos funciones en donde una función se mantiene igual mientras que la otra se invierte.

El hecho de que el argumento de la función g(x) se convierta en g(x-u) significa que ésta función se desplaza sobre todo el eje x; ésto es, que x toma valores que van desde infinito negativo hasta infinito positivo, o en otras palabras que la función g(x-u) se mueve, no es fija. Mientras que la función f(x) se mantiene fija.

Entonces cada vez que g(x-u) se mueve sobre el eje x, se tiene que multiplicar por la función f(u) y después de eso, se integra el área bajo la curva que resulta de esa multiplicación.

Ahora que ya se tiene una idea de que es la convoloción sería más claro realizar la convolución entre dos funciones rect(x). Entonces se tiene que:



Por lo que:

La convoloción la realizé en dos integrales porque primero se desplaza la función g(x-u) de infinito negativo hasta cero y la otra es porque se desplaza desde valores de x que van de cero hasta infinito positivo. Pueden observar esto en las gráficas siguientes.

x+0.5; con x = -1.5x+0.5; con x = -1.0
x+0.5; con x = -0.75
x+0.5; con x = -0.5x+0.5; con x = -0.25

x+0.5;con x = 0

x-0.5; con x = 0.25

0.5-1; con x = 0.50
x-0.5; con x = 0.75

x-0.5; con x = 1.0

x-0.5; con x = 1.5