Matlab - Convolucion mediante procedimientos o cáculos matemáticos

   
Vista:

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por Juan Arango (2 intervenciones) el 26/08/2012 18:18:03
Hola,

Tengo que realizar un programa o funcion en matlab algo sencillo pero no se como hacerlo.

El programa empieza cuando se ingresan en la función dos vectores de diferente tamaño. Estos vectores deben multiplicarse distributivamente entre si, es decir, cada elemento del primer vector con cada elemento del siguiente vector. Asi, van arrojando filas. Es como si uno multiplicara un numero normal de varios dígitos, se multiplica el primero con todos, luego el segundo con todos y asi sucesivamente. Luego de tener eso, se necesita que el programa sume los valores resultantes y me de el resultado final.

Lo intente hacer con un for pero no se como hacer para que cada valor del for me lo guarde en un vector y no sencillamente lo remplaze con el siguiente.

function suma(x,h)
clc
n1=length(x);
n2=length(h);
for i=1:n2
y(1)=x(1)*h(i)
y(2)=x(2)*h(i)
end

Por ejemplo, teniendo los valores de h y x, debe realizar el proceso para obtener y.

Es un proceso de convolucion denominado "suma por columnas" pero no es posible usar el comando "conv". Toca todo paso por paso.


h=1 -2 3

x= 1 2 2 3

1 -2 3
2 -4 6
2 -4 6
3 -6 9

y= 1 0 1 5 0 9

Espero me puedan colaborar.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por Geral (26 intervenciones) el 28/08/2012 04:34:07
hola!

espero te sirva esto =)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function S = convolucion_disc(h,x)
nh = length(h);
nx = length(x);
% preasignando variables:
y = zeros(nx,nh);
Y = zeros(nx,nx+nh-1);
S = zeros(1,nx+nh-1);
% creando matriz:
for j = 1:nx
    for i = 1:nh
        y(j,i) = h(i)*x(j);
    end
    Y(j,j:j-1+nh) = y(j,:);
end
% sumando:
for l = 1:nx + nh - 1;
    S(l) = sum(Y(:,l));
end
S = [Y;S];


salu2!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por MAO SAN (1 intervención) el 05/03/2013 16:33:41
Hola Geral.

Al copiar tu código en Matlab en un archivo .m, genera un error en la línea donde aparece el comando function, diciendo que no está permitido.

Te pido el favor me ayudes con eso, pues requiero hacer la convolución discreta con urgencia.

Gracias por tu atención, espero me puedas colaborar.

Mao.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3291 intervenciones) el 05/03/2013 22:33:13
El codigo de Geral es correcto. El error es en la forma como estas ejecutando. Los archivos de matlab se ejecutan de acuerdo al tipo de tipo que es.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> y=5*round(rand(1,4)+1), x=5*round(rand(1,6)+1),     S = convolucion_disc(y,x)
 
y =
 
    10     5    10     5
 
 
x =
 
     5     5     5    10    10     5
 
 
S =
 
    50    25    50    25     0     0     0     0     0
     0    50    25    50    25     0     0     0     0
     0     0    50    25    50    25     0     0     0
     0     0     0   100    50   100    50     0     0
     0     0     0     0   100    50   100    50     0
     0     0     0     0     0    50    25    50    25
    50    75   125   200   225   225   175   100    25



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por Cristian Mercdo Castro (1 intervención) el 06/04/2013 04:41:22
hola, es muy facil utilizar el comando "conv" de matalb, el cual realiza la convolucion entre dos vectores y se ejecuta el programa.
solo se definen los vectores:


h=[1 -2 3];
x= [1 2 2 3];
conv(h,x)
ans =
1 0 1 5 0 9



saludos:
Cristian Mercado Castro
Estudiante de Ingenieria Electronica
correo: camcastro87@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3291 intervenciones) el 06/04/2013 04:53:11
Gracias por tu aporte Cristian.
Pero mira las condiciones del usuario que hace la pregutna:
Es un proceso de convolucion denominado "suma por columnas" pero no es posible usar el comando "conv". Toca todo paso por paso.

Es por esa razón que Geral hace un código.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por katty tagua (1 intervención) el 03/11/2014 05:14:00
disculpe jeremias, yo utilice el codigo de geral, pero no me da la respuesta correcta... sera q me puede explicar como implementar su lineas
y=5*round(rand(1,4)+1), x=5*round(rand(1,6)+1), S = convolucion_disc(y,x)
... muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por jaime (1 intervención) el 31/10/2015 04:34:21
MatLab

Buen dia. Me podrian colaborar .Debo realizar la convolucion de estas señales. soy nuevo en el tema y me ha parecido un poco dificil
agradezco su atencion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3291 intervenciones) el 01/11/2015 14:01:48
Hola Jaime. ¿ Cómo harías la convolucion en forma analítica es decir en una hoja sin el uso de matlab?.
Después ya puedes pensar como hacerlo en matlab.

Saludos
OSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro



http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Convolucion mediante procedimientos o cáculos matemáticos

Publicado por JOSE JEREMIAS CABALLERO (3291 intervenciones) el 01/11/2015 15:06:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
clear all
t=-5:0.0001:5;
close all
for i=1:length(t)
    if t(i)<=-1
        x(i)=0;
    elseif  t(i)>-1 && t(i)<1
        x(i)=1;
    elseif  t(i)>=1
            x(i)=0;
        end
end
 
plot(t,x)
set(gca,'xtick',-8:8)
 set(gca,'ytick',-1:0.5:2)
 
 axis('image')
axis([t(1)-3 t(end)+3, min(x)-1 max(x)+1])
 
 figure(1);
   for i=1:length(t)
    if t(i)<0
        f(i)=0;
    elseif  t(i)==0
        f(i)=1;
    elseif  t(i)>0    && t(i)<=1
            f(i)=exp(-t(i));
    else
        f(i)=0;
    end
   end
 
figure(2); plot(t,f)
set(gca,'xtick',-8:8)
set(gca,'ytick',-1:0.5:2)
axis('image')
axis([t(1)-3 t(end)+3, min(f)-1 max(f)+1])
 
 figure(3); plot(t,x.*f)
set(gca,'xtick',-8:8)
 set(gca,'ytick',-1:0.5:2)
  axis('image')
 axis([t(1)-3 t(end)+3, min(x.*f)-1 max(x.*f)+1])


1
>> convolucion_de_vectores



Saludos
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

convolucion continua con la integral

Publicado por isaias rugelez isaiasrug21@gmail.com (1 intervención) el 11/05/2016 05:15:07
buenas tengo un inconveniente con la convolucion continua en matlab me piden hacer la convolucion de dos señales ejemplo dos cuadrados iguales sin usar la herramienta de convolucion y hacer un script donde pueda cambiar los valores de la señales y graficar cada la dos señales mas la señal que resulta de la convolucion de esas señales si me pudieran colaborar les agradezco mucho llevo como 2 meses intentando hacer el programa y no doy como hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar