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.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgww_XB5fTs_uNOFXy7fR2EE1Bkmxj_K4aV9odHeX_5DGOy3A6KHVz3dtdMjNvadu6F5OH6-74TXPWPyoavAvpAfecqzRttQR-NAuS42oNf823Im3orRV1GkMtpdtGQrcQHpRQ_OZ1fIdk/s400/Rectangulos.jpg)
Funciones Rect(x)
El resultado final y de interés se muestra en la siguiente figura.
Espero les sirva, y que la fuerza los acompañe!!!
1 comentario:
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.
Publicar un comentario