La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/Matlab/1312967-Programa.html

Programa

Programa

Publicado por alexander mora (4 intervenciones) el 17/02/2012 22:00:28
Buenos dias
Amablemente solicito un programa el cual sujiere: el principio de la convolucion y loops en matlab a partir de dos vectores
a, obtener una señal x(n) y guardarlo en x
b, obtener una señal h(n) y guardarlo en h
c, hacer un loop para simular una sumatoria
d, investigar el codigo de implementacion en tiempo no real

el codigo que estaba desarrollando es asi:
en donde captura la señal en tiempo real atraves de la voz en 2 muestras de 2 segundos

fs1=10000;
z1=wavrecord(2*fs1,fs1);
x=z1;
fs2=5000;
z2=wavrecord(2*fs2,fs2);
h=z2;
y=conv(x,h);
subplot (2,1,1),stem (y)

lo que no entiendo es la implementacion del codigo en tiempo no real y como realizar loops sobre señales netamente estocasticas como la voz

muchas gracias por su apoyo, realmente lo necesito
Imágen de perfil de Dave

Programa

Publicado por Dave (1094 intervenciones) el 18/02/2012 05:27:53
Hola Alexander;

Respecto al ítem c, sobre evaluar la sumatoria, basta con que consideres la sumatoría de cada uno de los valores sobre una variable que cumple el papel de acumulador, con ese procedimiento podría lograr determinar el valor de la sumatoria de todos los elementos de un vector.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fs1=10000;
z1=wavrecord(2*fs1,fs1);
x=z1;
fs2=5000;
z2=wavrecord(2*fs2,fs2);
h=z2;
y=conv(x,h);
 
subplot (2,1,1),stem (y)
 
% Loop para evaluar la sumatoria
acumulador=0;
for n = 1:length(x)
      acumulador = acumulador + x(n);
end
 
acumulador


Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
Servicios de Programación Matlab
http://fismatlab.blogspot.com/

Programa

Publicado por alexander mora (4 intervenciones) el 18/02/2012 15:59:50
Gracias por tu ayuda, pero ahora no se como representar en codigo matlab la convolucion de un vector pero en terminos de sumatoria

x=[ 1 0 0 0 1 0 0 0 ]
h=[ 1 1 1 ]

debo realizar la convolucion en terminos de sumatoria y despues comprobar con la convolucion para comparar, la idea es que de lo mismo

y = conv(x,h)
n dijeron que con un for y desglosando la formula de la convolucion, pero he intentado y no se como, gracias por tu ayuda
Imágen de perfil de JOSE JEREMIAS CABALLERO

Programa

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/02/2012 03:11:45
Hola Alexander.
Solo es cuestion de buscar en internet, muchas veces loque uno quiere ya esta resuelto.
Bueno tienes que estudiar lo q te estoy mandando.
%Codigo para convolucionar vectores con matlab, arroja matriz de salida
%y la sumatoria de los elementos de cada fila, esta sería la respuesta.

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
45
46
47
%Usando una matriz, para llenar
clear all
clc
%1. Definicion de las entradas y de la respuesta al impulso del filtro a implementar.
e=[4 5 2 3 -5 6];
h=[3 4 0 1 2 6 7 ];
 
%2. creando matriz resultado en ceros
m=length(h)+length(e)-1;
n=length(h);
w=zeros(m,n);
y=zeros(1,n);
W=zeros(1,length(e)+length(h)-1);
a=1;
 
%3. Realizando convolucion y llenado de matriz
for k=1:m
    for b=n:-1:2
        y(b)=y(b-1);
    end
    if k<=(m-n+1)
        y(1)=e(k);
    else
        y(1)=0;
    end
    for i=1:n
        w(k,i)= h(i)*y(i);
        a=a+1 ;
    end
    a=1;
end
 
for j=1:m
    xnuevo=0;
    xant=0;
    for c=1:n
        xant=w(j,c);
        xnuevo=xant+xnuevo;
    end
    W(j)=xnuevo;
end
 
%Señal de salida
Solucion_Codigo=W;
Solucion_Matlab=conv(e,h);
display(Solucion_Codigo)
display(Solucion_Matlab)


FUENTE:
http://www.taringa.net/posts/apuntes-y-monografias/10857059/codigo-de-convolucion-con-matlab.html


Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
"Detalladar sus preguntas, para recibir respuestas acertadas"
[email protected]

Programa

Publicado por marco triana (5 intervenciones) el 21/02/2012 18:09:32
Hola cordial saludo Dave es de gran ayuda tu aporte, tu sabes en donde encontar o como generar un codigo en matlab para imagenes en 2D que realice convolucion y se le pueda aplicar un filtro pasabajos para luego ver su respuesta al filtro, lo que pasa es que me exigieron este codigo para imgenes en 2D

lo que hemos adelantado es lo siguiente:

la imagen forma una matriz de MxN
su repuesta H(n) genera una matriz de PxQ siendo de tamaño simetrico
entonces:
1 2 3 4 5 ..M H(n)=1 2 P
2 2
3 Q
4
N


function=y conv programa (I,H)
(N,M) = size(I);
(P,Q)=size(H);
y=zeros(N+P-1, M+P-1)
FOR i=1:M
FOR J=1:N
y=(j:P+(J-1),i:P+(I-1))=I(j,i)H+Y(j;P+(j-1), i:P+(i-1));
end
end


gracias por tu ayuda