Título: Convolución Circular Publicado por: drbeat en 2 Marzo 2011, 13:55 pm Código
Título: Re: Convolución Circular Publicado por: drbeat en 2 Marzo 2011, 14:08 pm Hola buenas!
A pesar de ser nuevo en el foro a partir de ahora me veréis más por aquí. Soy estudiante de teleco y estoy tratando de realizar la simulación de la convolución lineal y circular de 2 señales digitales genéricas en código C. A pesar de lo raro que os suene a algunos, no son más que 2 arrays unidimensionales que interactúan entre ellos. El usuario elige previamente el numero de elementos de cada uno y cada valor. En la convolucion lineal, se multiplican y se suman siendo el numero de elementos del resultado = numelementos1ºvector + numelementos2ºvector -1 ;y en la circular, el resultado de ésta y el vector mas pequeño deben tener el mismo numero de elementos que el primero y normalmente se implementa en código la Transformada de Fourier Discreta (DFT). Pero para evitar a Fourier, se coge el cacho correspondiente al array resultado de la convolucion lineal que cuadre con el numero de elementos del mayor vector, y al vector mas pequeño se le añaden ceros para despues sumar ambos y obtener el resultado. Para que me comprendais mejor, la convolucion se puede comprobar en Matlab haciendo y=conv(a,b) para la lineal y=ifft(fft(a).*fft(b)) para la circular, siendo a y b dos vectores cualesquiera. Dado mis conocimientos básiquisimos de programación y que hace años que no me topo con el lenguaje C, posteo este hilo para vuestro deleite. El problema seguramente lo tenga al operar y en mis bucles "for" irrisorios. Se agradece un cable ;) Un saludin :) Título: Re: Convolución Circular Publicado por: drbeat en 2 Marzo 2011, 14:16 pm Nota:
En el código la funcion conv solo hace la convolucion lineal y de momento parece que funciona. La convolución circular la trato de hacer justo después pero en el cuerpo de la main y no hay manera chico... :-\ Título: Re: Convolución Circular Publicado por: drbeat en 2 Marzo 2011, 15:18 pm No sé si estoy operando correctamente con los punteros *zn y *wn.
Lo que hago es reservar memoria previamente para ellos utilizando malloc, pero me gustaría usar calloc con el puntero *zn y da un error de memoria... :-\ Título: Re: Convolución Circular Publicado por: RyogiShiki en 2 Marzo 2011, 15:45 pm Deberías colocar el código dentro de las etiquetas GeSHi seleccionando la opción para código C:
(http://i56.tinypic.com/34erlw6.png) Solo para que se entienda mejor y no sea tedioso leerlo! Saludos Título: Re: Convolución Circular Publicado por: drbeat en 2 Marzo 2011, 15:57 pm sorry! :)
|